{
  "components": {
    "schemas": {
      "ErrorEnvelope": {
        "description": "JSON-RPC error envelope. Codes/texts from the error catalog.",
        "properties": {
          "code": {
            "type": "integer"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object"
      },
      "QueuedEnvelope": {
        "description": "Ack for a relayed (async) method; final reply arrives later.",
        "properties": {
          "code": {
            "const": 999,
            "type": "integer"
          },
          "data": {
            "const": "request queued",
            "type": "string"
          }
        },
        "required": [
          "code",
          "data"
        ],
        "type": "object"
      },
      "SuccessEnvelope": {
        "properties": {
          "code": {
            "const": 1,
            "description": "SUCCESS_CODE",
            "type": "integer"
          },
          "data": {
            "description": "Method-specific result payload."
          }
        },
        "required": [
          "code",
          "data"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "sessionCookie": {
        "description": "Подписанная cookie-сессия. Выдаётся методами аутентификации (auth3); cluster-endpoint проверяет подпись и вкладывает токен в params.auth.cookie перед доставкой диспетчеру.",
        "in": "cookie",
        "name": "APIEndpoint00",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "description": "# Аутентификация\n\nВсе методы (кроме методов аутентификации) требуют **сессионную cookie `APIEndpoint00`**.\n\n1. Получите сессию методом `auth3` (см. раздел auth): `POST /.api/login` с логином/паролем.\n2. Успешный ответ устанавливает подписанную cookie `APIEndpoint00`; передавайте её в заголовке `Cookie` каждого запроса.\n3. cluster-endpoint проверяет подпись cookie и сам вкладывает токен в `params.auth.cookie` перед доставкой диспетчеру — в теле запроса поле `auth` передавать не нужно.\n\n# Транспорт\n\nJSON-RPC 2.0 поверх HTTPS. **Точка входа одна** — метод передаётся в теле запроса, не в URL:\n\n| Endpoint | Назначение |\n|---|---|\n| `POST /.api/.req/` | синхронный вызов (ответ в том же HTTP-ответе) |\n| `POST /.api/.async/.req/` | асинхронный вызов (немедленный ack, результат опрашивается) |\n| `POST /.api/login` | методы аутентификации (`auth3`), без cookie |\n\n# Формат ответов и коды\n\nУспех: `{\"result\": {\"code\": 1, \"data\": ...}}`. Поставлено в очередь (async): `{\"result\": {\"code\": 999, \"data\": \"request queued\"}}`.\nОшибка: `{\"error\": {\"code\": <int>, \"message\": <string>}}`.\n\nСтандартные коды JSON-RPC 2.0: `-32700` parse error, `-32600` invalid request, `-32601` метод не найден, `-32602` невалидные параметры (все ошибки валидации `Params`), `-32603` внутренняя ошибка. Ошибки агентов/контроллеров пробрасываются как есть (`ControllerError`: code/message/data источника). Ошибки конкретного метода перечислены в описании метода.\n",
    "title": "vStack Center JSON-RPC API",
    "version": "3.2.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/.api/.req/#auth": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** —\n\nOldest login endpoint. Retained only for very old clients; superseded by auth2 and then auth3. Same credential params and result-code semantics. Off-router: terminated at cluster-endpoint. Not recommended for any new use.",
        "operationId": "auth",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "auth",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "password": {
                        "type": "string"
                      },
                      "username": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "username",
                      "password"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "code": {
                                  "enum": [
                                    1,
                                    2
                                  ],
                                  "type": "integer"
                                },
                                "data": {
                                  "type": "object"
                                }
                              },
                              "required": [
                                "code",
                                "data"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": []
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "security": [],
        "summary": "Authenticate a user (oldest legacy version, deprecated).",
        "tags": [],
        "x-deprecated": true,
        "x-no-auth": true,
        "x-visibility": "internal",
        "x-access": [],
        "x-error-reasons": {}
      }
    },
    "/.api/.req/#auth-logout": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** —\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "auth-logout",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "auth-logout",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "all": {
                        "default": false,
                        "type": "boolean"
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "result": {
                                  "description": "Всегда `true`: сессии завершены (или завершать было нечего).",
                                  "type": "boolean"
                                }
                              },
                              "required": [
                                "result"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "auth"
        ],
        "x-access": [],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#auth-security-settings-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Settings, Edit Security Settings\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-29101` | Security settings not found | В БД отсутствует запись настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "auth-security-settings-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "auth-security-settings-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Полный набор настроек — для пользователя с правом менять настройки безопасности.",
                                  "properties": {
                                    "failed_attempts_window_minutes": {
                                      "description": "Окно подсчёта неудачных попыток входа, минут.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "lockout_duration_minutes": {
                                      "description": "Длительность блокировки, минут; `0` — блокировка бессрочная.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "max_failed_attempts": {
                                      "description": "Число неудачных попыток входа, после которого учётная запись блокируется.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "password_min_length": {
                                      "description": "Минимальная длина пароля.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "password_require_digits": {
                                      "description": "Пароль должен содержать цифру.",
                                      "type": "boolean"
                                    },
                                    "password_require_lowercase": {
                                      "description": "Пароль должен содержать строчную букву.",
                                      "type": "boolean"
                                    },
                                    "password_require_special": {
                                      "description": "Пароль должен содержать спецсимвол.",
                                      "type": "boolean"
                                    },
                                    "password_require_uppercase": {
                                      "description": "Пароль должен содержать заглавную букву.",
                                      "type": "boolean"
                                    }
                                  },
                                  "required": [
                                    "max_failed_attempts",
                                    "failed_attempts_window_minutes",
                                    "lockout_duration_minutes",
                                    "password_min_length",
                                    "password_require_uppercase",
                                    "password_require_lowercase",
                                    "password_require_digits",
                                    "password_require_special"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "description": "Только парольная политика — для остальных пользователей.",
                                  "properties": {
                                    "password_min_length": {
                                      "description": "Минимальная длина пароля.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "password_require_digits": {
                                      "description": "Пароль должен содержать цифру.",
                                      "type": "boolean"
                                    },
                                    "password_require_lowercase": {
                                      "description": "Пароль должен содержать строчную букву.",
                                      "type": "boolean"
                                    },
                                    "password_require_special": {
                                      "description": "Пароль должен содержать спецсимвол.",
                                      "type": "boolean"
                                    },
                                    "password_require_uppercase": {
                                      "description": "Пароль должен содержать заглавную букву.",
                                      "type": "boolean"
                                    }
                                  },
                                  "required": [
                                    "password_min_length",
                                    "password_require_uppercase",
                                    "password_require_lowercase",
                                    "password_require_digits",
                                    "password_require_special"
                                  ],
                                  "type": "object"
                                }
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -29101,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "auth"
        ],
        "x-access": [
          "View Security Settings",
          "Edit Security Settings"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-29101": "В БД отсутствует запись настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#auth-security-settings-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Edit Security Settings\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "auth-security-settings-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "auth-security-settings-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "failed_attempts_window_minutes": {
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "lockout_duration_minutes": {
                        "format": "int32",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "max_failed_attempts": {
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "password_min_length": {
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "password_require_digits": {
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "password_require_lowercase": {
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "password_require_special": {
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "password_require_uppercase": {
                        "type": [
                          "boolean",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: настройки сохранены. Текущие значения возвращает\n`auth-security-settings-get`.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "auth"
        ],
        "x-access": [
          "Edit Security Settings"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#auth2": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** —\n\nLegacy login endpoint kept for backward compatibility with older clients. Same credential params and same result-code semantics as auth3 (1 = authenticated, 2 = must change password, -119 = failure). New integrations must use auth3. Off-router: terminated at cluster-endpoint.",
        "operationId": "auth2",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "auth2",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "password": {
                        "type": "string"
                      },
                      "username": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "username",
                      "password"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "code": {
                                  "enum": [
                                    1,
                                    2
                                  ],
                                  "type": "integer"
                                },
                                "data": {
                                  "type": "object"
                                }
                              },
                              "required": [
                                "code",
                                "data"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": []
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "security": [],
        "summary": "Authenticate a user (legacy version, deprecated).",
        "tags": [],
        "x-deprecated": true,
        "x-no-auth": true,
        "x-visibility": "internal",
        "x-access": [],
        "x-error-reasons": {}
      }
    },
    "/.api/.req/#auth3": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** —\n\nValidates username/password credentials against the Center user store. On success returns a session cookie in data.cookie.APIEndpoint00 (result.code = 1). If the account requires a password change, returns a temporary token in the same field with result.code = 2; that temporary token is a temp-token (is_temp_token) and grants only the password-change flow. On failure returns error.code = -119. Off-router: handled by handle_auth3_callback via queue auth_Q3.",
        "operationId": "auth3",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "auth3",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "password": {
                        "type": "string"
                      },
                      "username": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "username",
                      "password"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "code": {
                                  "enum": [
                                    1,
                                    2
                                  ],
                                  "type": "integer"
                                },
                                "data": {
                                  "properties": {
                                    "cookie": {
                                      "properties": {
                                        "APIEndpoint00": {
                                          "description": "Session cookie (code 1) or temporary password-change token (code 2).",
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "APIEndpoint00"
                                      ],
                                      "type": "object"
                                    },
                                    "message": {
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "cookie",
                                    "message"
                                  ],
                                  "type": "object"
                                }
                              },
                              "required": [
                                "code",
                                "data"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": []
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "security": [],
        "summary": "Authenticate a user (current version).",
        "tags": [],
        "x-no-auth": true,
        "x-transport": "amqp:auth_Q3",
        "x-visibility": "internal",
        "x-access": [],
        "x-error-reasons": {}
      }
    },
    "/.api/.req/#backup-dataset-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Backup Dataset Ops\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25436` | Backup dataset operation failed: {0} | Агент хранилища отказал в операции с датасетом резервной копии. |\n| `-25434` | Pool is not consuming or its node is unavailable: {0} | Пул датасета резервной копии не используется кластером или его узел недоступен. |\n| `-25431` | No pool with enough free space for backup dataset | Нет пула с достаточным свободным местом под датасет резервной копии. |\n| `-25430` | Invalid backup dataset path: {0} | Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`. |\n| `-25420` | Backup feature is disabled | Метод резервного копирования вызван при выключенной опции `feature.backup`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах резервного копирования. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "backup-dataset-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "backup-dataset-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "name": {
                        "description": "Chain dataset leaf name (no pool, no `.backup` prefix); opaque to the cluster.",
                        "maxLength": 128,
                        "minLength": 1,
                        "type": "string"
                      },
                      "size_hint_bytes": {
                        "default": null,
                        "description": "Estimated full size of the backed-up VM, bytes — pool pre-filter. Absent → no filter.",
                        "format": "int64",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "dataset_name": {
                                  "description": "Полное имя созданного датасета цепочки резервных копий: `<пул>/.backup/<имя>`.",
                                  "type": "string"
                                },
                                "node_ip": {
                                  "description": "Адрес узла-владельца пула.",
                                  "type": "string"
                                },
                                "pool_name": {
                                  "description": "Пул, на котором создан датасет.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "dataset_name",
                                "pool_name",
                                "node_ip"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25436,
                        -25434,
                        -25431,
                        -25430,
                        -25420,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "backup"
        ],
        "x-access": [
          "Backup Dataset Ops"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25436": "Агент хранилища отказал в операции с датасетом резервной копии.",
          "-25434": "Пул датасета резервной копии не используется кластером или его узел недоступен.",
          "-25431": "Нет пула с достаточным свободным местом под датасет резервной копии.",
          "-25430": "Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`.",
          "-25420": "Метод резервного копирования вызван при выключенной опции `feature.backup`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах резервного копирования."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#backup-dataset-receive": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** —\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25436` | Backup dataset operation failed: {0} | Агент хранилища отказал в операции с датасетом резервной копии. |\n| `-25434` | Pool is not consuming or its node is unavailable: {0} | Пул датасета резервной копии не используется кластером или его узел недоступен. |\n| `-25432` | Backup dataset not found: {0} | Датасета резервной копии нет на узле. |\n| `-25430` | Invalid backup dataset path: {0} | Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`. |\n| `-25420` | Backup feature is disabled | Метод резервного копирования вызван при выключенной опции `feature.backup`. |\n| `-25308` | No free 'send-receive' ports. Please try later | Все send-receive порты заняты — повторите попытку позже. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах резервного копирования. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "backup-dataset-receive",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "backup-dataset-receive",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "dataset_name": {
                        "description": "Full chain dataset path (`<pool>/.backup/<leaf>`, from gi's `backup_seq`).",
                        "minLength": 1,
                        "type": "string"
                      },
                      "timeout": {
                        "default": null,
                        "description": "How long the listener waits for the sender to connect, seconds.",
                        "format": "uint16",
                        "maximum": 65535,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "dataset_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "message": {
                                  "description": "Всегда `relayed`: приём запущен на узле.",
                                  "type": "string"
                                },
                                "node_ip": {
                                  "description": "Адрес узла, принимающего поток.",
                                  "type": "string"
                                },
                                "port": {
                                  "description": "Порт, на котором узел ждёт поток.",
                                  "format": "uint16",
                                  "maximum": 65535,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "rpc_id": {
                                  "description": "Идентификатор запроса.",
                                  "format": "uuid",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "message",
                                "rpc_id",
                                "node_ip",
                                "port"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25436,
                        -25434,
                        -25432,
                        -25430,
                        -25420,
                        -25308,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "backup"
        ],
        "x-access": [],
        "x-async": false,
        "x-error-reasons": {
          "-25436": "Агент хранилища отказал в операции с датасетом резервной копии.",
          "-25434": "Пул датасета резервной копии не используется кластером или его узел недоступен.",
          "-25432": "Датасета резервной копии нет на узле.",
          "-25430": "Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`.",
          "-25420": "Метод резервного копирования вызван при выключенной опции `feature.backup`.",
          "-25308": "Все send-receive порты заняты — повторите попытку позже.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах резервного копирования."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#backup-dataset-remove": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** —\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25436` | Backup dataset operation failed: {0} | Агент хранилища отказал в операции с датасетом резервной копии. |\n| `-25434` | Pool is not consuming or its node is unavailable: {0} | Пул датасета резервной копии не используется кластером или его узел недоступен. |\n| `-25430` | Invalid backup dataset path: {0} | Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`. |\n| `-25420` | Backup feature is disabled | Метод резервного копирования вызван при выключенной опции `feature.backup`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах резервного копирования. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "backup-dataset-remove",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "backup-dataset-remove",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "dataset_name": {
                        "description": "Full chain dataset path (`<pool>/.backup/<leaf>`).",
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "dataset_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "message": {
                                  "description": "Всегда `ok`: датасет удалён либо его уже не было.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "message"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25436,
                        -25434,
                        -25430,
                        -25420,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "backup"
        ],
        "x-access": [],
        "x-async": false,
        "x-error-reasons": {
          "-25436": "Агент хранилища отказал в операции с датасетом резервной копии.",
          "-25434": "Пул датасета резервной копии не используется кластером или его узел недоступен.",
          "-25430": "Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`.",
          "-25420": "Метод резервного копирования вызван при выключенной опции `feature.backup`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах резервного копирования."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#backup-dataset-send": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** —\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25434` | Pool is not consuming or its node is unavailable: {0} | Пул датасета резервной копии не используется кластером или его узел недоступен. |\n| `-25430` | Invalid backup dataset path: {0} | Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`. |\n| `-25420` | Backup feature is disabled | Метод резервного копирования вызван при выключенной опции `feature.backup`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах резервного копирования. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "backup-dataset-send",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "backup-dataset-send",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "current": {
                        "description": "Short snapshot name of the restore point (suffix after `@`) — sent as-is, no new snapshot.",
                        "maxLength": 128,
                        "minLength": 1,
                        "type": "string"
                      },
                      "dataset_name": {
                        "description": "Full chain dataset path (`<pool>/.backup/<leaf>`).",
                        "minLength": 1,
                        "type": "string"
                      },
                      "host": {
                        "description": "Receiver node IP (from the destination cluster's `vm-backup-restore`).",
                        "minLength": 1,
                        "type": "string"
                      },
                      "parent": {
                        "default": null,
                        "description": "Reserved: incremental delivery base (requires the receiver to already hold it). v1 unused.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "port": {
                        "description": "Receiver port.",
                        "format": "uint16",
                        "maximum": 65535,
                        "minimum": 0,
                        "type": "integer"
                      },
                      "timeout": {
                        "default": null,
                        "description": "TCP connect timeout, seconds.",
                        "format": "uint16",
                        "maximum": 65535,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "current",
                      "dataset_name",
                      "host",
                      "port"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Итог передачи точки восстановления получателю.",
                              "properties": {
                                "size_bytes": {
                                  "description": "Передано байт; ключа нет, если агент узла объём не сообщил.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "snap_creation": {
                                  "description": "Время создания снимка в том виде, в каком его вернул агент узла; ключа нет, если не вернул."
                                },
                                "snap_guid": {
                                  "description": "GUID переданного снимка, десятичное число строкой; ключа нет, если агент узла его не вернул.",
                                  "type": "string"
                                },
                                "snap_name": {
                                  "description": "Полное имя переданного снимка (`<датасет>@<снимок>`); пустая строка, если агент узла\nимя не вернул.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "snap_name"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25434,
                        -25430,
                        -25420,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "backup"
        ],
        "x-access": [],
        "x-async": false,
        "x-error-reasons": {
          "-25434": "Пул датасета резервной копии не используется кластером или его узел недоступен.",
          "-25430": "Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`.",
          "-25420": "Метод резервного копирования вызван при выключенной опции `feature.backup`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах резервного копирования."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#backup-snapshot-remove": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** —\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25436` | Backup dataset operation failed: {0} | Агент хранилища отказал в операции с датасетом резервной копии. |\n| `-25434` | Pool is not consuming or its node is unavailable: {0} | Пул датасета резервной копии не используется кластером или его узел недоступен. |\n| `-25430` | Invalid backup dataset path: {0} | Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`. |\n| `-25420` | Backup feature is disabled | Метод резервного копирования вызван при выключенной опции `feature.backup`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах резервного копирования. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "backup-snapshot-remove",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "backup-snapshot-remove",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "dataset_name": {
                        "description": "Full chain dataset path (`<pool>/.backup/<leaf>`).",
                        "minLength": 1,
                        "type": "string"
                      },
                      "snapshot": {
                        "description": "Short snapshot name (suffix after `@`).",
                        "maxLength": 128,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "dataset_name",
                      "snapshot"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "message": {
                                  "description": "Всегда `ok`: снимок удалён либо его уже не было.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "message"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25436,
                        -25434,
                        -25430,
                        -25420,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "backup"
        ],
        "x-access": [],
        "x-async": false,
        "x-error-reasons": {
          "-25436": "Агент хранилища отказал в операции с датасетом резервной копии.",
          "-25434": "Пул датасета резервной копии не используется кластером или его узел недоступен.",
          "-25430": "Имя датасета резервной копии или снимка некорректно либо путь не под `.backup`.",
          "-25420": "Метод резервного копирования вызван при выключенной опции `feature.backup`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах резервного копирования."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-list-volumes": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** List All Volumes\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-list-volumes",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-list-volumes",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "filters": {
                        "description": "Фильтры таблицы (все необязательны).",
                        "properties": {
                          "mapped": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          },
                          "pool_guid": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "protocol": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "vdc_id": {
                            "format": "int32",
                            "minimum": 1,
                            "type": [
                              "integer",
                              "null"
                            ]
                          }
                        },
                        "type": [
                          "object",
                          "null"
                        ]
                      },
                      "limit": {
                        "format": "int64",
                        "maximum": 500,
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "objective": {
                        "default": null,
                        "description": "Режим ответа: массив (по умолчанию) или карта по строковому `guid`."
                      },
                      "page": {
                        "format": "int64",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "cluster_has_volumes": {
                                  "description": "Есть ли в кластере тома вообще: отличает «под фильтром пусто» от пустого кластера.",
                                  "type": "boolean"
                                },
                                "items": {
                                  "anyOf": [
                                    {
                                      "items": {
                                        "properties": {
                                          "block_size": {
                                            "description": "Размер блока тома в байтах; `null`, если не задан.",
                                            "format": "int64",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "guid": {
                                            "description": "Идентификатор тома строкой.",
                                            "type": "string"
                                          },
                                          "mapped": {
                                            "description": "Роздан ли том через таргет.",
                                            "type": "boolean"
                                          },
                                          "name": {
                                            "description": "Имя тома.",
                                            "type": "string"
                                          },
                                          "pool_guid": {
                                            "anyOf": [
                                              {
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              {
                                                "type": "string"
                                              }
                                            ],
                                            "description": "GUID пула."
                                          },
                                          "pool_name": {
                                            "description": "Имя пула; `null`, если не задано.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "protocol": {
                                            "description": "Протокол раздачи; `null`, если том не роздан.",
                                            "enum": [
                                              "iscsi",
                                              null
                                            ],
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "size_gb": {
                                            "description": "Размер тома в ГиБ, с округлением вниз.",
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          "target_qn": {
                                            "description": "IQN таргета раздачи; `null`, если том не роздан.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "vdc_id": {
                                            "description": "ДЦ-владелец тома.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "vdc_name": {
                                            "description": "Имя ДЦ; `null`, если не задано.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "guid",
                                          "name",
                                          "vdc_id",
                                          "pool_guid",
                                          "size_gb",
                                          "mapped"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "array"
                                    },
                                    {
                                      "additionalProperties": {
                                        "properties": {
                                          "block_size": {
                                            "description": "Размер блока тома в байтах; `null`, если не задан.",
                                            "format": "int64",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "guid": {
                                            "description": "Идентификатор тома строкой.",
                                            "type": "string"
                                          },
                                          "mapped": {
                                            "description": "Роздан ли том через таргет.",
                                            "type": "boolean"
                                          },
                                          "name": {
                                            "description": "Имя тома.",
                                            "type": "string"
                                          },
                                          "pool_guid": {
                                            "anyOf": [
                                              {
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              {
                                                "type": "string"
                                              }
                                            ],
                                            "description": "GUID пула."
                                          },
                                          "pool_name": {
                                            "description": "Имя пула; `null`, если не задано.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "protocol": {
                                            "description": "Протокол раздачи; `null`, если том не роздан.",
                                            "enum": [
                                              "iscsi",
                                              null
                                            ],
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "size_gb": {
                                            "description": "Размер тома в ГиБ, с округлением вниз.",
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          "target_qn": {
                                            "description": "IQN таргета раздачи; `null`, если том не роздан.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "vdc_id": {
                                            "description": "ДЦ-владелец тома.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "vdc_name": {
                                            "description": "Имя ДЦ; `null`, если не задано.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "guid",
                                          "name",
                                          "vdc_id",
                                          "pool_guid",
                                          "size_gb",
                                          "mapped"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "object"
                                    }
                                  ],
                                  "description": "Тома страницы: массив, а с параметром `objective` — объект с ключом `guid` тома."
                                },
                                "limit": {
                                  "description": "Размер страницы.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "page": {
                                  "description": "Номер страницы.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "total": {
                                  "description": "Число томов под текущими фильтрами, по всем страницам.",
                                  "format": "int64",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "items",
                                "page",
                                "limit",
                                "total",
                                "cluster_has_volumes"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "List All Volumes"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-node-disable": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Disable Cluster Node\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-20122` | Bad node_ID param value | Параметр node_ID не приводится к числовому идентификатору ноды (cluster-node-enable/disable). |\n| `-713` | *динамическое сообщение* | ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-node-disable",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-node-disable",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_ID": {
                        "pattern": "^[a-zA-Z0-9_]+$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "node_ID"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -20122,
                        -713,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "Disable Cluster Node"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-20122": "Параметр node_ID не приводится к числовому идентификатору ноды (cluster-node-enable/disable).",
          "-713": "ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-node-enable": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Enable Cluster Node\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-20122` | Bad node_ID param value | Параметр node_ID не приводится к числовому идентификатору ноды (cluster-node-enable/disable). |\n| `-713` | *динамическое сообщение* | ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-node-enable",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-node-enable",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_ID": {
                        "pattern": "^[a-zA-Z0-9_]+$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "node_ID"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -20122,
                        -713,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "Enable Cluster Node"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-20122": "Параметр node_ID не приводится к числовому идентификатору ноды (cluster-node-enable/disable).",
          "-713": "ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-overview": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Cluster Overview\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-15905` | Error upon perfdata retreival | cluster-overview: InfluxDB не отвечает (нет соединения) при запросе метрик. |\n| `-15904` | Unknown error upon perfdata retreival | cluster-overview: не удалось разобрать ответ InfluxDB. |\n| `-15903` | Error upon perfdata retreival: {0} | cluster-overview: InfluxDB вернула HTTP-ошибку на запрос метрик. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | cluster-overview: ошибка БД при сборе данных обзора кластера. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-overview",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-overview",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Сводка по узлу кластера.",
                                "properties": {
                                  "cores": {
                                    "description": "Ядра, выделенные запущенным ВМ узла, в процентах от ядер узла (целое).",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "node_cpu_cores": {
                                    "description": "Число процессорных ядер узла; `0`, если не известно.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "node_name": {
                                    "description": "Имя узла; `null`, если не задано.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "node_ram": {
                                    "description": "Оперативная память узла в байтах; `0`, если не известна.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "pools": {
                                    "description": "Пулы хранения, работающие на узле; пустой массив, если пулов нет.",
                                    "items": {
                                      "description": "Пул хранения на узле.",
                                      "properties": {
                                        "capacity_pct": {
                                          "description": "Заполненность пула в процентах; `0`, если не известна.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "consuming": {
                                          "description": "Пул в рабочем состоянии (consuming): `1` — да, `0` — нет или не известно.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "guid": {
                                          "description": "GUID пула — десятичное число строкой.",
                                          "type": "string"
                                        },
                                        "name": {
                                          "description": "Имя пула; пустая строка, если не задано.",
                                          "type": "string"
                                        },
                                        "provisioned_pct": {
                                          "description": "Объём томов пула в процентах от его полезного размера.",
                                          "format": "int32",
                                          "type": "integer"
                                        }
                                      },
                                      "required": [
                                        "guid",
                                        "name",
                                        "capacity_pct",
                                        "provisioned_pct",
                                        "consuming"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  },
                                  "ram": {
                                    "description": "Память, выделенная запущенным ВМ узла, в процентах от памяти узла (целое).",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "ram_available": {
                                    "description": "Память узла, не выделенная ВМ, в байтах: `node_ram` минус `ram_provisioned`.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "ram_provisioned": {
                                    "description": "Память, выделенная запущенным ВМ узла, в байтах.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "utilization_cores_pct": {
                                    "description": "Фактическая загрузка ядер узла ВМ за последние три минуты, в процентах: строка\nс двумя знаками после запятой (`\"12.50\"`); `\"0.0\"`, если данных мониторинга нет.",
                                    "type": "string"
                                  },
                                  "utilization_ram_pct": {
                                    "description": "Фактическое потребление памяти узла ВМ за последние три минуты, в процентах: строка\nс двумя знаками после запятой; `\"0.0\"`, если данных мониторинга нет.",
                                    "type": "string"
                                  }
                                },
                                "required": [
                                  "node_ram",
                                  "node_cpu_cores",
                                  "ram",
                                  "cores",
                                  "ram_provisioned",
                                  "ram_available",
                                  "pools",
                                  "utilization_cores_pct",
                                  "utilization_ram_pct"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -15905,
                        -15904,
                        -15903,
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "View Cluster Overview"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-15905": "cluster-overview: InfluxDB не отвечает (нет соединения) при запросе метрик.",
          "-15904": "cluster-overview: не удалось разобрать ответ InfluxDB.",
          "-15903": "cluster-overview: InfluxDB вернула HTTP-ошибку на запрос метрик.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "cluster-overview: ошибка БД при сборе данных обзора кластера."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-service-disable": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Disable Cluster Service\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-713` | *динамическое сообщение* | ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-service-disable",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-service-disable",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "service_name": {
                        "pattern": "^[a-zA-Z0-9_]+$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "service_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -713,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "Disable Cluster Service"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-713": "ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-service-enable": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Enable Cluster Service\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-713` | *динамическое сообщение* | ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-service-enable",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-service-enable",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "service_name": {
                        "pattern": "^[a-zA-Z0-9_]+$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "service_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -713,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "Enable Cluster Service"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-713": "ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-service-start": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Start Cluster Service\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-20522` | Bad node_ID param value | cluster-service-start: параметр node_ID не приводится к числовому идентификатору ноды. |\n| `-713` | *динамическое сообщение* | ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-service-start",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-service-start",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_ID": {
                        "pattern": "^[a-zA-Z0-9_]+$",
                        "type": "string"
                      },
                      "service_name": {
                        "pattern": "^[a-zA-Z0-9_]+$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "node_ID",
                      "service_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -20522,
                        -713,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "Start Cluster Service"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-20522": "cluster-service-start: параметр node_ID не приводится к числовому идентификатору ноды.",
          "-713": "ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-service-stop": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Stop Cluster Service\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-20530` | Pool has running VMs on other nodes that could not be stopped | остановка сервиса пула невозможна — в пуле есть работающие ВМ на других узлах, которые не удалось погасить перед экспортом. Несёт список мешающих ВМ (`{ \"vms\": [{ \"vm_id\", \"vm_name\", \"node\" }] }`) для `error.data`. |\n| `-713` | *динамическое сообщение* | ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-service-stop",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-service-stop",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "service_name": {
                        "pattern": "^[a-zA-Z0-9_]+$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "service_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -20530,
                        -713,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "Stop Cluster Service"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-20530": "остановка сервиса пула невозможна — в пуле есть работающие ВМ на других узлах, которые не удалось погасить перед экспортом. Несёт список мешающих ВМ (`{ \"vms\": [{ \"vm_id\", \"vm_name\", \"node\" }] }`) для `error.data`.",
          "-713": "ZMQ-запрос к сервису кластера завершился ошибкой (ответ с error от cluster-сервиса).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-storage-overview": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Storage Overview\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-storage-overview",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-storage-overview",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "by_protocol": {
                                  "description": "Те же счётчики в разбивке по протоколам доступа.",
                                  "properties": {
                                    "iscsi": {
                                      "description": "Счётчики протокола iSCSI.",
                                      "properties": {
                                        "initiators": {
                                          "description": "Число записей IQN в группах инициаторов.",
                                          "format": "int64",
                                          "type": "integer"
                                        },
                                        "luns": {
                                          "description": "Число LUN.",
                                          "format": "int64",
                                          "type": "integer"
                                        },
                                        "portal_groups": {
                                          "description": "Число групп порталов.",
                                          "format": "int64",
                                          "type": "integer"
                                        },
                                        "targets": {
                                          "description": "Число таргетов.",
                                          "format": "int64",
                                          "type": "integer"
                                        }
                                      },
                                      "required": [
                                        "initiators",
                                        "portal_groups",
                                        "targets",
                                        "luns"
                                      ],
                                      "type": "object"
                                    }
                                  },
                                  "required": [
                                    "iscsi"
                                  ],
                                  "type": "object"
                                },
                                "cluster_has_storage": {
                                  "description": "Есть ли в кластере хранилище: `true`, если хотя бы один счётчик больше нуля.",
                                  "type": "boolean"
                                },
                                "initiators": {
                                  "description": "Число записей IQN во всех группах инициаторов кластера; IQN, входящий в\nдве группы, считается дважды.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "luns": {
                                  "description": "Число LUN — раздач томов через таргеты.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "portal_groups": {
                                  "description": "Число групп порталов.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "targets": {
                                  "description": "Число таргетов.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "vdc_with_storage": {
                                  "description": "Число ДЦ с подключённым блочным хранилищем.",
                                  "format": "int64",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "initiators",
                                "portal_groups",
                                "vdc_with_storage",
                                "targets",
                                "luns",
                                "by_protocol",
                                "cluster_has_storage"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "View Storage Overview"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#cluster-totals": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Cluster Totals\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-15925` | Error upon perfdata retreival | cluster-totals: InfluxDB не отвечает (нет соединения) при запросе метрик. |\n| `-15924` | Unknown error upon perfdata retreival | cluster-totals: не удалось разобрать ответ InfluxDB. |\n| `-15923` | Error upon perfdata retreival: {0} | cluster-totals: InfluxDB вернула HTTP-ошибку на запрос метрик. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | cluster-totals: ошибка БД при сборе суммарных показателей кластера. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "cluster-totals",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "cluster-totals",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "cpu_cores_provisioned": {
                                  "description": "Процессорные ядра, выделенные запущенным ВМ кластера.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "cpu_cores_total": {
                                  "description": "Процессорные ядра всех узлов кластера.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "cpu_used": {
                                  "description": "Фактически занятые ВМ процессорные ядра по данным мониторинга за последние\nдве минуты (целая часть); `0`, если данных нет.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "ram_provisioned": {
                                  "description": "Память, выделенная запущенным ВМ кластера, в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "ram_total": {
                                  "description": "Оперативная память всех узлов кластера в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "ram_used": {
                                  "description": "Фактическое потребление памяти ВМ по данным мониторинга за последние две\nминуты; `0`, если данных нет.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "space_provisioned": {
                                  "description": "Суммарный размер томов на пулах хранения в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "space_total": {
                                  "description": "Суммарный размер всех пулов хранения в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "space_used": {
                                  "description": "Занятое место на всех пулах хранения в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "cpu_cores_provisioned",
                                "ram_provisioned",
                                "cpu_cores_total",
                                "ram_total",
                                "space_provisioned",
                                "space_total",
                                "space_used",
                                "cpu_used",
                                "ram_used"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -15925,
                        -15924,
                        -15923,
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "cluster"
        ],
        "x-access": [
          "View Cluster Totals"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-15925": "cluster-totals: InfluxDB не отвечает (нет соединения) при запросе метрик.",
          "-15924": "cluster-totals: не удалось разобрать ответ InfluxDB.",
          "-15923": "cluster-totals: InfluxDB вернула HTTP-ошибку на запрос метрик.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "cluster-totals: ошибка БД при сборе суммарных показателей кластера."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-add-fw-rule": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Add Own Edge Firewall Rule, Add Firewall Rule\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-18091` | *динамическое сообщение* | Ошибка базы данных при добавлении FW-правила. |\n| `-18053` | Bad rule_log param value | Параметр rule_log имеет значение, отличное от 0 и 1. |\n| `-18050` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует. |\n| `-18037` | Invalid CIDR value at rule_dst_host param | Значение rule_dst_host не разбирается как корректный CIDR. |\n| `-18032` | Invalid CIDR value at rule_from_host param | Значение rule_from_host не разбирается как корректный CIDR. |\n| `-18019` | Rule number above 32767 | Значение rule_number больше максимально допустимого (32767). |\n| `-18018` | Rule number below 100 | Значение rule_number меньше минимально допустимого (100). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-add-fw-rule",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-add-fw-rule",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "rule_action": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_direction": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_dst_host": {
                        "type": "string"
                      },
                      "rule_dst_port": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_from_host": {
                        "type": "string"
                      },
                      "rule_from_port": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_ifname": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_log": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "rule_number": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_proto": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "edge_id",
                      "rule_action",
                      "rule_direction",
                      "rule_dst_host",
                      "rule_dst_port",
                      "rule_from_host",
                      "rule_from_port",
                      "rule_ifname",
                      "rule_number",
                      "rule_proto"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: правило межсетевого экрана сохранено.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -18091,
                        -18053,
                        -18050,
                        -18037,
                        -18032,
                        -18019,
                        -18018,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Add Own Edge Firewall Rule",
          "Add Firewall Rule"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-18091": "Ошибка базы данных при добавлении FW-правила.",
          "-18053": "Параметр rule_log имеет значение, отличное от 0 и 1.",
          "-18050": "Edge с указанным edge_id не существует.",
          "-18037": "Значение rule_dst_host не разбирается как корректный CIDR.",
          "-18032": "Значение rule_from_host не разбирается как корректный CIDR.",
          "-18019": "Значение rule_number больше максимально допустимого (32767).",
          "-18018": "Значение rule_number меньше минимально допустимого (100).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-add-nat-rule": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Add Own Edge NAT Rule, Add NAT Rule\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-17091` | *динамическое сообщение* | Ошибка базы данных при добавлении NAT-правила. |\n| `-17050` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует. |\n| `-17037` | Invalid CIDR value at rule_dst_host param | Значение rule_dst_host не разбирается как корректный CIDR. |\n| `-17032` | Invalid CIDR value at rule_from_host param | Значение rule_from_host не разбирается как корректный CIDR. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-add-nat-rule",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-add-nat-rule",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "rule_action": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_dst_host": {
                        "type": "string"
                      },
                      "rule_dst_port": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_from_host": {
                        "type": "string"
                      },
                      "rule_ifname": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_nat_host": {
                        "type": "string"
                      },
                      "rule_nat_port": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_number": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "rule_proto": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "edge_id",
                      "rule_action",
                      "rule_dst_host",
                      "rule_dst_port",
                      "rule_from_host",
                      "rule_ifname",
                      "rule_nat_host",
                      "rule_nat_port",
                      "rule_number",
                      "rule_proto"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: правило NAT сохранено.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -17091,
                        -17050,
                        -17037,
                        -17032,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Add Own Edge NAT Rule",
          "Add NAT Rule"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-17091": "Ошибка базы данных при добавлении NAT-правила.",
          "-17050": "Edge с указанным edge_id не существует.",
          "-17037": "Значение rule_dst_host не разбирается как корректный CIDR.",
          "-17032": "Значение rule_from_host не разбирается как корректный CIDR.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-add-nic": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Add Edge NIC, Add Own Edge NIC\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-17535` | Slot {0} is occupied or out of range | Слот сетевого интерфейса edge занят либо вне допустимого диапазона. |\n| `-17533` | Edge ID=={0} must be stopped in order to add a NIC | VM edge не остановлена — добавлять NIC можно только на остановленном edge. |\n| `-17506` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует, либо не найдена его VM. |\n| `-17500` | *динамическое сообщение* | Ошибка базы данных при добавлении NIC. |\n| `-3752` | DB error while removing a NIC | Ошибка БД при снятии блокировки адресов (ippool_blockaddr) при удалении NIC. |\n| `-3729` | DB error while removing a NIC: {0} | Ошибка БД при удалении записи NIC. |\n| `-3727` | DB error while setting the hold: {0} | Ошибка БД при установке hold на порт перед удалением. |\n| `-3577` | Network port address conflicts with skip or network IP family: {0} | Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети. |\n| `-3550` | *динамическое сообщение* | Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя. |\n| `-3549` | Failed to add nic: {0} | Ошибка БД при создании записи NIC. |\n| `-3545` | Slot {0} occupied already | Указанный slot уже занят другим сетевым портом. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при добавлении NIC. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-add-nic",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-add-nic",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "address": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "address_v6": {
                        "default": null,
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "ip_guard": {
                        "default": null,
                        "format": "int32",
                        "maximum": 1,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "mac": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "network_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "ratelimit_mbits": {
                        "default": null,
                        "format": "int32",
                        "maximum": 99999,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "skip_v4": {
                        "default": false,
                        "type": "boolean"
                      },
                      "skip_v6": {
                        "default": false,
                        "type": "boolean"
                      },
                      "slot": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "edge_id",
                      "network_id",
                      "slot"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -17535,
                        -17533,
                        -17506,
                        -17500,
                        -3752,
                        -3729,
                        -3727,
                        -3577,
                        -3550,
                        -3549,
                        -3545,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Add Edge NIC",
          "Add Own Edge NIC"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-17535": "Слот сетевого интерфейса edge занят либо вне допустимого диапазона.",
          "-17533": "VM edge не остановлена — добавлять NIC можно только на остановленном edge.",
          "-17506": "Edge с указанным edge_id не существует, либо не найдена его VM.",
          "-17500": "Ошибка базы данных при добавлении NIC.",
          "-3752": "Ошибка БД при снятии блокировки адресов (ippool_blockaddr) при удалении NIC.",
          "-3729": "Ошибка БД при удалении записи NIC.",
          "-3727": "Ошибка БД при установке hold на порт перед удалением.",
          "-3577": "Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети.",
          "-3550": "Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя.",
          "-3549": "Ошибка БД при создании записи NIC.",
          "-3545": "Указанный slot уже занят другим сетевым портом.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при добавлении NIC."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create Edge\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-15011` | *динамическое сообщение* | Не удалось отправить запрос vms-create на создание VM edge. |\n| `-15010` | *динамическое сообщение* | Ошибка базы данных при создании edge. |\n| `-15009` | You need vDC admin privilege at vDC id=={0} to create shared edges there | Нет привилегии vDC-администратора в vDC, указанном в vdc_id. |\n| `-15007` | A slot without network_id | В network_ports передан слот без network_id. |\n| `-15006` | You've got no vDC admin privilege at a vDC with network_id=={0} assigned | Указанная сеть не входит ни в один vDC, где у пользователя есть привилегия администратора. |\n| `-15005` | You need vDC admin privilege in order to create edges | У пользователя нет привилегии vDC-администратора ни в одном vDC. |\n| `-15004` | Slot number {0} can't be used within an edge | Номер слота в network_ports больше четырёх. |\n| `-15003` | Network ports amount exceeds 4: {0} | В network_ports передано больше четырёх портов. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "network_ports": {
                        "items": {
                          "properties": {
                            "address": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "address_v6": {
                              "default": null,
                              "items": {
                                "type": "string"
                              },
                              "type": [
                                "array",
                                "null"
                              ]
                            },
                            "ip_guard": {
                              "default": null,
                              "format": "int32",
                              "type": [
                                "integer",
                                "null"
                              ]
                            },
                            "mac": {
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "network_id": {
                              "default": null,
                              "format": "int32",
                              "type": [
                                "integer",
                                "null"
                              ]
                            },
                            "ratelimit_mbits": {
                              "format": "int32",
                              "type": [
                                "integer",
                                "null"
                              ]
                            },
                            "skip_v4": {
                              "default": false,
                              "type": "boolean"
                            },
                            "skip_v6": {
                              "default": false,
                              "type": "boolean"
                            },
                            "slot": {
                              "format": "int32",
                              "type": [
                                "integer",
                                "null"
                              ]
                            }
                          },
                          "type": "object"
                        },
                        "type": "array"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "network_ports"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "edge_id": {
                                  "description": "Идентификатор созданного edge.",
                                  "type": "string"
                                },
                                "vm_id": {
                                  "description": "Идентификатор служебной ВМ edge, строкой. Ключ есть только у вызывающего с глобальной\nролью.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "edge_id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -15011,
                        -15010,
                        -15009,
                        -15007,
                        -15006,
                        -15005,
                        -15004,
                        -15003,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Create Edge"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-15011": "Не удалось отправить запрос vms-create на создание VM edge.",
          "-15010": "Ошибка базы данных при создании edge.",
          "-15009": "Нет привилегии vDC-администратора в vDC, указанном в vdc_id.",
          "-15007": "В network_ports передан слот без network_id.",
          "-15006": "Указанная сеть не входит ни в один vDC, где у пользователя есть привилегия администратора.",
          "-15005": "У пользователя нет привилегии vDC-администратора ни в одном vDC.",
          "-15004": "Номер слота в network_ports больше четырёх.",
          "-15003": "В network_ports передано больше четырёх портов.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-deploy-rules": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Deploy Own Edge Rules, Deploy Edge Rules\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-14040` | Edge ID {0} has not found | В базе нет данных правил для деплоя по указанному edge. |\n| `-14010` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует. |\n| `-14007` | The edge bootstrap has not been completed yet | Bootstrap edge ещё не завершён после последней операции. |\n| `-14006` | The edge start in progress | Запуск edge ещё выполняется — операция не завершена на 100%. |\n| `-14005` | The edge isn't running | Edge не запущен — деплой правил возможен только на работающем edge. |\n| `-14004` | *динамическое сообщение* | Ошибка базы данных при деплое правил. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-deploy-rules",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-deploy-rules",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "edge_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -14040,
                        -14010,
                        -14007,
                        -14006,
                        -14005,
                        -14004,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Deploy Own Edge Rules",
          "Deploy Edge Rules"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-14040": "В базе нет данных правил для деплоя по указанному edge.",
          "-14010": "Edge с указанным edge_id не существует.",
          "-14007": "Bootstrap edge ещё не завершён после последней операции.",
          "-14006": "Запуск edge ещё выполняется — операция не завершена на 100%.",
          "-14005": "Edge не запущен — деплой правил возможен только на работающем edge.",
          "-14004": "Ошибка базы данных при деплое правил.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Edge Details, View Own Edge Details\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "port_based": {
                        "default": null
                      }
                    },
                    "required": [
                      "edge_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Edge с его портами.",
                                  "properties": {
                                    "GI_object": {
                                      "description": "Признак объекта федерации: `1` — да, `0` — нет, `null` — не задан.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "base_version": {
                                      "description": "Версия базового образа edge.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "ctrl_version": {
                                      "description": "Версия управляющего компонента edge.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "deploy_ts": {
                                      "description": "Время последнего применения правил на edge, Unix-время в секундах;\n`null`, если правила не применялись.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "edge_id": {
                                      "description": "Идентификатор edge.",
                                      "format": "uuid",
                                      "type": "string"
                                    },
                                    "modified": {
                                      "description": "Время последнего изменения edge, Unix-время в секундах.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "oper_progress": {
                                      "description": "Прогресс текущей операции над ВМ edge, 0–100; `null`, если данных нет.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "oper_status": {
                                      "description": "Код рабочего состояния ВМ edge.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "oper_ts": {
                                      "description": "Время последней смены состояния ВМ edge, Unix-время в секундах.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "owner": {
                                      "description": "Идентификатор пользователя-владельца edge.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "ports": {
                                      "additionalProperties": {
                                        "description": "Порт edge в сети.",
                                        "properties": {
                                          "address": {
                                            "description": "IPv4-адрес порта; `null`, если адрес не выделен.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "address_v6": {
                                            "description": "IPv6-адреса порта; пустой массив, если их нет.",
                                            "items": {
                                              "type": "string"
                                            },
                                            "type": "array"
                                          },
                                          "ifname": {
                                            "description": "Имя интерфейса; совпадает с `port_id`.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "ip_guard": {
                                            "description": "Защита от подмены IP на порту: `1` — включена, `0` — выключена,\n`null` — не задана.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "mac": {
                                            "description": "MAC-адрес порта.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "network_id": {
                                            "description": "Идентификатор сети.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "port_id": {
                                            "description": "Идентификатор порта.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "ratelimit_mbits": {
                                            "description": "Ограничение полосы порта, Мбит/с; `null`, если не задано.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "slot": {
                                            "description": "Номер слота интерфейса edge.",
                                            "format": "int32",
                                            "type": "integer"
                                          }
                                        },
                                        "required": [
                                          "ifname",
                                          "network_id",
                                          "port_id",
                                          "slot",
                                          "address_v6"
                                        ],
                                        "type": "object"
                                      },
                                      "description": "Порты edge: ключ — `network_id` строкой, а с параметром `port_based` —\n`port_id` строкой.",
                                      "type": "object"
                                    },
                                    "vdc_id": {
                                      "description": "ДЦ, которому принадлежит edge; `null`, если edge не привязан к ДЦ.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "vm_id": {
                                      "description": "Идентификатор ВМ edge.",
                                      "format": "int32",
                                      "type": "integer"
                                    }
                                  },
                                  "required": [
                                    "edge_id",
                                    "vm_id",
                                    "oper_status",
                                    "owner",
                                    "base_version",
                                    "ctrl_version",
                                    "ports"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "additionalProperties": false,
                                  "description": "Edge с указанным `edge_id` не найден: пустой объект.",
                                  "type": "object"
                                }
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "View Edge Details",
          "View Own Edge Details"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-get-pfloggs": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Edge Logs, View Own Edge Logs\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-25025` | The edge_log_pcap feature has not been enabled | Вызов edge-get-pfloggs при выключенной опции edge_log_pcap. |\n| `-25024` | ts_finish param value is less then ts_start | Значение ts_finish меньше ts_start. |\n| `-25023` | ts_start param value is too low | Значение ts_start раньше минимально допустимой отметки времени (2023-01-01 UTC). |\n| `-25010` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует. |\n| `-25007` | The edge bootstrap has not been completed yet | Bootstrap edge ещё не завершён после последней операции. |\n| `-25006` | The edge start in progress | Запуск edge ещё выполняется — операция не завершена на 100%. |\n| `-25005` | The edge isn't running | Edge не запущен — логи PF доступны только на работающем edge. |\n| `-25004` | *динамическое сообщение* | Ошибка базы данных при запросе PF-логов. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-get-pfloggs",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-get-pfloggs",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "limit": {
                        "default": null,
                        "format": "int64",
                        "maximum": 9999,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "ts_finish": {
                        "default": null,
                        "format": "int64",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "ts_start": {
                        "default": null,
                        "format": "int64",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "edge_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -25025,
                        -25024,
                        -25023,
                        -25010,
                        -25007,
                        -25006,
                        -25005,
                        -25004,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "View Edge Logs",
          "View Own Edge Logs"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-25025": "Вызов edge-get-pfloggs при выключенной опции edge_log_pcap.",
          "-25024": "Значение ts_finish меньше ts_start.",
          "-25023": "Значение ts_start раньше минимально допустимой отметки времени (2023-01-01 UTC).",
          "-25010": "Edge с указанным edge_id не существует.",
          "-25007": "Bootstrap edge ещё не завершён после последней операции.",
          "-25006": "Запуск edge ещё выполняется — операция не завершена на 100%.",
          "-25005": "Edge не запущен — логи PF доступны только на работающем edge.",
          "-25004": "Ошибка базы данных при запросе PF-логов.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Edge List, View Edge Admin Details, View Own Edge List\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "port_based": {
                        "default": null
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Edge, доступный вызывающему.",
                                "properties": {
                                  "GI_object": {
                                    "description": "Признак объекта федерации: `1` — да, `0` — нет, `null` — не задан.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "base_version": {
                                    "description": "Версия базового образа edge.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "ctrl_version": {
                                    "description": "Версия управляющего компонента edge.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "deploy_ts": {
                                    "description": "Время последнего применения правил на edge, Unix-время в секундах;\n`null`, если правила не применялись.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "modified": {
                                    "description": "Время последнего изменения edge, Unix-время в секундах.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "oper_progress": {
                                    "description": "Прогресс текущей операции над ВМ edge, 0–100; `null`, если данных нет.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "oper_status": {
                                    "description": "Код рабочего состояния ВМ edge.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "oper_ts": {
                                    "description": "Время последней смены состояния ВМ edge, Unix-время в секундах.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "owner": {
                                    "description": "Идентификатор пользователя-владельца edge.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "ports": {
                                    "additionalProperties": {
                                      "description": "Порт edge в сети.",
                                      "properties": {
                                        "address": {
                                          "description": "IP-адрес порта; `null`, если адрес не выделен.",
                                          "type": [
                                            "string",
                                            "null"
                                          ]
                                        },
                                        "ifname": {
                                          "description": "Имя интерфейса; совпадает с `port_id`.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "network_id": {
                                          "description": "Идентификатор сети.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "port_id": {
                                          "description": "Идентификатор порта.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "ratelimit_mbits": {
                                          "description": "Ограничение полосы порта, Мбит/с; `null`, если не задано.",
                                          "format": "int32",
                                          "type": [
                                            "integer",
                                            "null"
                                          ]
                                        },
                                        "slot": {
                                          "description": "Номер слота интерфейса edge.",
                                          "format": "int32",
                                          "type": [
                                            "integer",
                                            "null"
                                          ]
                                        }
                                      },
                                      "required": [
                                        "ifname",
                                        "port_id",
                                        "network_id"
                                      ],
                                      "type": "object"
                                    },
                                    "description": "Порты edge: ключ — `network_id` строкой, а с параметром `port_based` —\n`port_id` строкой. Ключа нет, если у edge нет портов.",
                                    "type": [
                                      "object",
                                      "null"
                                    ]
                                  },
                                  "vdc_id": {
                                    "description": "ДЦ, которому принадлежит edge; `null`, если edge не привязан к ДЦ.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "vm_id": {
                                    "description": "Идентификатор ВМ edge; ключ есть только у вызывающего с доступом ко всему кластеру.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  }
                                },
                                "required": [
                                  "oper_status",
                                  "base_version",
                                  "ctrl_version"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "View Edge List",
          "View Edge Admin Details",
          "View Own Edge List"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-list-rules": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Own Edge Rules, View Edge Rules\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-18510` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует. |\n| `-14040` | Edge ID {0} has not found | В базе нет записи набора правил (инкарнации) для указанного edge. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-list-rules",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-list-rules",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "edge_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "fw": {
                                  "additionalProperties": {
                                    "description": "Правило межсетевого экрана.",
                                    "properties": {
                                      "rule_action": {
                                        "description": "Код действия — значение `rule_action` из `edge-add-fw-rule`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_direction": {
                                        "description": "Код направления трафика — значение `rule_direction` из `edge-add-fw-rule`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_dst_host": {
                                        "description": "Адрес или подсеть назначения в нотации CIDR.",
                                        "type": "string"
                                      },
                                      "rule_dst_port": {
                                        "description": "Порт назначения.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_from_host": {
                                        "description": "Адрес или подсеть источника в нотации CIDR.",
                                        "type": "string"
                                      },
                                      "rule_from_port": {
                                        "description": "Порт источника.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_ifname": {
                                        "description": "Идентификатор порта edge, к которому применяется правило.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_log": {
                                        "description": "Журналирование срабатываний: `1` — включено, `0` — выключено,\n`null` — не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "rule_network_id": {
                                        "description": "Идентификатор сети порта `rule_ifname`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_network_name": {
                                        "description": "Название сети порта `rule_ifname`.",
                                        "type": "string"
                                      },
                                      "rule_proto": {
                                        "description": "Код протокола — значение `rule_proto` из `edge-add-fw-rule`.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "rule_action",
                                      "rule_direction",
                                      "rule_ifname",
                                      "rule_proto",
                                      "rule_from_host",
                                      "rule_from_port",
                                      "rule_dst_host",
                                      "rule_dst_port",
                                      "rule_network_id",
                                      "rule_network_name"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "Правила межсетевого экрана: ключ — `rule_number` строкой.",
                                  "type": "object"
                                },
                                "incarnation": {
                                  "description": "Метка версии набора правил: время последнего изменения edge в десятых\nдолях секунды Unix-времени.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "nat": {
                                  "additionalProperties": {
                                    "description": "Правило NAT.",
                                    "properties": {
                                      "rule_action": {
                                        "description": "Код действия — значение `rule_action` из `edge-add-nat-rule`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_dst_host": {
                                        "description": "Адрес или подсеть назначения в нотации CIDR.",
                                        "type": "string"
                                      },
                                      "rule_dst_port": {
                                        "description": "Порт назначения.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_from_host": {
                                        "description": "Адрес или подсеть источника в нотации CIDR.",
                                        "type": "string"
                                      },
                                      "rule_ifname": {
                                        "description": "Идентификатор порта edge, к которому применяется правило.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_nat_host": {
                                        "description": "Адрес трансляции.",
                                        "type": "string"
                                      },
                                      "rule_nat_port": {
                                        "description": "Порт трансляции.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_network_id": {
                                        "description": "Идентификатор сети порта `rule_ifname`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "rule_network_name": {
                                        "description": "Название сети порта `rule_ifname`.",
                                        "type": "string"
                                      },
                                      "rule_proto": {
                                        "description": "Код протокола — значение `rule_proto` из `edge-add-nat-rule`.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "rule_action",
                                      "rule_ifname",
                                      "rule_proto",
                                      "rule_from_host",
                                      "rule_dst_host",
                                      "rule_dst_port",
                                      "rule_nat_host",
                                      "rule_nat_port",
                                      "rule_network_id",
                                      "rule_network_name"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "Правила NAT: ключ — `rule_number` строкой.",
                                  "type": "object"
                                }
                              },
                              "required": [
                                "incarnation",
                                "nat",
                                "fw"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -18510,
                        -14040,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "View Own Edge Rules",
          "View Edge Rules"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-18510": "Edge с указанным edge_id не существует.",
          "-14040": "В базе нет записи набора правил (инкарнации) для указанного edge.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-ratelimit": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Rate Limit Edge, Rate Limit Own Edge\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-16606` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует, либо не найдены его порт или VM. |\n| `-16600` | *динамическое сообщение* | Ошибка базы данных при установке ratelimit. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-ratelimit",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-ratelimit",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "port_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "ratelimit_mbits": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "edge_id",
                      "port_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Пустой объект, если узел применил лимит; объект с сообщением (код ответа `10`), если нет — тогда\nв учёте восстановлен прежний лимит.",
                              "properties": {
                                "message": {
                                  "description": "Только при отказе узла: `Rate limit has not been applied; the previous value was restored.`",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -16606,
                        -16600,
                        -403,
                        -219
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Rate Limit Edge",
          "Rate Limit Own Edge"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-16606": "Edge с указанным edge_id не существует, либо не найдены его порт или VM.",
          "-16600": "Ошибка базы данных при установке ratelimit.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-remove": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove Edge, Remove Own Edge\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-16009` | *динамическое сообщение* | Не удалось отправить команду удаления на узел. |\n| `-16008` | *динамическое сообщение* | Ошибка базы данных при удалении edge. |\n| `-16006` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-remove",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-remove",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "edge_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Всегда `null`: удаление подтверждено, данных в ответе нет.",
                              "type": "null"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -16009,
                        -16008,
                        -16006,
                        -9707,
                        -9706,
                        -403,
                        -219
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Remove Edge",
          "Remove Own Edge"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-16009": "Не удалось отправить команду удаления на узел.",
          "-16008": "Ошибка базы данных при удалении edge.",
          "-16006": "Edge с указанным edge_id не существует.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-remove-fw-rule": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove Own Edge Firewall Rule, Remove Firewall Rule\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-18350` | FW rule {rule_number} not found for edge {edge_id} | У указанного edge нет FW-правила с таким rule_number — удаление не затронуло ни одной записи. |\n| `-18340` | *динамическое сообщение* | Ошибка базы данных при удалении FW-правила. |\n| `-18320` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует. |\n| `-18319` | Rule number above 32767 | Значение rule_number больше максимально допустимого (32767). |\n| `-18318` | Rule number below 100 | Значение rule_number меньше минимально допустимого (100). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-remove-fw-rule",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-remove-fw-rule",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "rule_number": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "edge_id",
                      "rule_number"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: правило межсетевого экрана удалено.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -18350,
                        -18340,
                        -18320,
                        -18319,
                        -18318,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Remove Own Edge Firewall Rule",
          "Remove Firewall Rule"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-18350": "У указанного edge нет FW-правила с таким rule_number — удаление не затронуло ни одной записи.",
          "-18340": "Ошибка базы данных при удалении FW-правила.",
          "-18320": "Edge с указанным edge_id не существует.",
          "-18319": "Значение rule_number больше максимально допустимого (32767).",
          "-18318": "Значение rule_number меньше минимально допустимого (100).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-remove-nat-rule": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove Own Edge NAT Rule, Remove NAT Rule\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-18250` | NAT rule {rule_number} not found for edge {edge_id} | У указанного edge нет NAT-правила с таким rule_number — удаление не затронуло ни одной записи. |\n| `-18240` | *динамическое сообщение* | Ошибка базы данных при удалении NAT-правила. |\n| `-18220` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-remove-nat-rule",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-remove-nat-rule",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "rule_number": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "edge_id",
                      "rule_number"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: правило NAT удалено.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -18250,
                        -18240,
                        -18220,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Remove Own Edge NAT Rule",
          "Remove NAT Rule"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-18250": "У указанного edge нет NAT-правила с таким rule_number — удаление не затронуло ни одной записи.",
          "-18240": "Ошибка базы данных при удалении NAT-правила.",
          "-18220": "Edge с указанным edge_id не существует.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-remove-nic": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove Edge NIC, Remove Own Edge NIC\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-17606` | Edge id {0} doesn't exist or has no port_id {1} assigned | Edge с указанным edge_id не существует, либо порт port_id ему не принадлежит. |\n| `-17600` | *динамическое сообщение* | Ошибка базы данных при удалении NIC. |\n| `-3752` | DB error while removing a NIC | Ошибка БД при снятии блокировки адресов (ippool_blockaddr) при удалении NIC. |\n| `-3729` | DB error while removing a NIC: {0} | Ошибка БД при удалении записи NIC. |\n| `-3727` | DB error while setting the hold: {0} | Ошибка БД при установке hold на порт перед удалением. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-remove-nic",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-remove-nic",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      },
                      "port_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "edge_id",
                      "port_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Всегда `null`: интерфейс снят.",
                              "type": "null"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -17606,
                        -17600,
                        -3752,
                        -3729,
                        -3727,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Remove Edge NIC",
          "Remove Own Edge NIC"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-17606": "Edge с указанным edge_id не существует, либо порт port_id ему не принадлежит.",
          "-17600": "Ошибка базы данных при удалении NIC.",
          "-3752": "Ошибка БД при снятии блокировки адресов (ippool_blockaddr) при удалении NIC.",
          "-3729": "Ошибка БД при удалении записи NIC.",
          "-3727": "Ошибка БД при установке hold на порт перед удалением.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-restart": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Restart Edge, Restart Own Edge\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-16706` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует, либо не найдена его VM. |\n| `-16700` | *динамическое сообщение* | Ошибка базы данных при выполнении start/stop/restart edge. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-restart",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-restart",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "edge_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Пустой объект, если узел выполнил команду; объект с сообщением (код ответа `10`), если нет.",
                              "properties": {
                                "message": {
                                  "description": "Только при отказе узла: `restart failed`.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -16706,
                        -16700,
                        -403,
                        -219
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Restart Edge",
          "Restart Own Edge"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-16706": "Edge с указанным edge_id не существует, либо не найдена его VM.",
          "-16700": "Ошибка базы данных при выполнении start/stop/restart edge.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-start": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Start Edge, Start Own Edge\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-16706` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует, либо не найдена его VM. |\n| `-16700` | *динамическое сообщение* | Ошибка базы данных при выполнении start/stop/restart edge. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-start",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-start",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "edge_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Пустой объект, если узел выполнил команду; объект с сообщением (код ответа `10`), если нет.",
                              "properties": {
                                "message": {
                                  "description": "Только при отказе узла: `start failed`.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -16706,
                        -16700,
                        -403,
                        -219
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Start Edge",
          "Start Own Edge"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-16706": "Edge с указанным edge_id не существует, либо не найдена его VM.",
          "-16700": "Ошибка базы данных при выполнении start/stop/restart edge.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#edge-stop": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Stop Edge, Stop Own Edge\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-16706` | Edge id {0} doesn't exist | Edge с указанным edge_id не существует, либо не найдена его VM. |\n| `-16700` | *динамическое сообщение* | Ошибка базы данных при выполнении start/stop/restart edge. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "edge-stop",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "edge-stop",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "edge_id": {
                        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
                        "type": "string"
                      }
                    },
                    "required": [
                      "edge_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Пустой объект, если узел выполнил команду; объект с сообщением (код ответа `10`), если нет.",
                              "properties": {
                                "message": {
                                  "description": "Только при отказе узла: `stop failed`.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -16706,
                        -16700,
                        -403,
                        -219
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "edge"
        ],
        "x-access": [
          "Stop Edge",
          "Stop Own Edge"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-16706": "Edge с указанным edge_id не существует, либо не найдена его VM.",
          "-16700": "Ошибка базы данных при выполнении start/stop/restart edge.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#filesystems-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Filesystem\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-58` | Dataset does not exist at users scope | filesystems-get: датасет существует, но вне зоны видимости пользователя. |\n| `-57` | param guid has bad value | filesystems-get: параметр guid не приводится к числовому идентификатору. |\n| `-54` | Unable to locate the pool of the dataset | filesystems-get: не удалось определить пул (текущую ноду) датасета. |\n| `-53` | Unable to locate the dataset | filesystems-get: датасет с указанным guid не найден в БД. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "filesystems-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "filesystems-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "guid": {
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "guid"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": true,
                              "description": "Датасет в том виде, в каком его вернул агент хранилища узла: поля агента передаются без\nизменений, кроме набора свойств ZFS.",
                              "properties": {
                                "properties": {
                                  "additionalProperties": true,
                                  "description": "Свойства ZFS датасета: ключ — имя свойства, значение — как его вернул агент. Остаются\nтолько свойства из фиксированного перечня (`available`, `compression`, `guid`, `used`,\n`volsize` и другие); прочие отбрасываются.",
                                  "type": "object"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -58,
                        -57,
                        -54,
                        -53
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "filesystems"
        ],
        "x-access": [
          "View Filesystem"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-58": "filesystems-get: датасет существует, но вне зоны видимости пользователя.",
          "-57": "filesystems-get: параметр guid не приводится к числовому идентификатору.",
          "-54": "filesystems-get: не удалось определить пул (текущую ноду) датасета.",
          "-53": "filesystems-get: датасет с указанным guid не найден в БД."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#filesystems-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Edit Filesystem\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-88` | Dataset does not exist at users scope | filesystems-set: датасет существует, но вне зоны видимости пользователя. |\n| `-87` | Filesystems methods has not been enabled | Вызов filesystems-методов при выключенной функции filesystems в конфигурации. |\n| `-86` | param guid has bad value | filesystems-set: параметр guid не приводится к числовому идентификатору. |\n| `-84` | Unable to locate the pool of the dataset | filesystems-set: не удалось определить пул (текущую ноду) датасета. |\n| `-83` | Unable to locate the dataset | filesystems-set: датасет с указанным guid не найден в БД. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "filesystems-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "filesystems-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "guid": {
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "guid"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -88,
                        -87,
                        -86,
                        -84,
                        -83
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "filesystems"
        ],
        "x-access": [
          "Edit Filesystem"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-88": "filesystems-set: датасет существует, но вне зоны видимости пользователя.",
          "-87": "Вызов filesystems-методов при выключенной функции filesystems в конфигурации.",
          "-86": "filesystems-set: параметр guid не приводится к числовому идентификатору.",
          "-84": "filesystems-set: не удалось определить пул (текущую ноду) датасета.",
          "-83": "filesystems-set: датасет с указанным guid не найден в БД."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#get-statusmap": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Cluster Status Map, View Cluster Status Map (full), View Cluster Status Map (dashboard), Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-11000` | Invalid auth token | Сессия по переданному токену не найдена — токен недействителен или устарел. |\n| `-9494` | No session token | Запрос пришёл без session token (cookie с токеном отсутствует). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-11` | *динамическое сообщение* | get-statusmap: не удалось получить статусы сервисов от сервиса кластера по ZMQ. |\n| `-10` | *динамическое сообщение* | get-statusmap: не удалось получить статусы нод от сервиса кластера по ZMQ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "get-statusmap",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "get-statusmap",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -11000,
                        -9494,
                        -403,
                        -11,
                        -10
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "get"
        ],
        "x-access": [
          "View Cluster Status Map",
          "View Cluster Status Map (full)",
          "View Cluster Status Map (dashboard)",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-11000": "Сессия по переданному токену не найдена — токен недействителен или устарел.",
          "-9494": "Запрос пришёл без session token (cookie с токеном отсутствует).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-11": "get-statusmap: не удалось получить статусы сервисов от сервиса кластера по ZMQ.",
          "-10": "get-statusmap: не удалось получить статусы нод от сервиса кластера по ZMQ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#golden-image-clones": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Image Dependencies\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-48010` | *динамическое сообщение* | Не удалось опросить узлы о клонах образа. |\n| `-48009` | Golden image not found: {image_id} | Образа с указанным идентификатором нет в каталоге или он вне зоны видимости вызывающего. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "golden-image-clones",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "golden-image-clones",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "description": "Суррогатный `id` (UUID) строки каталога образа. Обязательный,\nтипизирован — `serde` отвергает отсутствие/невалидный UUID.",
                        "format": "uuid",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "dependencies": {
                                  "additionalProperties": {
                                    "additionalProperties": {
                                      "description": "Результат проверки одного пула узла.",
                                      "properties": {
                                        "clones": {
                                          "additionalProperties": true,
                                          "description": "Клоны образа на пуле: ключ — датасет клона, значение — снапшот, от которого\nон создан. Содержимое передаётся от узла как есть.",
                                          "type": "object"
                                        },
                                        "error": {
                                          "description": "Почему пул не проверен (например, образа на пуле нет); ключа нет, если\nпроверка прошла.",
                                          "type": [
                                            "string",
                                            "null"
                                          ]
                                        }
                                      },
                                      "required": [
                                        "clones"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "object"
                                  },
                                  "description": "ZFS-клоны образа по узлам и пулам. Ключ верхнего уровня — идентификатор\nузла строкой, ключ внутри — GUID пула (если GUID не найден — имя пула).\nУзлы, которые не ответили, сюда не попадают — они перечислены в\n`nodes_skipped`.",
                                  "type": "object"
                                },
                                "has_dependencies": {
                                  "description": "`true`, если есть хотя бы одна зависимая ВМ или непустой список клонов на\nлюбом пуле. Ошибка проверки пула зависимостью не считается.",
                                  "type": "boolean"
                                },
                                "id": {
                                  "description": "Идентификатор образа.",
                                  "format": "uuid",
                                  "type": "string"
                                },
                                "name": {
                                  "description": "Название образа.",
                                  "type": "string"
                                },
                                "nodes_skipped": {
                                  "description": "Узлы, которые не удалось проверить: не в сети или не ответили вовремя.\nНепустой список означает, что проверка неполная.",
                                  "items": {
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "type": "array"
                                },
                                "vm_dependencies": {
                                  "description": "ВМ, созданные из образа.",
                                  "items": {
                                    "description": "ВМ, созданная из образа.",
                                    "properties": {
                                      "name": {
                                        "description": "Имя ВМ.",
                                        "type": "string"
                                      },
                                      "vm_id": {
                                        "description": "Идентификатор ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "vm_id",
                                      "name"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "id",
                                "name",
                                "dependencies",
                                "vm_dependencies",
                                "has_dependencies",
                                "nodes_skipped"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -48010,
                        -48009,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "golden"
        ],
        "x-access": [
          "View Image Dependencies"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-48010": "Не удалось опросить узлы о клонах образа.",
          "-48009": "Образа с указанным идентификатором нет в каталоге или он вне зоны видимости вызывающего.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#golden-image-remove": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove OS Image\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-48012` | Golden image has dependencies and cannot be removed: {image_id} | У образа есть зависимые ВМ или клоны; удалить его нельзя. |\n| `-48011` | Irreversible removal must be confirmed (confirmation: true) | Необратимое удаление образа вызвано без `confirmation: true`. |\n| `-48010` | *динамическое сообщение* | Не удалось опросить узлы о клонах образа. |\n| `-48009` | Golden image not found: {image_id} | Образа с указанным идентификатором нет в каталоге или он вне зоны видимости вызывающего. |\n| `-48004` | Image is being deleted: os_profile {0} | Образ в процессе удаления. |\n| `-23000` | Security log DB error: {0} | Ошибка БД при записи или чтении журнала безопасности. |\n| `-503` | intent audit not recorded: {0} | Fail-closed intent-аудит: durable-запись намерения не удалась (writer недоступен / таймаут / ошибка записи) → изменяющая операция не начинается. Код `-503` — кросс-спецификационная константа (feature_spec §6, DEC `center-goldenimage-03`), осознанное исключение из диапазона `-23xxx`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "golden-image-remove",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "golden-image-remove",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "confirmation": {
                        "description": "Явное подтверждение необратимости; должно быть `true`.",
                        "type": "boolean"
                      },
                      "id": {
                        "description": "Суррогатный `id` (UUID) строки каталога образа. Обязательный.",
                        "format": "uuid",
                        "type": "string"
                      }
                    },
                    "required": [
                      "confirmation",
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "failed_on": {
                                  "description": "Узлы, на которых удалить образ не удалось, с причиной.",
                                  "items": {
                                    "description": "Узел, на котором удаление не удалось.",
                                    "properties": {
                                      "node_id": {
                                        "description": "Идентификатор узла.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "reason": {
                                        "description": "Причина: сообщение узла или `internal` при внутренней ошибке.",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "node_id",
                                      "reason"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "id": {
                                  "description": "Идентификатор образа.",
                                  "format": "uuid",
                                  "type": "string"
                                },
                                "nodes_skipped": {
                                  "description": "Узлы, которые не удалось опросить: не в сети или не ответили вовремя.",
                                  "items": {
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "type": "array"
                                },
                                "partial_reason": {
                                  "description": "Причина частичного удаления: `node_failure` — часть узлов не удалила образ\nили не ответила, либо образ удалён со всех узлов, но остался в каталоге\n(тогда `failed_on` и `nodes_skipped` пусты). Есть только при `state` =\n`partial_active`.",
                                  "enum": [
                                    "node_failure",
                                    null
                                  ],
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "removed_from": {
                                  "description": "Узлы, с которых образ удалён.",
                                  "items": {
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "type": "array"
                                },
                                "state": {
                                  "description": "Итог удаления: `removed` — образ удалён со всех узлов и из каталога;\n`partial_active` — образ остаётся в каталоге: либо часть копий на узлах\nосталась, либо копии удалены со всех узлов, но запись в каталоге удалить\nне удалось (например, образ снова начали использовать).",
                                  "enum": [
                                    "removed",
                                    "partial_active"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "id",
                                "state",
                                "removed_from",
                                "failed_on",
                                "nodes_skipped"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -48012,
                        -48011,
                        -48010,
                        -48009,
                        -48004,
                        -23000,
                        -503,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "golden"
        ],
        "x-access": [
          "Remove OS Image"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-48012": "У образа есть зависимые ВМ или клоны; удалить его нельзя.",
          "-48011": "Необратимое удаление образа вызвано без `confirmation: true`.",
          "-48010": "Не удалось опросить узлы о клонах образа.",
          "-48009": "Образа с указанным идентификатором нет в каталоге или он вне зоны видимости вызывающего.",
          "-48004": "Образ в процессе удаления.",
          "-23000": "Ошибка БД при записи или чтении журнала безопасности.",
          "-503": "Fail-closed intent-аудит: durable-запись намерения не удалась (writer недоступен / таймаут / ошибка записи) → изменяющая операция не начинается. Код `-503` — кросс-спецификационная константа (feature_spec §6, DEC `center-goldenimage-03`), осознанное исключение из диапазона `-23xxx`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#golden-images-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Image Catalog\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-2301` | Couldn't get golden images catalog: {0} | Ошибка обращения к БД при чтении каталога образов. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "golden-images-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "golden-images-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null,
                        "description": "Переключатель формата выдачи (общая конвенция list-методов): `Some` → карта\nобразов по строковому `id`, `None` → массив."
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "images": {
                                  "anyOf": [
                                    {
                                      "items": {
                                        "description": "Запись образа каталога.",
                                        "properties": {
                                          "download": {
                                            "description": "Ход скачивания; `null`, если данных нет.",
                                            "properties": {
                                              "bytes_done": {
                                                "description": "Скачано байт.",
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              "bytes_total": {
                                                "description": "Всего байт (`size` образа); `null`, если не известен.",
                                                "format": "int64",
                                                "type": [
                                                  "integer",
                                                  "null"
                                                ]
                                              }
                                            },
                                            "required": [
                                              "bytes_done"
                                            ],
                                            "type": [
                                              "object",
                                              "null"
                                            ]
                                          },
                                          "fail_error": {
                                            "description": "Текст ошибки сбоя; `null`, если сбоя нет.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "fail_reason": {
                                            "description": "Код причины сбоя; `null`, если сбоя нет.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "id": {
                                            "description": "Идентификатор образа; его передают в `os_profile` метода `vms-create`.",
                                            "format": "uuid",
                                            "type": "string"
                                          },
                                          "is_cluster_shared": {
                                            "description": "Образ общий для всего кластера.",
                                            "type": "boolean"
                                          },
                                          "library_id": {
                                            "description": "Источник библиотеки ОС, из которого образ импортирован; `null`, если не из библиотеки.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "name": {
                                            "description": "Название образа.",
                                            "type": "string"
                                          },
                                          "os_name": {
                                            "description": "Название ОС; у импортированных образов — `null`.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "owner_vdc": {
                                            "description": "ДЦ-владелец образа; `null` у общих образов.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "per_pool_status": {
                                            "additionalProperties": true,
                                            "description": "Состояние импорта по пулам: объект с ключом — именем пула. Значение\nотдаётся как хранится; обычно это `node_id`, `status`, а также\n`progress_pct`, `reason` или `error`, если они есть.",
                                            "type": "object"
                                          },
                                          "progress_pct": {
                                            "description": "Общий процент готовности импорта, 0–100.",
                                            "format": "int64",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "sha256": {
                                            "description": "Контрольная сумма SHA-256 образа; `null`, если не посчитана.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "size": {
                                            "description": "Размер артефакта образа в байтах; `null` до импорта.",
                                            "format": "int64",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "state": {
                                            "description": "Состояние образа.",
                                            "enum": [
                                              "importing",
                                              "active",
                                              "partial_active",
                                              "failed",
                                              "deleting"
                                            ],
                                            "type": "string"
                                          },
                                          "vdc_ids": {
                                            "description": "ДЦ, которым образ показан.",
                                            "items": {
                                              "format": "int32",
                                              "type": "integer"
                                            },
                                            "type": "array"
                                          },
                                          "version": {
                                            "description": "Версия образа.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "name",
                                          "state",
                                          "per_pool_status",
                                          "is_cluster_shared",
                                          "vdc_ids"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "array"
                                    },
                                    {
                                      "additionalProperties": {
                                        "description": "Запись образа каталога.",
                                        "properties": {
                                          "download": {
                                            "description": "Ход скачивания; `null`, если данных нет.",
                                            "properties": {
                                              "bytes_done": {
                                                "description": "Скачано байт.",
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              "bytes_total": {
                                                "description": "Всего байт (`size` образа); `null`, если не известен.",
                                                "format": "int64",
                                                "type": [
                                                  "integer",
                                                  "null"
                                                ]
                                              }
                                            },
                                            "required": [
                                              "bytes_done"
                                            ],
                                            "type": [
                                              "object",
                                              "null"
                                            ]
                                          },
                                          "fail_error": {
                                            "description": "Текст ошибки сбоя; `null`, если сбоя нет.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "fail_reason": {
                                            "description": "Код причины сбоя; `null`, если сбоя нет.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "id": {
                                            "description": "Идентификатор образа; его передают в `os_profile` метода `vms-create`.",
                                            "format": "uuid",
                                            "type": "string"
                                          },
                                          "is_cluster_shared": {
                                            "description": "Образ общий для всего кластера.",
                                            "type": "boolean"
                                          },
                                          "library_id": {
                                            "description": "Источник библиотеки ОС, из которого образ импортирован; `null`, если не из библиотеки.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "name": {
                                            "description": "Название образа.",
                                            "type": "string"
                                          },
                                          "os_name": {
                                            "description": "Название ОС; у импортированных образов — `null`.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "owner_vdc": {
                                            "description": "ДЦ-владелец образа; `null` у общих образов.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "per_pool_status": {
                                            "additionalProperties": true,
                                            "description": "Состояние импорта по пулам: объект с ключом — именем пула. Значение\nотдаётся как хранится; обычно это `node_id`, `status`, а также\n`progress_pct`, `reason` или `error`, если они есть.",
                                            "type": "object"
                                          },
                                          "progress_pct": {
                                            "description": "Общий процент готовности импорта, 0–100.",
                                            "format": "int64",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "sha256": {
                                            "description": "Контрольная сумма SHA-256 образа; `null`, если не посчитана.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "size": {
                                            "description": "Размер артефакта образа в байтах; `null` до импорта.",
                                            "format": "int64",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "state": {
                                            "description": "Состояние образа.",
                                            "enum": [
                                              "importing",
                                              "active",
                                              "partial_active",
                                              "failed",
                                              "deleting"
                                            ],
                                            "type": "string"
                                          },
                                          "vdc_ids": {
                                            "description": "ДЦ, которым образ показан.",
                                            "items": {
                                              "format": "int32",
                                              "type": "integer"
                                            },
                                            "type": "array"
                                          },
                                          "version": {
                                            "description": "Версия образа.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "name",
                                          "state",
                                          "per_pool_status",
                                          "is_cluster_shared",
                                          "vdc_ids"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "object"
                                    }
                                  ],
                                  "description": "Образы: массив, а с параметром `objective` — объект с ключом `id` образа."
                                },
                                "min_size_by_vdc": {
                                  "additionalProperties": {
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "description": "Сумма `min_size` владеемых образов по ДЦ-владельцу, в байтах. Ключ —\n`vdc_id` строкой; только ДЦ, доступные вызывающему.",
                                  "type": "object"
                                }
                              },
                              "required": [
                                "images",
                                "min_size_by_vdc"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -2301,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "golden"
        ],
        "x-access": [
          "View Image Catalog"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-2301": "Ошибка обращения к БД при чтении каталога образов.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#host-inventory": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Host Inventory\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-200` | Can't get 'node status' from cluster-management | cluster-management недоступен — статус нод для host-inventory не получен. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "host-inventory",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "host-inventory",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект — признак завершения инвентаризации.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -200
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "host"
        ],
        "x-access": [
          "View Host Inventory"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-200": "cluster-management недоступен — статус нод для host-inventory не получен."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-auth-group-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create vDC Auth Group\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45035` | Invalid auth group parameters: {0} | Параметры auth group не прошли валидацию (имя, CHAP-секреты). |\n| `-45034` | Auth group already exists: {0} | Auth group с таким именем уже существует. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-auth-group-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-auth-group-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "name": {
                        "description": "Имя группы (уникально в VDC); формат — как у имён датасета/тома/IG.",
                        "maxLength": 63,
                        "minLength": 1,
                        "pattern": "^[a-z0-9]([a-z0-9.-]{0,61}[a-z0-9])?$",
                        "type": "string"
                      },
                      "secrets": {
                        "description": "Набор CHAP-секретов группы — массив ровно с одной записью.",
                        "items": {
                          "description": "Входная запись CHAP метода create: `user`/`secret` обязательны, `muser`/`msecret`\n(mutual) — **оба обязательны** (SAN отвергает one-way на создании; schema-валидатор).",
                          "properties": {
                            "msecret": {
                              "default": null,
                              "maxLength": 255,
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "muser": {
                              "default": null,
                              "maxLength": 255,
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "secret": {
                              "maxLength": 255,
                              "minLength": 1,
                              "type": "string"
                            },
                            "user": {
                              "maxLength": 255,
                              "minLength": 1,
                              "type": "string"
                            }
                          },
                          "required": [
                            "user",
                            "secret"
                          ],
                          "type": "object"
                        },
                        "maxItems": 1,
                        "minItems": 1,
                        "type": "array"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "name",
                      "secrets",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор созданной группы аутентификации.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45035,
                        -45034,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "Create vDC Auth Group"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45035": "Параметры auth group не прошли валидацию (имя, CHAP-секреты).",
          "-45034": "Auth group с таким именем уже существует.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-auth-group-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete vDC Auth Group\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45036` | Auth group is in use by a target: {0} | Auth group используется таргетом — удалить нельзя. |\n| `-45033` | Unknown auth group: {0} | Auth group с указанным ID не существует. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-auth-group-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-auth-group-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "auth_group_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "auth_group_id",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Группа аутентификации удалена: пустой объект.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45036,
                        -45033,
                        -45013,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "Delete vDC Auth Group"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45036": "Auth group используется таргетом — удалить нельзя.",
          "-45033": "Auth group с указанным ID не существует.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-auth-group-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Auth Group\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45033` | Unknown auth group: {0} | Auth group с указанным ID не существует. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-auth-group-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-auth-group-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "auth_group_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "auth_group_id",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор группы.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "name": {
                                  "description": "Имя группы; `null`, если не задано.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "secrets": {
                                  "description": "CHAP-записи группы (обычно одна). Секреты не выдаются.",
                                  "items": {
                                    "properties": {
                                      "has_mutual": {
                                        "description": "Задан ли встречный логин (mutual CHAP).",
                                        "type": "boolean"
                                      },
                                      "user": {
                                        "description": "Логин CHAP.",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "user",
                                      "has_mutual"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "id",
                                "secrets"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45033,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "View vDC Auth Group"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45033": "Auth group с указанным ID не существует.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-auth-group-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Auth Group List\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-auth-group-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-auth-group-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null,
                        "description": "Switches response format (array vs object map), per `src/methods/CLAUDE.md`."
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Список групп (по умолчанию).",
                                  "items": {
                                    "description": "CHAP-группа в списке. Логины и секреты не выдаются.",
                                    "properties": {
                                      "id": {
                                        "description": "Идентификатор группы.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Имя группы; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "users_count": {
                                        "description": "Число CHAP-записей в группе.",
                                        "format": "int64",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "users_count"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "CHAP-группа в списке. Логины и секреты не выдаются.",
                                    "properties": {
                                      "id": {
                                        "description": "Идентификатор группы.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Имя группы; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "users_count": {
                                        "description": "Число CHAP-записей в группе.",
                                        "format": "int64",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "users_count"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "С параметром `objective` — объект: ключ — `id` группы строкой.",
                                  "type": "object"
                                }
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "View vDC Auth Group List"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-auth-group-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set vDC Auth Group\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45035` | Invalid auth group parameters: {0} | Параметры auth group не прошли валидацию (имя, CHAP-секреты). |\n| `-45034` | Auth group already exists: {0} | Auth group с таким именем уже существует. |\n| `-45033` | Unknown auth group: {0} | Auth group с указанным ID не существует. |\n| `-45021` | Storage teardown failed: {0} | Шаг демонтажа стораджа завершился ошибкой на контроллере. |\n| `-45020` | Storage teardown timed out: {0} | Шаг демонтажа стораджа не завершился за отведённое время. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-auth-group-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-auth-group-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "auth_group_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "name": {
                        "default": null,
                        "description": "Новое имя (опц.); формат — как при создании.",
                        "maxLength": 63,
                        "minLength": 1,
                        "pattern": "^[a-z0-9]([a-z0-9.-]{0,61}[a-z0-9])?$",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "secrets": {
                        "description": "Новый набор секретов группы — массив ровно с одной записью. `secret` опционален: если отсутствует — секрет по этому\n`user` не меняется (берётся сохранённый).",
                        "items": {
                          "description": "Входная запись CHAP метода set: `user` обязателен, `secret` опционален\n(отсутствие = «не менять секрет по этому user»); `muser`/`msecret` (mutual) —\nоба или ни одного (schema-валидатор).",
                          "properties": {
                            "msecret": {
                              "default": null,
                              "maxLength": 255,
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "muser": {
                              "default": null,
                              "maxLength": 255,
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "secret": {
                              "default": null,
                              "maxLength": 255,
                              "type": [
                                "string",
                                "null"
                              ]
                            },
                            "user": {
                              "maxLength": 255,
                              "minLength": 1,
                              "type": "string"
                            }
                          },
                          "required": [
                            "user"
                          ],
                          "type": "object"
                        },
                        "maxItems": 1,
                        "minItems": 1,
                        "type": "array"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "auth_group_id",
                      "secrets",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: набор секретов и имя группы приведены к переданным.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45035,
                        -45034,
                        -45033,
                        -45021,
                        -45020,
                        -45013,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "Set vDC Auth Group"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45035": "Параметры auth group не прошли валидацию (имя, CHAP-секреты).",
          "-45034": "Auth group с таким именем уже существует.",
          "-45033": "Auth group с указанным ID не существует.",
          "-45021": "Шаг демонтажа стораджа завершился ошибкой на контроллере.",
          "-45020": "Шаг демонтажа стораджа не завершился за отведённое время.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-initiator-group-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create vDC Initiator Group\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45025` | Invalid initiator group parameters: {0} | Параметры initiator group не прошли валидацию (имя, initiators, CIDR). |\n| `-45023` | Initiator group already exists: {0} | Initiator group с таким именем уже существует. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-initiator-group-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-initiator-group-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "initiators": {
                        "description": "Непустой список IQN инициаторов.",
                        "items": {
                          "type": "string"
                        },
                        "minItems": 1,
                        "type": "array"
                      },
                      "name": {
                        "maxLength": 63,
                        "minLength": 1,
                        "pattern": "^[a-z0-9]([a-z0-9.-]{0,61}[a-z0-9])?$",
                        "type": "string"
                      },
                      "networks": {
                        "description": "Непустой список сетей (CIDR): минимум один валидный CIDR.",
                        "items": {
                          "type": "string"
                        },
                        "minItems": 1,
                        "type": "array"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "initiators",
                      "name",
                      "networks",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор созданной группы инициаторов.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45025,
                        -45023,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "Create vDC Initiator Group"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45025": "Параметры initiator group не прошли валидацию (имя, initiators, CIDR).",
          "-45023": "Initiator group с таким именем уже существует.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-initiator-group-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete vDC Initiator Group\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45024` | Initiator group is in use by {count} target(s) | Initiator group используется таргетами — удалить нельзя. |\n| `-45022` | Unknown initiator group: {0} | Initiator group с указанным ID не существует. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-initiator-group-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-initiator-group-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Группа инициаторов удалена: пустой объект.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45024,
                        -45022,
                        -45013,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "Delete vDC Initiator Group"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45024": "Initiator group используется таргетами — удалить нельзя.",
          "-45022": "Initiator group с указанным ID не существует.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-initiator-group-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Initiator Group\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45022` | Unknown initiator group: {0} | Initiator group с указанным ID не существует. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-initiator-group-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-initiator-group-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор группы инициаторов.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "initiators": {
                                  "description": "Инициаторы группы.",
                                  "items": {
                                    "description": "Инициатор группы.",
                                    "properties": {
                                      "iqn": {
                                        "description": "IQN инициатора.",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "iqn"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "name": {
                                  "description": "Имя группы; `null`, если не задано.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "networks": {
                                  "description": "Сети группы в нотации CIDR, например `10.0.0.0/24`.",
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "id",
                                "initiators",
                                "networks"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45022,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "View vDC Initiator Group"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45022": "Initiator group с указанным ID не существует.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-initiator-group-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Initiator Group List\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-initiator-group-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-initiator-group-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null,
                        "description": "Switches response format (array vs object map), per `src/methods/CLAUDE.md`."
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Группы инициаторов ДЦ по возрастанию `id`.",
                                  "items": {
                                    "description": "Группа инициаторов в списке.",
                                    "properties": {
                                      "id": {
                                        "description": "Идентификатор группы инициаторов.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "initiators_count": {
                                        "description": "Число инициаторов (IQN) в группе.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Имя группы; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "networks_count": {
                                        "description": "Число сетей в группе.",
                                        "format": "int64",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "initiators_count",
                                      "networks_count"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "Группа инициаторов в списке.",
                                    "properties": {
                                      "id": {
                                        "description": "Идентификатор группы инициаторов.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "initiators_count": {
                                        "description": "Число инициаторов (IQN) в группе.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Имя группы; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "networks_count": {
                                        "description": "Число сетей в группе.",
                                        "format": "int64",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "initiators_count",
                                      "networks_count"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "С параметром `objective` — объект с ключом `id` группы строкой.",
                                  "type": "object"
                                }
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "View vDC Initiator Group List"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-initiator-group-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set vDC Initiator Group\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45025` | Invalid initiator group parameters: {0} | Параметры initiator group не прошли валидацию (имя, initiators, CIDR). |\n| `-45023` | Initiator group already exists: {0} | Initiator group с таким именем уже существует. |\n| `-45022` | Unknown initiator group: {0} | Initiator group с указанным ID не существует. |\n| `-45021` | Storage teardown failed: {0} | Шаг демонтажа стораджа завершился ошибкой на контроллере. |\n| `-45020` | Storage teardown timed out: {0} | Шаг демонтажа стораджа не завершился за отведённое время. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-initiator-group-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-initiator-group-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "initiators": {
                        "default": null,
                        "description": "Полный новый список IQN (опц.); если задан — непустой (проверяется в handler).",
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "name": {
                        "default": null,
                        "description": "Новое имя (опц.); формат — как при создании.",
                        "maxLength": 63,
                        "minLength": 1,
                        "pattern": "^[a-z0-9]([a-z0-9.-]{0,61}[a-z0-9])?$",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "networks": {
                        "default": null,
                        "description": "Полный новый список сетей (опц.); может быть пустым (очистка сетей).",
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: изменения группы применены.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45025,
                        -45023,
                        -45022,
                        -45021,
                        -45020,
                        -45013,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "Set vDC Initiator Group"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45025": "Параметры initiator group не прошли валидацию (имя, initiators, CIDR).",
          "-45023": "Initiator group с таким именем уже существует.",
          "-45022": "Initiator group с указанным ID не существует.",
          "-45021": "Шаг демонтажа стораджа завершился ошибкой на контроллере.",
          "-45020": "Шаг демонтажа стораджа не завершился за отведённое время.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-portal-group-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** iSCSI Create Portal Group\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-portal-group-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-portal-group-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "name": {
                        "description": "Legacy допускал пустое имя — не переносится (min = 1).",
                        "maxLength": 256,
                        "minLength": 1,
                        "type": "string"
                      },
                      "pool_guid": {
                        "description": "Legacy принимал `pool_name` — заменено на `pool_guid` строкой\n(единообразие с `vdc-storage-enable`, правило корневого `CLAUDE.md`).",
                        "minLength": 1,
                        "type": "string"
                      },
                      "portals": {
                        "description": "Legacy допускал отсутствие порталов, но vssand требует непустой\nмассив — поле обязательное и непустое.",
                        "items": {
                          "description": "Портал состава группы — пара (ip, port); НЕ самостоятельная сущность\n(у контроллера нет метода портала, identity и описания). Переиспользуется\nконтекстом callback'а (`PortalGroupCreateContext`).",
                          "properties": {
                            "ip": {
                              "type": "string"
                            },
                            "port": {
                              "format": "int32",
                              "maximum": 65535,
                              "minimum": 1000,
                              "type": "integer"
                            }
                          },
                          "required": [
                            "ip",
                            "port"
                          ],
                          "type": "object"
                        },
                        "minItems": 1,
                        "type": "array"
                      }
                    },
                    "required": [
                      "name",
                      "pool_guid",
                      "portals"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": true,
                              "description": "Итог создания: `id` группы и данные ответа контроллера хранилища как есть.\nСостав этих данных задаёт контроллер.",
                              "properties": {
                                "id": {
                                  "description": "Идентификатор созданной портал-группы.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "iSCSI Create Portal Group"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-portal-group-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** iSCSI Delete Portal Group\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45016` | Portal group is in use: {0} | Portal group используется таргетом — удалить нельзя. |\n| `-45010` | Unknown portal group: {0} | Portal group с указанным ID не существует. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-portal-group-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-portal-group-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "additionalProperties": true,
                                  "description": "Группа удалена на контроллере хранилища и в учёте: `id` группы и данные\nответа контроллера как есть; их состав задаёт контроллер.",
                                  "properties": {
                                    "id": {
                                      "description": "Идентификатор удалённой портал-группы.",
                                      "format": "int32",
                                      "type": "integer"
                                    }
                                  },
                                  "required": [
                                    "id"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "additionalProperties": false,
                                  "description": "У группы не задан пул: она удалена только из учёта, без обращения к\nконтроллеру, ответ — пустой объект.",
                                  "type": "object"
                                }
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45016,
                        -45010,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "iSCSI Delete Portal Group"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45016": "Portal group используется таргетом — удалить нельзя.",
          "-45010": "Portal group с указанным ID не существует.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-portal-group-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** iSCSI View Portal Group\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45010` | Unknown portal group: {0} | Portal group с указанным ID не существует. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-portal-group-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-portal-group-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Портал-группа.",
                              "properties": {
                                "id": {
                                  "description": "Идентификатор портал-группы.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "name": {
                                  "description": "Имя группы; `null`, если не задано.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "pool_guid": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "format": "int64",
                                          "type": "integer"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ],
                                      "description": "Guid пула: числом, если в нём не больше 15 цифр, иначе строкой."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Guid пула группы; `null`, если пул у группы не задан."
                                },
                                "pool_name": {
                                  "description": "Имя пула; `null`, если пула нет.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "portals": {
                                  "description": "Порталы группы; у группы без порталов — пустой массив.",
                                  "items": {
                                    "description": "Портал группы: адрес и порт.",
                                    "properties": {
                                      "ip": {
                                        "description": "IP-адрес портала.",
                                        "type": "string"
                                      },
                                      "port": {
                                        "description": "TCP-порт портала.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "ip",
                                      "port"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "target_iqn": {
                                  "description": "IQN таргета, который использует группу (из нескольких — первый по\nалфавиту); `null`, если группа свободна.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "vdc_id": {
                                  "description": "ДЦ, чьё хранилище размещено на пуле группы (из нескольких — с меньшим\n`id`); `null`, если такого нет.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "vdc_name": {
                                  "description": "Имя этого ДЦ; `null`, если ДЦ нет.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "portals"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45010,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "iSCSI View Portal Group"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45010": "Portal group с указанным ID не существует.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-portal-group-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** iSCSI List Portal Groups\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-portal-group-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-portal-group-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null,
                        "description": "Switches response format (array vs object map), per `src/methods/CLAUDE.md`."
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Группы по возрастанию `id`.",
                                  "items": {
                                    "description": "Портал-группа.",
                                    "properties": {
                                      "id": {
                                        "description": "Идентификатор портал-группы.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Имя группы; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "pool_guid": {
                                        "anyOf": [
                                          {
                                            "anyOf": [
                                              {
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              {
                                                "type": "string"
                                              }
                                            ],
                                            "description": "Guid пула: числом, если в нём не больше 15 цифр, иначе строкой."
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Guid пула группы; `null`, если пул у группы не задан."
                                      },
                                      "pool_name": {
                                        "description": "Имя пула; `null`, если пула нет.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "portals": {
                                        "description": "Порталы группы; у группы без порталов — пустой массив.",
                                        "items": {
                                          "description": "Портал группы: адрес и порт.",
                                          "properties": {
                                            "ip": {
                                              "description": "IP-адрес портала.",
                                              "type": "string"
                                            },
                                            "port": {
                                              "description": "TCP-порт портала.",
                                              "format": "int32",
                                              "type": "integer"
                                            }
                                          },
                                          "required": [
                                            "ip",
                                            "port"
                                          ],
                                          "type": "object"
                                        },
                                        "type": "array"
                                      },
                                      "vdc_id": {
                                        "description": "ДЦ, чьё хранилище размещено на пуле группы (из нескольких — с меньшим\n`id`); `null`, если такого нет.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "vdc_name": {
                                        "description": "Имя этого ДЦ; `null`, если ДЦ нет.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "portals"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "Портал-группа.",
                                    "properties": {
                                      "id": {
                                        "description": "Идентификатор портал-группы.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Имя группы; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "pool_guid": {
                                        "anyOf": [
                                          {
                                            "anyOf": [
                                              {
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              {
                                                "type": "string"
                                              }
                                            ],
                                            "description": "Guid пула: числом, если в нём не больше 15 цифр, иначе строкой."
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "Guid пула группы; `null`, если пул у группы не задан."
                                      },
                                      "pool_name": {
                                        "description": "Имя пула; `null`, если пула нет.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "portals": {
                                        "description": "Порталы группы; у группы без порталов — пустой массив.",
                                        "items": {
                                          "description": "Портал группы: адрес и порт.",
                                          "properties": {
                                            "ip": {
                                              "description": "IP-адрес портала.",
                                              "type": "string"
                                            },
                                            "port": {
                                              "description": "TCP-порт портала.",
                                              "format": "int32",
                                              "type": "integer"
                                            }
                                          },
                                          "required": [
                                            "ip",
                                            "port"
                                          ],
                                          "type": "object"
                                        },
                                        "type": "array"
                                      },
                                      "vdc_id": {
                                        "description": "ДЦ, чьё хранилище размещено на пуле группы (из нескольких — с меньшим\n`id`); `null`, если такого нет.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "vdc_name": {
                                        "description": "Имя этого ДЦ; `null`, если ДЦ нет.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "portals"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "С параметром `objective` — объект с ключом `id` группы строкой.",
                                  "type": "object"
                                }
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "iSCSI List Portal Groups"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#iscsi-target-set-auth": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set vDC Target Auth\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45033` | Unknown auth group: {0} | Auth group с указанным ID не существует. |\n| `-45032` | iSCSI is not configured for VDC: {0} | iSCSI для этого vDC не сконфигурирован — сначала vdc-storage-iscsi-configure. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "iscsi-target-set-auth",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "iscsi-target-set-auth",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "auth_group_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "auth_group_id",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: группа назначена таргету ДЦ.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45033,
                        -45032,
                        -45013,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "iscsi"
        ],
        "x-access": [
          "Set vDC Target Auth"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45033": "Auth group с указанным ID не существует.",
          "-45032": "iSCSI для этого vDC не сконфигурирован — сначала vdc-storage-iscsi-configure.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#net-ippool-add": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Add IP Pool, Add Own Network IP Pool\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25626` | The address is not reserved | IPv6-адрес отсутствует в списке зарезервированных адресов сети. |\n| `-25625` | The network does not support IPv6 | Передан IPv6-адрес, но у сети нет IPv6 CIDR. |\n| `-25624` | The network does not support IPv4 | Передан IPv4-адрес, но у сети нет IPv4 CIDR. |\n| `-25623` | The address exists already | Такой адрес уже числится занятым в пуле сети. |\n| `-25622` | The address {0} doesn't match network cidr {1} | Адрес не входит в CIDR-блок сети. |\n| `-25621` | Internal error ORA-00900 | Внутренняя ошибка нормализации адреса в CIDR-запись (/32 или /128). |\n| `-25620` | The network does not exist | Сеть с указанным network_id не найдена. |\n| `-25608` | address param is not valid | Параметр address не является корректным IP-адресом. |\n| `-25607` | address param is null | Параметр address равен null. |\n| `-25606` | address param does not exist | В params отсутствует параметр address. |\n| `-25605` | network_id param is not numeric | Параметр network_id не является корректным числом. |\n| `-25604` | network_id param is null | Параметр network_id равен null. |\n| `-25603` | network_id param does not exist | В params отсутствует параметр network_id. |\n| `-25602` | Params section is null | Секция params равна null или не является объектом. |\n| `-25601` | Params section does not exist | В запросе отсутствует секция params. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка базы данных при выполнении запроса. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "net-ippool-add",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "net-ippool-add",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "address": {
                        "type": "string"
                      },
                      "network_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "address",
                      "network_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: успех подтверждается самим ответом без ошибки.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25626,
                        -25625,
                        -25624,
                        -25623,
                        -25622,
                        -25621,
                        -25620,
                        -25608,
                        -25607,
                        -25606,
                        -25605,
                        -25604,
                        -25603,
                        -25602,
                        -25601,
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "net"
        ],
        "x-access": [
          "Add IP Pool",
          "Add Own Network IP Pool"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25626": "IPv6-адрес отсутствует в списке зарезервированных адресов сети.",
          "-25625": "Передан IPv6-адрес, но у сети нет IPv6 CIDR.",
          "-25624": "Передан IPv4-адрес, но у сети нет IPv4 CIDR.",
          "-25623": "Такой адрес уже числится занятым в пуле сети.",
          "-25622": "Адрес не входит в CIDR-блок сети.",
          "-25621": "Внутренняя ошибка нормализации адреса в CIDR-запись (/32 или /128).",
          "-25620": "Сеть с указанным network_id не найдена.",
          "-25608": "Параметр address не является корректным IP-адресом.",
          "-25607": "Параметр address равен null.",
          "-25606": "В params отсутствует параметр address.",
          "-25605": "Параметр network_id не является корректным числом.",
          "-25604": "Параметр network_id равен null.",
          "-25603": "В params отсутствует параметр network_id.",
          "-25602": "Секция params равна null или не является объектом.",
          "-25601": "В запросе отсутствует секция params.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка базы данных при выполнении запроса."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#net-ippool-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete IP Pool, Delete Own Network IP Pool\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25727` | The address is already reserved | IPv6-адрес уже числится в зарезервированных — повторное резервирование невозможно. |\n| `-25726` | The network does not support IPv6 | Передан IPv6-адрес, но у сети нет IPv6 CIDR. |\n| `-25725` | The network does not support IPv4 | Передан IPv4-адрес, но у сети нет IPv4 CIDR. |\n| `-25724` | The address does not exist | IPv4-адреса нет среди занятых в пуле — удалять нечего. |\n| `-25722` | The address {0} doesn't match network cidr {1} | Адрес не входит в CIDR-блок сети. |\n| `-25721` | Internal error ORA-00900 | Внутренняя ошибка нормализации адреса в CIDR-запись (/32 или /128). |\n| `-25720` | The network does not exist | Сеть с указанным network_id не найдена. |\n| `-25708` | address param is not valid | Параметр address не является корректным IP-адресом. |\n| `-25707` | address param is null | Параметр address равен null. |\n| `-25706` | address param does not exist | В params отсутствует параметр address. |\n| `-25705` | network_id param is not numeric | Параметр network_id не является корректным числом. |\n| `-25704` | network_id param is null | Параметр network_id равен null. |\n| `-25703` | network_id param does not exist | В params отсутствует параметр network_id. |\n| `-25702` | Params section is null | Секция params равна null или не является объектом. |\n| `-25701` | Params section does not exist | В запросе отсутствует секция params. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка базы данных при выполнении запроса. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "net-ippool-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "net-ippool-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "address": {
                        "type": "string"
                      },
                      "network_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "address",
                      "network_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: успех подтверждается самим ответом без ошибки.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25727,
                        -25726,
                        -25725,
                        -25724,
                        -25722,
                        -25721,
                        -25720,
                        -25708,
                        -25707,
                        -25706,
                        -25705,
                        -25704,
                        -25703,
                        -25702,
                        -25701,
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "net"
        ],
        "x-access": [
          "Delete IP Pool",
          "Delete Own Network IP Pool"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25727": "IPv6-адрес уже числится в зарезервированных — повторное резервирование невозможно.",
          "-25726": "Передан IPv6-адрес, но у сети нет IPv6 CIDR.",
          "-25725": "Передан IPv4-адрес, но у сети нет IPv4 CIDR.",
          "-25724": "IPv4-адреса нет среди занятых в пуле — удалять нечего.",
          "-25722": "Адрес не входит в CIDR-блок сети.",
          "-25721": "Внутренняя ошибка нормализации адреса в CIDR-запись (/32 или /128).",
          "-25720": "Сеть с указанным network_id не найдена.",
          "-25708": "Параметр address не является корректным IP-адресом.",
          "-25707": "Параметр address равен null.",
          "-25706": "В params отсутствует параметр address.",
          "-25705": "Параметр network_id не является корректным числом.",
          "-25704": "Параметр network_id равен null.",
          "-25703": "В params отсутствует параметр network_id.",
          "-25702": "Секция params равна null или не является объектом.",
          "-25701": "В запросе отсутствует секция params.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка базы данных при выполнении запроса."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#net-ippool-free": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View IP Pool Free Addresses, View Own Network IP Pool Free\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка базы данных при выполнении запроса. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "net-ippool-free",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "net-ippool-free",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": true
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "items": {
                                    "description": "Запас адресов одной сети.",
                                    "properties": {
                                      "free_addresses": {
                                        "description": "Число свободных адресов IPv4 в пуле сети.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "free_addresses_v6": {
                                        "description": "Число свободных адресов IPv6. `0` — у сети нет подсети IPv6, подсеть\nзадана в нераспознаваемом виде или свободных адресов не осталось; `-1` —\nподсеть слишком велика для подсчёта (префикс короче `/66`).",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "network_id": {
                                        "description": "Идентификатор сети.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "network_name": {
                                        "description": "Название сети; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "network_id",
                                      "free_addresses",
                                      "free_addresses_v6"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "Запас адресов одной сети.",
                                    "properties": {
                                      "free_addresses": {
                                        "description": "Число свободных адресов IPv4 в пуле сети.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "free_addresses_v6": {
                                        "description": "Число свободных адресов IPv6. `0` — у сети нет подсети IPv6, подсеть\nзадана в нераспознаваемом виде или свободных адресов не осталось; `-1` —\nподсеть слишком велика для подсчёта (префикс короче `/66`).",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "network_id": {
                                        "description": "Идентификатор сети.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "network_name": {
                                        "description": "Название сети; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "network_id",
                                      "free_addresses",
                                      "free_addresses_v6"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "object"
                                }
                              ],
                              "description": "Свободные адреса по сетям: массив, а с параметром `objective` — объект с ключом\n`network_id` строкой. Если у вызывающего нет ни доступа к ДЦ, ни доступа\nк созданным им сетям, — пустой массив в любом режиме."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "net"
        ],
        "x-access": [
          "View IP Pool Free Addresses",
          "View Own Network IP Pool Free"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка базы данных при выполнении запроса."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#net-ippool-show": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View IP Pool Details, View Own Network IP Pool Details\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25505` | network_id param is not numeric | Параметр network_id не является корректным числом. |\n| `-25504` | network_id param is null | Параметр network_id равен null. |\n| `-25503` | network_id param does not exist | В params отсутствует параметр network_id. |\n| `-25502` | Params section is null | Секция params равна null или не является объектом. |\n| `-25501` | Params section does not exist | В запросе отсутствует секция params. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка базы данных при выполнении запроса. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "net-ippool-show",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "net-ippool-show",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "network_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "objective": true
                    },
                    "required": [
                      "network_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "ippool": {
                                  "anyOf": [
                                    {
                                      "items": {
                                        "additionalProperties": {
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "type": "object"
                                      },
                                      "type": "array"
                                    },
                                    {
                                      "additionalProperties": {
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "type": "object"
                                    }
                                  ],
                                  "description": "Адреса IPv4 пула сети с признаком занятости: `1` — адрес выдан порту ВМ,\n`0` — свободен. Без параметра `objective` — массив объектов из одного ключа\n«адрес → признак», с `objective` — один объект «адрес → признак»."
                                },
                                "ippool_v6": {
                                  "anyOf": [
                                    {
                                      "items": {
                                        "additionalProperties": {
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "type": "object"
                                      },
                                      "type": "array"
                                    },
                                    {
                                      "additionalProperties": {
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "type": "object"
                                    }
                                  ],
                                  "description": "Адреса IPv6 сети, которые выданы портам ВМ (`1`) или зарезервированы (`0`);\nсвободные адреса IPv6 не перечисляются. Форма — как у `ippool`."
                                }
                              },
                              "required": [
                                "ippool",
                                "ippool_v6"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25505,
                        -25504,
                        -25503,
                        -25502,
                        -25501,
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "net"
        ],
        "x-access": [
          "View IP Pool Details",
          "View Own Network IP Pool Details"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25505": "Параметр network_id не является корректным числом.",
          "-25504": "Параметр network_id равен null.",
          "-25503": "В params отсутствует параметр network_id.",
          "-25502": "Секция params равна null или не является объектом.",
          "-25501": "В запросе отсутствует секция params.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка базы данных при выполнении запроса."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#net-ippool-usage": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View IP Pool Usage, View Own Network IP Pool Usage\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-7020` | Bad vdc_id param value | Параметр vdc_id не является корректным неотрицательным числом. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка базы данных при выполнении запроса. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "net-ippool-usage",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "net-ippool-usage",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": true,
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "items": {
                                    "description": "Адрес, занятый ВМ в сети.",
                                    "properties": {
                                      "address": {
                                        "description": "IP-адрес без суффикса `/32` или `/128`.",
                                        "type": "string"
                                      },
                                      "network_id": {
                                        "description": "Идентификатор сети.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vdc_id": {
                                        "description": "Идентификатор ДЦ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vm_id": {
                                        "description": "Идентификатор ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "vdc_id",
                                      "vm_id",
                                      "network_id",
                                      "address"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "additionalProperties": {
                                      "additionalProperties": {
                                        "type": "string"
                                      },
                                      "type": "object"
                                    },
                                    "type": "object"
                                  },
                                  "type": "object"
                                }
                              ],
                              "description": "Занятые адреса: массив записей, а с параметром `objective` — вложенный объект\n«сеть → ДЦ → ВМ → адрес», все ключи — идентификаторы строкой. Если у вызывающего\nнет ни доступа к ДЦ, ни доступа к созданным им сетям, — пустой массив в любом\nрежиме."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -7020,
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "net"
        ],
        "x-access": [
          "View IP Pool Usage",
          "View Own Network IP Pool Usage"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-7020": "Параметр vdc_id не является корректным неотрицательным числом.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка базы данных при выполнении запроса."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#net-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Networks, View Own Networks\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-7020` | Bad vdc_id param value | Параметр vdc_id не является корректным неотрицательным числом. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка базы данных при выполнении запроса. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "net-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "net-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": true,
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "items": {
                                    "description": "Сеть в выдаче массивом.",
                                    "properties": {
                                      "backend": {
                                        "description": "Код бэкенда сети; `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "creator": {
                                        "description": "Идентификатор пользователя, создавшего сеть; `null`, если неизвестен.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "ext_managed_ippool": {
                                        "description": "Адресами сети управляет внешняя система: `1` — да, `0` — нет, `null` — не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "gi_object": {
                                        "description": "Сеть — объект федерации GI: `1` — да, `0` — нет, `null` — не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "gw": {
                                        "description": "Шлюз по умолчанию IPv4; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "gw_v6": {
                                        "description": "Шлюз по умолчанию IPv6; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "id": {
                                        "description": "Идентификатор сети строкой, например `\"12\"`.",
                                        "type": "string"
                                      },
                                      "modified": {
                                        "description": "Время последнего изменения, Unix-время в секундах; `null`, если неизвестно.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "mtu": {
                                        "description": "MTU сети, байт; `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "name": {
                                        "description": "Название сети; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "net_cidr": {
                                        "description": "Подсеть IPv4 в нотации CIDR; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "net_cidr_v6": {
                                        "description": "Подсеть IPv6 в нотации CIDR; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "network_type_id": {
                                        "description": "Тип сети (параметр `type` метода `nets-create`); `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "qinq_id": {
                                        "description": "Внешний тег QinQ; `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "vlan_id": {
                                        "description": "Номер VLAN; `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "vxlan_multicast_addr": {
                                        "description": "Multicast-адрес VXLAN; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "vxlan_port": {
                                        "description": "UDP-порт VXLAN: `9009` у сети без VLAN, `null` у сети с VLAN.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "id"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "Сеть в выдаче объектом (параметр `objective`).",
                                    "properties": {
                                      "GI_object": {
                                        "description": "Сеть — объект федерации GI: `1` — да, `0` — нет, `null` — не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "backend": {
                                        "description": "Код бэкенда сети; `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "ext_managed_ippool": {
                                        "description": "Адресами сети управляет внешняя система: `1` — да, `0` — нет, `null` — не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "gw": {
                                        "description": "Шлюз по умолчанию IPv4; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "gw_v6": {
                                        "description": "Шлюз по умолчанию IPv6; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "id": {
                                        "description": "Идентификатор сети числом.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "modified": {
                                        "description": "Время последнего изменения, Unix-время в секундах; `null`, если неизвестно.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "mtu": {
                                        "description": "MTU сети, байт; `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "name": {
                                        "description": "Название сети; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "net_cidr": {
                                        "description": "Подсеть IPv4 в нотации CIDR; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "net_cidr_v6": {
                                        "description": "Подсеть IPv6 в нотации CIDR; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "network_type_id": {
                                        "description": "Тип сети (параметр `type` метода `nets-create`); `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "qinq_id": {
                                        "description": "Внешний тег QinQ; `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "vlan_id": {
                                        "description": "Номер VLAN; `null`, если не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "id"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "object"
                                }
                              ],
                              "description": "Сети: массив, а с параметром `objective` — объект с ключом `id` сети строкой.\nЕсли запрошен недоступный вызывающему `vdc_id`, приходит пустой массив в\nлюбом режиме."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -7020,
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "net"
        ],
        "x-access": [
          "View Networks",
          "View Own Networks"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-7020": "Параметр vdc_id не является корректным неотрицательным числом.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка базы данных при выполнении запроса."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#net-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Edit Network, Edit Own Network\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-47306` | Network unknown | Обновление не затронуло ни одной записи — сеть с указанным id не найдена. |\n| `-47305` | No params has been provided | В запросе нет ни одного изменяемого параметра. |\n| `-47301` | No param id | В запросе отсутствует секция params с параметром id. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | Database error: {0} | Ошибка базы данных при обновлении сети. |\n| `-7` | *динамическое сообщение* | Ошибка базы данных при выполнении запроса. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "net-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "net-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "params": {
                        "properties": {
                          "name": {
                            "default": null,
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "id",
                      "params"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: успех подтверждается самим ответом без ошибки.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -47306,
                        -47305,
                        -47301,
                        -403,
                        -78,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "net"
        ],
        "x-access": [
          "Edit Network",
          "Edit Own Network"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-47306": "Обновление не затронуло ни одной записи — сеть с указанным id не найдена.",
          "-47305": "В запросе нет ни одного изменяемого параметра.",
          "-47301": "В запросе отсутствует секция params с параметром id.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка базы данных при обновлении сети.",
          "-7": "Ошибка базы данных при выполнении запроса."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#nets-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create Network, Create Cluster Network\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-682` | default_gw value is out of cidr block | Адрес default_gw не входит в CIDR-блок сети. |\n| `-681` | default_gw param has bad value | Значение default_gw не является корректным IP-адресом нужной версии. |\n| `-680` | default_gw param is NULL | Параметр default_gw передан пустым (null или пустая строка). |\n| `-659` | Failed to obtain cluster status while creating network | Не удалось получить статус узлов кластера для выполнения операции. |\n| `-647` | Empty cidr param value | Не задан ни IPv4-, ни IPv6-CIDR — параметр cidr пустой. |\n| `-646` | You've asked too wide network: {0} bits | Префикс IPv4-сети короче /16 — запрошена слишком широкая сеть. |\n| `-644` | Bad cidr param value | Значение cidr не разбирается как корректный CIDR нужной версии IP. |\n| `-643` | You've asked too narrow network: {0} bits | Префикс IPv4-сети длиннее /29 — запрошена слишком узкая сеть. |\n| `-637` | Empty backend param value | Параметр backend передан пустым (null). |\n| `-636` | Bad backend param value | Значение backend отрицательное или имеет недопустимый формат. |\n| `-629` | mtu param value {0} exceeds maximal {1} | Значение mtu превышает максимум, заданный настройками кластера (mtu_max). |\n| `-628` | mtu param value is out of acceptable range (1000-9180) | Значение mtu вне допустимого диапазона 1000-9180. |\n| `-627` | Empty mtu param value | Параметр mtu передан пустым (null). |\n| `-617` | Network creation failed | Вставка сети в базу не вернула корректный id — создание не удалось. |\n| `-613` | qinq_id is not allowed for this network type | Параметр qinq_id передан для типа сети, отличного от Q-in-Q. |\n| `-612` | qinq_id param is required for Q-in-Q network type | Для сети типа Q-in-Q не передан обязательный qinq_id. |\n| `-611` | qinq_id param value is out of acceptable range | Значение qinq_id вне допустимого диапазона, заданного настройками кластера. |\n| `-610` | Bad param qinq_id | Параметр qinq_id передан пустым (null). |\n| `-609` | Bad mixup of network type and params | Недопустимое сочетание типа сети и параметров — например, VLAN-сеть без vlan_id. |\n| `-606` | Bad type value | Значение type вне допустимого набора типов сети (1-4). |\n| `-602` | Bad param value for vlan_id | Значение vlan_id вне допустимого диапазона, заданного настройками кластера. |\n| `-601` | Bad param vlan_id | Параметр vlan_id передан пустым (null) либо не указан там, где обязателен. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "nets-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "nets-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "backend": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "cidr": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "cidr_v6": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "default_gw": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "default_gw_v6": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "ext_managed_ippool": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "mtu": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "qinq_id": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "type": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "vlan_id": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Итог создания сети.",
                              "properties": {
                                "message": {
                                  "description": "Сообщение об успехе вида `Network <id> has been created`, где `<id>` —\nидентификатор созданной сети.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "message"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -682,
                        -681,
                        -680,
                        -659,
                        -647,
                        -646,
                        -644,
                        -643,
                        -637,
                        -636,
                        -629,
                        -628,
                        -627,
                        -617,
                        -613,
                        -612,
                        -611,
                        -610,
                        -609,
                        -606,
                        -602,
                        -601,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "nets"
        ],
        "x-access": [
          "Create Network",
          "Create Cluster Network"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-682": "Адрес default_gw не входит в CIDR-блок сети.",
          "-681": "Значение default_gw не является корректным IP-адресом нужной версии.",
          "-680": "Параметр default_gw передан пустым (null или пустая строка).",
          "-659": "Не удалось получить статус узлов кластера для выполнения операции.",
          "-647": "Не задан ни IPv4-, ни IPv6-CIDR — параметр cidr пустой.",
          "-646": "Префикс IPv4-сети короче /16 — запрошена слишком широкая сеть.",
          "-644": "Значение cidr не разбирается как корректный CIDR нужной версии IP.",
          "-643": "Префикс IPv4-сети длиннее /29 — запрошена слишком узкая сеть.",
          "-637": "Параметр backend передан пустым (null).",
          "-636": "Значение backend отрицательное или имеет недопустимый формат.",
          "-629": "Значение mtu превышает максимум, заданный настройками кластера (mtu_max).",
          "-628": "Значение mtu вне допустимого диапазона 1000-9180.",
          "-627": "Параметр mtu передан пустым (null).",
          "-617": "Вставка сети в базу не вернула корректный id — создание не удалось.",
          "-613": "Параметр qinq_id передан для типа сети, отличного от Q-in-Q.",
          "-612": "Для сети типа Q-in-Q не передан обязательный qinq_id.",
          "-611": "Значение qinq_id вне допустимого диапазона, заданного настройками кластера.",
          "-610": "Параметр qinq_id передан пустым (null).",
          "-609": "Недопустимое сочетание типа сети и параметров — например, VLAN-сеть без vlan_id.",
          "-606": "Значение type вне допустимого набора типов сети (1-4).",
          "-602": "Значение vlan_id вне допустимого диапазона, заданного настройками кластера.",
          "-601": "Параметр vlan_id передан пустым (null) либо не указан там, где обязателен.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#nets-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete Network, Delete Own Network\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-722` | Internal database error | Ошибка запроса к базе при проверке принадлежности или создателя сети. |\n| `-659` | Failed to obtain cluster status while creating network | Не удалось получить статус узлов кластера для выполнения операции. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "nets-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "nets-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Итог удаления сети.",
                              "properties": {
                                "message": {
                                  "description": "Сообщение об успехе вида `Network <id> has been deleted`, где `<id>` —\nидентификатор удалённой сети.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "message"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -722,
                        -659,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "nets"
        ],
        "x-access": [
          "Delete Network",
          "Delete Own Network"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-722": "Ошибка запроса к базе при проверке принадлежности или создателя сети.",
          "-659": "Не удалось получить статус узлов кластера для выполнения операции.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-config-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Get Node Config\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-23133` | Can't get 'node status' from cluster-management; Can't get config | cluster-management не ответил по ZeroMQ — конфигурация не получена/не записана. |\n| `-23125` | numeric value of oid {oid} ({value}) above maximum ({max}) | Числовое значение oid больше допустимого максимума. |\n| `-23124` | numeric value of oid {oid} ({value}) below minimum ({min}) | Числовое значение oid меньше допустимого минимума. |\n| `-23123` | oid {oid} has no configuration class {class} | Указанный oid не принадлежит запрошенному конфигурационному классу. |\n| `-23122` | unsupported oid: {0} | Указанный oid отсутствует в карте конфигурации. |\n| `-23121` | Bad oid name | Имя oid содержит недопустимые символы (допустимы a-z, 0-9, точка, подчёркивание). |\n| `-23120` | oid param {0} is not scalar | Значение oid при записи не скаляр (строка, число или булево). |\n| `-23110` | Node config management was not enabled | node-config-get/set вызван при выключенной функции управления конфигурацией нод. |\n| `-23109` | Failed to get configuration map | Не удалось получить карту конфигурации нод. |\n| `-23108` | oid param has wrong type | Параметр oid не является JSON-объектом. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-458` | All nodes are offline or unavailable for auto placement | Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-200` | Can't get 'node status' from cluster-management | Не удалось получить статус нод от cluster-management — инвентаризация невозможна. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-config-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-config-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "class": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "oid": true
                    },
                    "required": [
                      "class",
                      "oid"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "additionalProperties": true,
                                "description": "Параметры одного узла.",
                                "properties": {
                                  "oid": {
                                    "additionalProperties": true,
                                    "description": "Параметры: ключ — имя параметра, значение — его значение на узле.",
                                    "type": "object"
                                  }
                                },
                                "type": "object"
                              },
                              "description": "Ответ по узлам: ключ — имя узла, значение — параметры узла в том виде, в каком их вернул узел,\nбез пути к файлу конфигурации; значения `oid`, записанные числом в строке, переданы числом.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -23133,
                        -23125,
                        -23124,
                        -23123,
                        -23122,
                        -23121,
                        -23120,
                        -23110,
                        -23109,
                        -23108,
                        -9707,
                        -9706,
                        -458,
                        -403,
                        -219,
                        -200
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "Get Node Config"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-23133": "cluster-management не ответил по ZeroMQ — конфигурация не получена/не записана.",
          "-23125": "Числовое значение oid больше допустимого максимума.",
          "-23124": "Числовое значение oid меньше допустимого минимума.",
          "-23123": "Указанный oid не принадлежит запрошенному конфигурационному классу.",
          "-23122": "Указанный oid отсутствует в карте конфигурации.",
          "-23121": "Имя oid содержит недопустимые символы (допустимы a-z, 0-9, точка, подчёркивание).",
          "-23120": "Значение oid при записи не скаляр (строка, число или булево).",
          "-23110": "node-config-get/set вызван при выключенной функции управления конфигурацией нод.",
          "-23109": "Не удалось получить карту конфигурации нод.",
          "-23108": "Параметр oid не является JSON-объектом.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-458": "Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-200": "Не удалось получить статус нод от cluster-management — инвентаризация невозможна."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-config-map": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Node Config Map\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-23301` | Node config management was not enabled | node-config-map вызван при выключенной функции управления конфигурацией нод. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-config-map",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-config-map",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "node": {
                                  "additionalProperties": {
                                    "additionalProperties": {
                                      "additionalProperties": {
                                        "description": "Значение параметра в классе конфигурации.",
                                        "properties": {
                                          "class_id": {
                                            "description": "Идентификатор класса конфигурации.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "class_name": {
                                            "description": "Название класса конфигурации.",
                                            "type": "string"
                                          },
                                          "last_seen": {
                                            "description": "Время последних данных о значении, Unix-время в секундах; `null`, если\nнеизвестно.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "value": {
                                            "anyOf": [
                                              {
                                                "anyOf": [
                                                  {
                                                    "format": "double",
                                                    "type": "number"
                                                  },
                                                  {
                                                    "type": "string"
                                                  }
                                                ]
                                              },
                                              {
                                                "type": "null"
                                              }
                                            ],
                                            "description": "Значение параметра: у числового параметра — число (или строка, если\nзначение не разбирается как число), у остальных — строка; `null`, если\nзначение не задано."
                                          }
                                        },
                                        "required": [
                                          "class_id",
                                          "class_name"
                                        ],
                                        "type": "object"
                                      },
                                      "description": "Параметр конфигурации узла. Кроме полей ниже, запись содержит значения\nпараметра по классам конфигурации: ключ — идентификатор класса строкой.",
                                      "properties": {
                                        "group_id": {
                                          "description": "Идентификатор группы параметров.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "group_name": {
                                          "description": "Название группы параметров.",
                                          "type": "string"
                                        },
                                        "id": {
                                          "description": "Идентификатор параметра.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "is_numeric": {
                                          "description": "Параметр числовой.",
                                          "type": "boolean"
                                        },
                                        "oid": {
                                          "description": "Имя параметра.",
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "id",
                                        "oid",
                                        "group_id",
                                        "group_name",
                                        "is_numeric"
                                      ],
                                      "type": "object"
                                    },
                                    "description": "Конфигурация узла. Кроме полей ниже, запись содержит параметры конфигурации:\nключ — идентификатор параметра строкой.",
                                    "properties": {
                                      "hostname": {
                                        "description": "Имя хоста узла; `null`, если неизвестно.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "id": {
                                        "description": "Идентификатор узла.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "id"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "Конфигурация узлов: ключ — `node_id` строкой.",
                                  "type": "object"
                                }
                              },
                              "required": [
                                "node"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -23301,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "View Node Config Map"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-23301": "node-config-map вызван при выключенной функции управления конфигурацией нод.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-config-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set Node Config\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-23133` | Can't get 'node status' from cluster-management; Can't get config | cluster-management не ответил по ZeroMQ — конфигурация не получена/не записана. |\n| `-23125` | numeric value of oid {oid} ({value}) above maximum ({max}) | Числовое значение oid больше допустимого максимума. |\n| `-23124` | numeric value of oid {oid} ({value}) below minimum ({min}) | Числовое значение oid меньше допустимого минимума. |\n| `-23123` | oid {oid} has no configuration class {class} | Указанный oid не принадлежит запрошенному конфигурационному классу. |\n| `-23122` | unsupported oid: {0} | Указанный oid отсутствует в карте конфигурации. |\n| `-23121` | Bad oid name | Имя oid содержит недопустимые символы (допустимы a-z, 0-9, точка, подчёркивание). |\n| `-23120` | oid param {0} is not scalar | Значение oid при записи не скаляр (строка, число или булево). |\n| `-23110` | Node config management was not enabled | node-config-get/set вызван при выключенной функции управления конфигурацией нод. |\n| `-23109` | Failed to get configuration map | Не удалось получить карту конфигурации нод. |\n| `-23108` | oid param has wrong type | Параметр oid не является JSON-объектом. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-458` | All nodes are offline or unavailable for auto placement | Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-200` | Can't get 'node status' from cluster-management | Не удалось получить статус нод от cluster-management — инвентаризация невозможна. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-config-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-config-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "class": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "oid": true
                    },
                    "required": [
                      "class",
                      "oid"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "additionalProperties": true,
                                "description": "Параметры одного узла.",
                                "properties": {
                                  "oid": {
                                    "additionalProperties": true,
                                    "description": "Параметры: ключ — имя параметра, значение — его значение на узле.",
                                    "type": "object"
                                  }
                                },
                                "type": "object"
                              },
                              "description": "Ответ по узлам: ключ — имя узла, значение — параметры узла в том виде, в каком их вернул узел,\nбез пути к файлу конфигурации; значения `oid`, записанные числом в строке, переданы числом.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -23133,
                        -23125,
                        -23124,
                        -23123,
                        -23122,
                        -23121,
                        -23120,
                        -23110,
                        -23109,
                        -23108,
                        -9707,
                        -9706,
                        -458,
                        -403,
                        -219,
                        -200
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "Set Node Config"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-23133": "cluster-management не ответил по ZeroMQ — конфигурация не получена/не записана.",
          "-23125": "Числовое значение oid больше допустимого максимума.",
          "-23124": "Числовое значение oid меньше допустимого минимума.",
          "-23123": "Указанный oid не принадлежит запрошенному конфигурационному классу.",
          "-23122": "Указанный oid отсутствует в карте конфигурации.",
          "-23121": "Имя oid содержит недопустимые символы (допустимы a-z, 0-9, точка, подчёркивание).",
          "-23120": "Значение oid при записи не скаляр (строка, число или булево).",
          "-23110": "node-config-get/set вызван при выключенной функции управления конфигурацией нод.",
          "-23109": "Не удалось получить карту конфигурации нод.",
          "-23108": "Параметр oid не является JSON-объектом.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-458": "Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-200": "Не удалось получить статус нод от cluster-management — инвентаризация невозможна."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-cpu-cores": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Node CPU Cores\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-26101` | The hardware inventory feature was not enabled | node-cpu-cores вызван при выключенной функции инвентаризации оборудования. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-cpu-cores",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-cpu-cores",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "default": null,
                        "format": "int32",
                        "maximum": 99,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "items": {
                                  "description": "Ядро процессора узла. В выдаче только ядра, по которым узел присылал\nданные за последние 10 минут.",
                                  "properties": {
                                    "core_id": {
                                      "description": "Номер ядра на узле.",
                                      "format": "int16",
                                      "maximum": 32767,
                                      "minimum": -32768,
                                      "type": "integer"
                                    },
                                    "numa_domain": {
                                      "description": "NUMA-домен ядра.",
                                      "format": "int16",
                                      "maximum": 32767,
                                      "minimum": -32768,
                                      "type": "integer"
                                    },
                                    "utilization": {
                                      "description": "Загрузка ядра по последним данным узла.",
                                      "format": "int16",
                                      "maximum": 32767,
                                      "minimum": -32768,
                                      "type": "integer"
                                    }
                                  },
                                  "required": [
                                    "core_id",
                                    "numa_domain",
                                    "utilization"
                                  ],
                                  "type": "object"
                                },
                                "type": "array"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -26101,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "View Node CPU Cores"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-26101": "node-cpu-cores вызван при выключенной функции инвентаризации оборудования.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-hw-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Node Hardware\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-26001` | The hardware inventory feature was not enabled | node-hw-list вызван при выключенной функции инвентаризации оборудования. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-hw-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-hw-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "default": null,
                        "format": "int32",
                        "maximum": 99,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "additionalProperties": {
                                  "additionalProperties": {
                                    "description": "Свойство устройства.",
                                    "properties": {
                                      "prop_id": {
                                        "description": "Идентификатор свойства.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "prop_name": {
                                        "description": "Название свойства.",
                                        "type": "string"
                                      },
                                      "prop_value": {
                                        "anyOf": [
                                          {
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          {
                                            "type": "string"
                                          }
                                        ],
                                        "description": "Значение свойства: целое число, если значение состоит только из цифр,\nиначе строка."
                                      }
                                    },
                                    "required": [
                                      "prop_id",
                                      "prop_name",
                                      "prop_value"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "Устройство из аппаратного инвентаря узла (SMBIOS). Кроме полей ниже, запись\nсодержит свойства устройства: ключ — идентификатор свойства строкой.",
                                  "properties": {
                                    "dev_id": {
                                      "description": "Идентификатор типа устройства.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "dev_name": {
                                      "description": "Название типа устройства.",
                                      "type": "string"
                                    },
                                    "dev_serial": {
                                      "description": "Номер устройства в инвентаре узла; совпадает с ключом записи.",
                                      "format": "int32",
                                      "type": "integer"
                                    }
                                  },
                                  "required": [
                                    "dev_id",
                                    "dev_name",
                                    "dev_serial"
                                  ],
                                  "type": "object"
                                },
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -26001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "View Node Hardware"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-26001": "node-hw-list вызван при выключенной функции инвентаризации оборудования.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-inventory": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Node Inventory\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-23203` | dev_type param has an unsupported value | Параметр dev_type имеет неподдерживаемое значение. |\n| `-23202` | Can't get 'node status' from cluster-management; Can't initiate inventory | cluster-management не ответил по ZeroMQ — инвентаризация не запущена. |\n| `-23201` | Node config management was not enabled | node-inventory вызван при выключенной функции управления конфигурацией нод. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-458` | All nodes are offline or unavailable for auto placement | Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-200` | Can't get 'node status' from cluster-management | Не удалось получить статус нод от cluster-management — инвентаризация невозможна. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-inventory",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-inventory",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "dev_type": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Инвентаризация всего кластера.",
                                  "properties": {
                                    "node": {
                                      "additionalProperties": {
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "description": "Ключ — имя узла, значение — `1`, если данные узла записаны в учёт, `0`, если нет.",
                                      "type": "object"
                                    }
                                  },
                                  "required": [
                                    "node"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "description": "Инвентаризация одного узла: пустой объект.",
                                  "type": "object"
                                }
                              ],
                              "description": "Итог инвентаризации: пустой объект для одного узла, по всему кластеру — признак успеха по\nкаждому узлу."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -23203,
                        -23202,
                        -23201,
                        -9707,
                        -9706,
                        -458,
                        -403,
                        -219,
                        -200
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "View Node Inventory"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-23203": "Параметр dev_type имеет неподдерживаемое значение.",
          "-23202": "cluster-management не ответил по ZeroMQ — инвентаризация не запущена.",
          "-23201": "node-inventory вызван при выключенной функции управления конфигурацией нод.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-458": "Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-200": "Не удалось получить статус нод от cluster-management — инвентаризация невозможна."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Nodes\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-2` | *динамическое сообщение* | Не удалось получить список нод от cluster-management по ZeroMQ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -2
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "View Nodes"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-2": "Не удалось получить список нод от cluster-management по ZeroMQ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-perfdata": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Node Performance\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-4916` | Bad end_time value | Параметр end_time имеет недопустимое значение. |\n| `-4915` | Bad begin_time value | Параметр begin_time имеет недопустимое значение. |\n| `-4912` | Bad slice value | Параметр slice имеет недопустимое значение. |\n| `-4911` | Bad interval value | Параметр interval имеет недопустимое значение. |\n| `-4907` | Bad metric value | Параметр metric имеет недопустимое значение. |\n| `-3914` | Bad nodename value | Параметр nodename в node-perfdata отсутствует или недопустим. |\n| `-3912` | Bad slice value | Параметр slice в node-perfdata имеет недопустимое значение. |\n| `-3911` | Bad interval value | Параметр interval в node-perfdata имеет недопустимое значение. |\n| `-3907` | Bad metric value | Параметр metric в node-perfdata имеет неподдерживаемое значение. |\n| `-3904` | Unable to retreive perfdata | InfluxDB не вернула данных при запросе метрик ноды. |\n| `-3903` | Error upon perfdata retreival: {0} | InfluxDB вернула HTTP-ошибку при запросе метрик ноды. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-perfdata",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-perfdata",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "interval": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "metric": {
                        "type": "string"
                      },
                      "nodename": {
                        "type": "string"
                      },
                      "slice": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "metric",
                      "nodename"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -4916,
                        -4915,
                        -4912,
                        -4911,
                        -4907,
                        -3914,
                        -3912,
                        -3911,
                        -3907,
                        -3904,
                        -3903,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "View Node Performance"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-4916": "Параметр end_time имеет недопустимое значение.",
          "-4915": "Параметр begin_time имеет недопустимое значение.",
          "-4912": "Параметр slice имеет недопустимое значение.",
          "-4911": "Параметр interval имеет недопустимое значение.",
          "-4907": "Параметр metric имеет недопустимое значение.",
          "-3914": "Параметр nodename в node-perfdata отсутствует или недопустим.",
          "-3912": "Параметр slice в node-perfdata имеет недопустимое значение.",
          "-3911": "Параметр interval в node-perfdata имеет недопустимое значение.",
          "-3907": "Параметр metric в node-perfdata имеет неподдерживаемое значение.",
          "-3904": "InfluxDB не вернула данных при запросе метрик ноды.",
          "-3903": "InfluxDB вернула HTTP-ошибку при запросе метрик ноды.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-software": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Node Software\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-software",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-software",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "cluster": {
                                  "additionalProperties": {
                                    "description": "Версия пакета управления кластером.",
                                    "properties": {
                                      "last_seen": {
                                        "description": "Время запроса версии, Unix-время в секундах.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "version": {
                                        "description": "Версия пакета.",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "version",
                                      "last_seen"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "Версии пакетов управления кластером: ключ — имя пакета, `vStack-web` или\n`vStack-control-pane`. Пакета нет в выдаче, если его версию определить не\nудалось.",
                                  "type": "object"
                                },
                                "nodes": {
                                  "additionalProperties": {
                                    "description": "ПО узла.",
                                    "properties": {
                                      "kernvers": {
                                        "description": "Версия ядра ОС узла; `null`, если неизвестна. Ключа нет, если о базовой\nверсии узла нет данных.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "last_seen": {
                                        "description": "Время последних данных о версии ядра, Unix-время в секундах; `null`, если\nнеизвестно. Ключа нет, если о базовой версии узла нет данных.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "node_id": {
                                        "description": "Идентификатор узла.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "pkg": {
                                        "additionalProperties": {
                                          "description": "Версия пакета на узле.",
                                          "properties": {
                                            "last_seen": {
                                              "description": "Время последних данных о пакете, Unix-время в секундах; `null`, если\nнеизвестно.",
                                              "format": "int32",
                                              "type": [
                                                "integer",
                                                "null"
                                              ]
                                            },
                                            "version": {
                                              "description": "Версия пакета.",
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "version"
                                          ],
                                          "type": "object"
                                        },
                                        "description": "Установленные пакеты: ключ — имя пакета. Ключа нет, если о пакетах узла\nнет данных.",
                                        "type": "object"
                                      }
                                    },
                                    "required": [
                                      "node_id"
                                    ],
                                    "type": "object"
                                  },
                                  "description": "Версии ПО узлов: ключ — `node_id` строкой.",
                                  "type": "object"
                                }
                              },
                              "required": [
                                "nodes",
                                "cluster"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "View Node Software"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#node-software-inventory": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Software Inventory\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-43202` | Can't get 'node status' from cluster-management; Can't initiate inventory | cluster-management не ответил по ZeroMQ — инвентаризация ПО не запущена. |\n| `-43201` | Node config management was not enabled | node-software-inventory вызван при выключенной функции управления конфигурацией нод. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-458` | All nodes are offline or unavailable for auto placement | Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-200` | Can't get 'node status' from cluster-management | Не удалось получить статус нод от cluster-management — инвентаризация невозможна. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "node-software-inventory",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "node-software-inventory",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Пустой объект: данные узла записаны в учёт.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -43202,
                        -43201,
                        -9707,
                        -9706,
                        -458,
                        -403,
                        -219,
                        -200
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "node"
        ],
        "x-access": [
          "View Software Inventory"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-43202": "cluster-management не ответил по ZeroMQ — инвентаризация ПО не запущена.",
          "-43201": "node-software-inventory вызван при выключенной функции управления конфигурацией нод.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-458": "Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-200": "Не удалось получить статус нод от cluster-management — инвентаризация невозможна."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#os-image-import": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Import Golden Image\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-48008` | Image id already exists in catalog under a different source/version: {image_id} | Идентификатор образа уже занят в каталоге образом другого источника или другой версии. |\n| `-48007` | Pool not found: {0} | В плане раздачи указан пул без узла-владельца или ни у одного пула нет владельца. |\n| `-48006` | Manifest item is invalid: {0} | Запись образа в manifest.json источника некорректна: версия вне диапазона, неизвестный тип ОС или другое поле. |\n| `-48005` | Image format is not importable (zfs required): {0} | Формат образа не поддерживается для импорта: нужен zfs. |\n| `-48004` | Image is being deleted: os_profile {0} | Образ в процессе удаления. |\n| `-48003` | Image is already importing: {0} | Образ с тем же источником и версией уже импортируется. |\n| `-48002` | Image not found in source catalog: {image_id} | Образа с указанным идентификатором нет в каталоге источника библиотеки. |\n| `-46023` | manifest.json is invalid: {0} | manifest.json источника не соответствует ожидаемой структуре. |\n| `-46022` | Unsupported manifest schema_version: found {found}, supported up to {supported} | Версия схемы manifest.json источника новее поддерживаемой. |\n| `-46021` | manifest.json parse error: {0} | manifest.json источника не разбирается как JSON. |\n| `-46020` | Library source is unreachable: {0} | Источник библиотеки недоступен: manifest.json не получен. |\n| `-46012` | base_url host is blocked (loopback/link-local/metadata): {0} | Хост base_url не разрешается или указывает на запрещённый адрес (loopback, link-local, метаданные). |\n| `-46011` | Insecure scheme: HTTPS is required unless HTTP is explicitly allowed ({0}) | base_url использует HTTP, а разрешена только HTTPS. |\n| `-46010` | Invalid base_url: {0} | base_url не разбирается как URL или в нём нет хоста. |\n| `-46002` | Unknown library source: {0} | Источника библиотеки с указанным id нет или он вне зоны видимости вызывающего. |\n| `-25308` | No free 'send-receive' ports. Please try later | Все send-receive порты заняты — повторите попытку позже. |\n| `-23000` | Security log DB error: {0} | Ошибка БД при записи или чтении журнала безопасности. |\n| `-503` | intent audit not recorded: {0} | Fail-closed intent-аудит: durable-запись намерения не удалась (writer недоступен / таймаут / ошибка записи) → изменяющая операция не начинается. Код `-503` — кросс-спецификационная константа (feature_spec §6, DEC `center-goldenimage-03`), осознанное исключение из диапазона `-23xxx`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "os-image-import",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "os-image-import",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "image_id": {
                        "description": "UUID образа в источнике (поле `uuid` элемента манифеста). Однозначно\nопределяет образ и его версию — `item_name`/`version` резолвятся из манифеста\nпо найденному элементу. Типизирован: serde отвергает невалидный uuid.",
                        "format": "uuid",
                        "type": "string"
                      },
                      "library_id": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "pools": {
                        "default": null,
                        "description": "Подмножество пулов раздачи; дефолт = все пулы с владельцем. При явной передаче\nсписок должен быть непустым и в разумных пределах длины.",
                        "items": {
                          "type": "string"
                        },
                        "maxItems": 256,
                        "minItems": 1,
                        "type": [
                          "array",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "image_id",
                      "library_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Пустой объект: импорт поставлен в очередь раздачи (или раздавать уже нечего); ход импорта\nвидно в каталоге образов.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -48008,
                        -48007,
                        -48006,
                        -48005,
                        -48004,
                        -48003,
                        -48002,
                        -46023,
                        -46022,
                        -46021,
                        -46020,
                        -46012,
                        -46011,
                        -46010,
                        -46002,
                        -25308,
                        -23000,
                        -503,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "os"
        ],
        "x-access": [
          "Import Golden Image"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-48008": "Идентификатор образа уже занят в каталоге образом другого источника или другой версии.",
          "-48007": "В плане раздачи указан пул без узла-владельца или ни у одного пула нет владельца.",
          "-48006": "Запись образа в manifest.json источника некорректна: версия вне диапазона, неизвестный тип ОС или другое поле.",
          "-48005": "Формат образа не поддерживается для импорта: нужен zfs.",
          "-48004": "Образ в процессе удаления.",
          "-48003": "Образ с тем же источником и версией уже импортируется.",
          "-48002": "Образа с указанным идентификатором нет в каталоге источника библиотеки.",
          "-46023": "manifest.json источника не соответствует ожидаемой структуре.",
          "-46022": "Версия схемы manifest.json источника новее поддерживаемой.",
          "-46021": "manifest.json источника не разбирается как JSON.",
          "-46020": "Источник библиотеки недоступен: manifest.json не получен.",
          "-46012": "Хост base_url не разрешается или указывает на запрещённый адрес (loopback, link-local, метаданные).",
          "-46011": "base_url использует HTTP, а разрешена только HTTPS.",
          "-46010": "base_url не разбирается как URL или в нём нет хоста.",
          "-46002": "Источника библиотеки с указанным id нет или он вне зоны видимости вызывающего.",
          "-25308": "Все send-receive порты заняты — повторите попытку позже.",
          "-23000": "Ошибка БД при записи или чтении журнала безопасности.",
          "-503": "Fail-closed intent-аудит: durable-запись намерения не удалась (writer недоступен / таймаут / ошибка записи) → изменяющая операция не начинается. Код `-503` — кросс-спецификационная константа (feature_spec §6, DEC `center-goldenimage-03`), осознанное исключение из диапазона `-23xxx`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#os-library-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Image Library\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "os-library-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "os-library-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "libraries": {
                                  "anyOf": [
                                    {
                                      "items": {
                                        "description": "Источник библиотеки ОС.",
                                        "properties": {
                                          "base_url": {
                                            "description": "Адрес источника; `null`, если вызывающий не владеет источником (например,\nобщий источник для администратора ДЦ).",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "id": {
                                            "description": "Идентификатор источника; его передают в `library_id` методов\n`os-library-sync` и `os-image-import`.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "last_sync": {
                                            "description": "Время последней успешной синхронизации, unix-время в секундах; `null`, если\nсинхронизации ещё не было.",
                                            "format": "int64",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "name": {
                                            "description": "Название источника.",
                                            "type": "string"
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "name"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "array"
                                    },
                                    {
                                      "additionalProperties": {
                                        "description": "Источник библиотеки ОС.",
                                        "properties": {
                                          "base_url": {
                                            "description": "Адрес источника; `null`, если вызывающий не владеет источником (например,\nобщий источник для администратора ДЦ).",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "id": {
                                            "description": "Идентификатор источника; его передают в `library_id` методов\n`os-library-sync` и `os-image-import`.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "last_sync": {
                                            "description": "Время последней успешной синхронизации, unix-время в секундах; `null`, если\nсинхронизации ещё не было.",
                                            "format": "int64",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "name": {
                                            "description": "Название источника.",
                                            "type": "string"
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "name"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "object"
                                    }
                                  ],
                                  "description": "Источники библиотеки ОС, видимые вызывающему: массив, а с параметром\n`objective` — объект с ключом `id` источника строкой."
                                }
                              },
                              "required": [
                                "libraries"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "os"
        ],
        "x-access": [
          "View Image Library"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#os-library-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Manage Image Library\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-46013` | base_url already registered: {0} | Источник с таким base_url уже зарегистрирован. |\n| `-46012` | base_url host is blocked (loopback/link-local/metadata): {0} | Хост base_url не разрешается или указывает на запрещённый адрес (loopback, link-local, метаданные). |\n| `-46011` | Insecure scheme: HTTPS is required unless HTTP is explicitly allowed ({0}) | base_url использует HTTP, а разрешена только HTTPS. |\n| `-46010` | Invalid base_url: {0} | base_url не разбирается как URL или в нём нет хоста. |\n| `-46002` | Unknown library source: {0} | Источника библиотеки с указанным id нет или он вне зоны видимости вызывающего. |\n| `-23000` | Security log DB error: {0} | Ошибка БД при записи или чтении журнала безопасности. |\n| `-503` | intent audit not recorded: {0} | Fail-closed intent-аудит: durable-запись намерения не удалась (writer недоступен / таймаут / ошибка записи) → изменяющая операция не начинается. Код `-503` — кросс-спецификационная константа (feature_spec §6, DEC `center-goldenimage-03`), осознанное исключение из диапазона `-23xxx`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "os-library-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "os-library-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "allow_insecure": {
                        "default": null,
                        "description": "Явный opt-in под `http` (HTTPS by default).",
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "base_url": {
                        "maxLength": 1024,
                        "minLength": 1,
                        "type": "string"
                      },
                      "id": {
                        "default": null,
                        "description": "Присутствует → обновление существующего источника (upsert по `id`).",
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "name": {
                        "maxLength": 255,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "base_url",
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор созданного или изменённого источника библиотеки образов.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -46013,
                        -46012,
                        -46011,
                        -46010,
                        -46002,
                        -23000,
                        -503,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "os"
        ],
        "x-access": [
          "Manage Image Library"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-46013": "Источник с таким base_url уже зарегистрирован.",
          "-46012": "Хост base_url не разрешается или указывает на запрещённый адрес (loopback, link-local, метаданные).",
          "-46011": "base_url использует HTTP, а разрешена только HTTPS.",
          "-46010": "base_url не разбирается как URL или в нём нет хоста.",
          "-46002": "Источника библиотеки с указанным id нет или он вне зоны видимости вызывающего.",
          "-23000": "Ошибка БД при записи или чтении журнала безопасности.",
          "-503": "Fail-closed intent-аудит: durable-запись намерения не удалась (writer недоступен / таймаут / ошибка записи) → изменяющая операция не начинается. Код `-503` — кросс-спецификационная константа (feature_spec §6, DEC `center-goldenimage-03`), осознанное исключение из диапазона `-23xxx`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#os-library-sync": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Sync Image Library\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-46023` | manifest.json is invalid: {0} | manifest.json источника не соответствует ожидаемой структуре. |\n| `-46022` | Unsupported manifest schema_version: found {found}, supported up to {supported} | Версия схемы manifest.json источника новее поддерживаемой. |\n| `-46021` | manifest.json parse error: {0} | manifest.json источника не разбирается как JSON. |\n| `-46020` | Library source is unreachable: {0} | Источник библиотеки недоступен: manifest.json не получен. |\n| `-46012` | base_url host is blocked (loopback/link-local/metadata): {0} | Хост base_url не разрешается или указывает на запрещённый адрес (loopback, link-local, метаданные). |\n| `-46011` | Insecure scheme: HTTPS is required unless HTTP is explicitly allowed ({0}) | base_url использует HTTP, а разрешена только HTTPS. |\n| `-46010` | Invalid base_url: {0} | base_url не разбирается как URL или в нём нет хоста. |\n| `-46002` | Unknown library source: {0} | Источника библиотеки с указанным id нет или он вне зоны видимости вызывающего. |\n| `-23000` | Security log DB error: {0} | Ошибка БД при записи или чтении журнала безопасности. |\n| `-503` | intent audit not recorded: {0} | Fail-closed intent-аудит: durable-запись намерения не удалась (writer недоступен / таймаут / ошибка записи) → изменяющая операция не начинается. Код `-503` — кросс-спецификационная константа (feature_spec §6, DEC `center-goldenimage-03`), осознанное исключение из диапазона `-23xxx`. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "os-library-sync",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "os-library-sync",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "library_id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "library_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "items": {
                                  "description": "Образы из манифеста источника.",
                                  "items": {
                                    "description": "Образ из манифеста источника.",
                                    "properties": {
                                      "default_shell": {
                                        "description": "Оболочка по умолчанию; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "description": {
                                        "description": "Описание образа; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "format": {
                                        "description": "Формат артефакта образа, например `zfs`.",
                                        "type": "string"
                                      },
                                      "guest_customization": {
                                        "description": "Кастомизация гостевой ОС, например `cloud-init`; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "importable": {
                                        "description": "`true`, если формат образа пригоден для импорта методом `os-image-import`.",
                                        "type": "boolean"
                                      },
                                      "incarnation": {
                                        "description": "Метка версии образа в источнике (unix-время); `null`, если не задана.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "min_size": {
                                        "description": "Минимальный размер системного диска ВМ в байтах; `null`, если не задан.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "name": {
                                        "description": "Имя образа в источнике.",
                                        "type": "string"
                                      },
                                      "net_link_pattern": {
                                        "description": "Шаблон имён сетевых линков; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "os_type": {
                                        "description": "Тип ОС; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "os_version": {
                                        "description": "Версия ОС образа, например `22.04`; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "sector_size_logical": {
                                        "description": "Логический размер сектора, байт; `null`, если не задан.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "sector_size_physical": {
                                        "description": "Физический размер сектора, байт; `null`, если не задан.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "sha256": {
                                        "description": "Контрольная сумма SHA-256 артефакта.",
                                        "type": "string"
                                      },
                                      "size": {
                                        "description": "Размер артефакта в байтах.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "uefi": {
                                        "description": "Загрузка через UEFI; `null`, если не задано.",
                                        "type": [
                                          "boolean",
                                          "null"
                                        ]
                                      },
                                      "url_path": {
                                        "description": "Путь к артефакту относительно адреса источника.",
                                        "type": "string"
                                      },
                                      "uuid": {
                                        "description": "Идентификатор образа в источнике; его передают в `image_id` метода\n`os-image-import`. Строка как в манифесте, формат не проверяется; `null`,\nесли не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "version": {
                                        "description": "Версия образа в источнике.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "zero_based_link": {
                                        "description": "Нумерация линков с нуля; `null`, если не задана.",
                                        "type": [
                                          "boolean",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "name",
                                      "version",
                                      "format",
                                      "url_path",
                                      "size",
                                      "sha256",
                                      "importable"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "items"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -46023,
                        -46022,
                        -46021,
                        -46020,
                        -46012,
                        -46011,
                        -46010,
                        -46002,
                        -23000,
                        -503,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "os"
        ],
        "x-access": [
          "Sync Image Library"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-46023": "manifest.json источника не соответствует ожидаемой структуре.",
          "-46022": "Версия схемы manifest.json источника новее поддерживаемой.",
          "-46021": "manifest.json источника не разбирается как JSON.",
          "-46020": "Источник библиотеки недоступен: manifest.json не получен.",
          "-46012": "Хост base_url не разрешается или указывает на запрещённый адрес (loopback, link-local, метаданные).",
          "-46011": "base_url использует HTTP, а разрешена только HTTPS.",
          "-46010": "base_url не разбирается как URL или в нём нет хоста.",
          "-46002": "Источника библиотеки с указанным id нет или он вне зоны видимости вызывающего.",
          "-23000": "Ошибка БД при записи или чтении журнала безопасности.",
          "-503": "Fail-closed intent-аудит: durable-запись намерения не удалась (writer недоступен / таймаут / ошибка записи) → изменяющая операция не начинается. Код `-503` — кросс-спецификационная константа (feature_spec §6, DEC `center-goldenimage-03`), осознанное исключение из диапазона `-23xxx`.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-info": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Disk Info\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24402` | Bad value of param path | Параметр path метода pd-info отсутствует или имеет недопустимое значение. |\n| `-24401` | Physical disc management was not enabled | pd-info вызван при выключенной функции управления физическими дисками. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-info",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-info",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "path": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "node_id",
                      "path"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24402,
                        -24401,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "View Disk Info"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-24402": "Параметр path метода pd-info отсутствует или имеет недопустимое значение.",
          "-24401": "pd-info вызван при выключенной функции управления физическими дисками.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-led": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Control PD LED\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24316` | Can't locate enclosure_id | Не удалось определить enclosure_id по указанному устройству. |\n| `-24315` | Neither 'fault' nor 'locate' params had been set | В запросе pd-led не задан ни параметр fault, ни locate. |\n| `-24313` | Bad value of param locate | Параметр locate имеет значение, отличное от 0 или 1. |\n| `-24311` | Bad value of param fault | Параметр fault имеет значение, отличное от 0 или 1. |\n| `-24307` | Bad value of param device | Параметр device не соответствует формату /dev/sesN. |\n| `-24301` | Physical disc management was not enabled | pd-led вызван при выключенной функции управления физическими дисками. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-led",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-led",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "device_index": {
                        "format": "int64",
                        "type": "integer"
                      },
                      "enclosure_device": {
                        "type": "string"
                      },
                      "fault": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "locate": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "device_index",
                      "enclosure_device",
                      "node_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24316,
                        -24315,
                        -24313,
                        -24311,
                        -24307,
                        -24301,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "Control PD LED"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-24316": "Не удалось определить enclosure_id по указанному устройству.",
          "-24315": "В запросе pd-led не задан ни параметр fault, ни locate.",
          "-24313": "Параметр locate имеет значение, отличное от 0 или 1.",
          "-24311": "Параметр fault имеет значение, отличное от 0 или 1.",
          "-24307": "Параметр device не соответствует формату /dev/sesN.",
          "-24301": "pd-led вызван при выключенной функции управления физическими дисками.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Physical Disks\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24201` | Physical disc management was not enabled | pd-list вызван при выключенной функции управления физическими дисками. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Физический диск кластера.",
                                "properties": {
                                  "created": {
                                    "description": "Время появления диска в инвентаре, Unix-время в секундах; `null`, если неизвестно.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "device": {
                                    "description": "Имя устройства диска на узле, например `da0`.",
                                    "type": "string"
                                  },
                                  "device_index": {
                                    "description": "Индекс диска в корзине.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "enclosure_device": {
                                    "description": "Устройство SES корзины, например `/dev/ses0`; `null`, если корзина диска неизвестна.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "enclosure_id": {
                                    "description": "Идентификатор корзины (enclosure); `null`, если корзина диска неизвестна.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "last_seen": {
                                    "description": "Время последних данных о диске, Unix-время в секундах; `null`, если неизвестно.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "led_fault": {
                                    "description": "Индикатор Fault: 1 — включён, 0 — выключен или неизвестен.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "led_locate": {
                                    "description": "Индикатор Locate: 1 — включён, 0 — выключен или неизвестен.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "lifecycle": {
                                    "description": "Роль диска (идентификатор из справочника ролей); `null`, пока роль не определена.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "model": {
                                    "description": "Модель диска.",
                                    "type": "string"
                                  },
                                  "node_id": {
                                    "description": "Узел, на котором находится диск.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "online_in_cluster": {
                                    "description": "Диск онлайн в кластере.",
                                    "type": "boolean"
                                  },
                                  "pool_name": {
                                    "description": "Имя пула кластера, в который входит диск; `null`, если такого пула нет.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "serial": {
                                    "description": "Серийный номер диска; совпадает с ключом записи.",
                                    "type": "string"
                                  },
                                  "size": {
                                    "description": "Размер диска в байтах.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "status": {
                                    "description": "Код состояния диска; расшифровка — в методе `pd-status-map`.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "vdev_guid": {
                                    "description": "GUID vdev диска десятичной строкой; `null`, если диск не входит в пул.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "vdev_pool_guid": {
                                    "description": "GUID пула vdev десятичной строкой; `null`, если диск не входит в пул.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "vdev_pool_name": {
                                    "description": "Имя пула по данным самого диска; `null`, если диск не входит в пул.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  }
                                },
                                "required": [
                                  "node_id",
                                  "device_index",
                                  "device",
                                  "model",
                                  "serial",
                                  "size",
                                  "status",
                                  "online_in_cluster",
                                  "led_locate",
                                  "led_fault"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24201,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "View Physical Disks"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-24201": "pd-list вызван при выключенной функции управления физическими дисками.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-pools-status": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Disk Info\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25003` | Can't get cluster node list; can't query pools status | Не удалось получить список узлов кластера, поэтому состояние пулов не опрошено. |\n| `-25002` | Physical disc management was not enabled | pd-pools-status вызван при выключенной функции управления физическими дисками. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-pools-status",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-pools-status",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "items": {
                                "additionalProperties": true,
                                "description": "Запись о пуле или его устройстве в том виде, в каком её отдаёт узел: набор\nполей задаётся узлом. Вместо записей узла приходит одна запись из полей\n`depth` (`0`), `health` (`UNAVAILABLE`) и `node`, если включённый узел не в\nсостоянии `ONLINE`, запрос к нему не удалось отправить, узел не ответил\nвовремя или вернул ошибку. Выключенные узлы в ответ не попадают.",
                                "properties": {
                                  "depth": {
                                    "description": "Уровень вложенности записи; `0` — запись верхнего уровня.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "health": {
                                    "description": "Состояние; `UNAVAILABLE` — узел недоступен.",
                                    "type": "string"
                                  },
                                  "node": {
                                    "description": "Идентификатор узла; есть только у записей верхнего уровня.",
                                    "format": "int32",
                                    "type": "integer"
                                  }
                                },
                                "required": [
                                  "depth",
                                  "health"
                                ],
                                "type": "object"
                              },
                              "type": "array"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25003,
                        -25002,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "View Disk Info"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25003": "Не удалось получить список узлов кластера, поэтому состояние пулов не опрошено.",
          "-25002": "pd-pools-status вызван при выключенной функции управления физическими дисками.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-replace": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Replace Physical Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24908` | Donor disk state is unknown | Состояние диска-донора не удалось определить. |\n| `-24907` | Donor disk is not free (must be spare or unused) | Диск-донор занят: для замены годится только резервный (spare) или неиспользуемый диск. |\n| `-24906` | A replace is already in progress on this pool | На этом пуле уже идёт замена диска. |\n| `-24905` | Replaced device and donor device must differ | Заменяемый диск и диск-донор совпадают. |\n| `-24904` | Bad value of param new_device | Параметр new_device метода pd-replace отсутствует или имеет недопустимое значение. |\n| `-24903` | Empty param device | Параметр device метода pd-replace пустой. |\n| `-24902` | Unknown or empty pool | Пул не указан или неизвестен. |\n| `-24901` | Physical disc management was not enabled | pd-replace вызван при выключенной функции управления физическими дисками. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-replace",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-replace",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "device": {
                        "type": "string"
                      },
                      "new_device": {
                        "type": "string"
                      },
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "pool": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "device",
                      "new_device",
                      "node_id",
                      "pool"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24908,
                        -24907,
                        -24906,
                        -24905,
                        -24904,
                        -24903,
                        -24902,
                        -24901,
                        -9707,
                        -9706,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "Replace Physical Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-24908": "Состояние диска-донора не удалось определить.",
          "-24907": "Диск-донор занят: для замены годится только резервный (spare) или неиспользуемый диск.",
          "-24906": "На этом пуле уже идёт замена диска.",
          "-24905": "Заменяемый диск и диск-донор совпадают.",
          "-24904": "Параметр new_device метода pd-replace отсутствует или имеет недопустимое значение.",
          "-24903": "Параметр device метода pd-replace пустой.",
          "-24902": "Пул не указан или неизвестен.",
          "-24901": "pd-replace вызван при выключенной функции управления физическими дисками.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-spare": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Spare Physical Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24504` | Another destructive operation is already in progress on this disk | На диске уже идёт другая разрушающая операция. |\n| `-24503` | Disk is already marked as spare | Диск уже отмечен как резервный (spare). |\n| `-24502` | Bad value of param path | Параметр path метода pd-spare отсутствует или имеет недопустимое значение. |\n| `-24501` | Physical disc management was not enabled | pd-spare вызван при выключенной функции управления физическими дисками. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-spare",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-spare",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "force": {
                        "default": false,
                        "type": "boolean"
                      },
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "path": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "node_id",
                      "path"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24504,
                        -24503,
                        -24502,
                        -24501,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "Spare Physical Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-24504": "На диске уже идёт другая разрушающая операция.",
          "-24503": "Диск уже отмечен как резервный (spare).",
          "-24502": "Параметр path метода pd-spare отсутствует или имеет недопустимое значение.",
          "-24501": "pd-spare вызван при выключенной функции управления физическими дисками.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-status-map": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View PD Status Map\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-33` | Unable to obtain pd map data | Справочник статусов физических дисков в БД пуст — карта статусов недоступна. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-status-map",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-status-map",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -33
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "View PD Status Map"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-33": "Справочник статусов физических дисков в БД пуст — карта статусов недоступна."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-unspare": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Spare Physical Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24603` | Disk is not marked as spare |  |\n| `-24602` | Bad value of param path | Параметр path метода pd-unspare отсутствует или имеет недопустимое значение. |\n| `-24601` | Physical disc management was not enabled | pd-unspare вызван при выключенной функции управления физическими дисками. |\n| `-24504` | Another destructive operation is already in progress on this disk | На диске уже идёт другая разрушающая операция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-unspare",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-unspare",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "path": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "node_id",
                      "path"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24603,
                        -24602,
                        -24601,
                        -24504,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "Spare Physical Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-24602": "Параметр path метода pd-unspare отсутствует или имеет недопустимое значение.",
          "-24601": "pd-unspare вызван при выключенной функции управления физическими дисками.",
          "-24504": "На диске уже идёт другая разрушающая операция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-unuse": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Use Physical Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24804` | Bad value of param serial_number | Параметр serial_number метода pd-unuse имеет недопустимое значение. |\n| `-24803` | Bad value of param path | Параметр path метода pd-unuse имеет недопустимое значение. |\n| `-24802` | Neither 'serial_number' nor 'path' param had been set | pd-unuse вызван без serial_number и без path: диск не указан. |\n| `-24801` | Physical disc management was not enabled | pd-unuse вызван при выключенной функции управления физическими дисками. |\n| `-24504` | Another destructive operation is already in progress on this disk | На диске уже идёт другая разрушающая операция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-unuse",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-unuse",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "path": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "serial_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "node_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24804,
                        -24803,
                        -24802,
                        -24801,
                        -24504,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "Use Physical Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-24804": "Параметр serial_number метода pd-unuse имеет недопустимое значение.",
          "-24803": "Параметр path метода pd-unuse имеет недопустимое значение.",
          "-24802": "pd-unuse вызван без serial_number и без path: диск не указан.",
          "-24801": "pd-unuse вызван при выключенной функции управления физическими дисками.",
          "-24504": "На диске уже идёт другая разрушающая операция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pd-use": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Use Physical Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24707` | Requested serial_number is already in use by another disk | Запрошенный serial_number уже присвоен другому диску. |\n| `-24706` | Disk is already online in the cluster | Диск уже используется кластером. |\n| `-24705` | Bad value of param target | Параметр target метода pd-use имеет недопустимое значение. |\n| `-24704` | Bad value of param serial_number | Параметр serial_number метода pd-use имеет недопустимое значение. |\n| `-24703` | Bad value of param blocksize | Параметр blocksize метода pd-use имеет недопустимое значение. |\n| `-24702` | Bad value of param path | Параметр path метода pd-use отсутствует или имеет недопустимое значение. |\n| `-24701` | Physical disc management was not enabled | pd-use вызван при выключенной функции управления физическими дисками. |\n| `-24504` | Another destructive operation is already in progress on this disk | На диске уже идёт другая разрушающая операция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pd-use",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pd-use",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "blocksize": {
                        "default": 4096,
                        "format": "int32",
                        "type": "integer"
                      },
                      "node_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "path": {
                        "type": "string"
                      },
                      "serial_number": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "target": true
                    },
                    "required": [
                      "node_id",
                      "path"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24707,
                        -24706,
                        -24705,
                        -24704,
                        -24703,
                        -24702,
                        -24701,
                        -24504,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pd"
        ],
        "x-access": [
          "Use Physical Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-24707": "Запрошенный serial_number уже присвоен другому диску.",
          "-24706": "Диск уже используется кластером.",
          "-24705": "Параметр target метода pd-use имеет недопустимое значение.",
          "-24704": "Параметр serial_number метода pd-use имеет недопустимое значение.",
          "-24703": "Параметр blocksize метода pd-use имеет недопустимое значение.",
          "-24702": "Параметр path метода pd-use отсутствует или имеет недопустимое значение.",
          "-24701": "pd-use вызван при выключенной функции управления физическими дисками.",
          "-24504": "На диске уже идёт другая разрушающая операция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pool-map": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Pool Map\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-21` | *динамическое сообщение* | pool-map: ошибка БД при построении карты пулов. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pool-map",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pool-map",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "items": {
                                  "properties": {
                                    "capacity_pct": {
                                      "description": "Заполненность пула в процентах.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "consuming": {
                                      "description": "Пул в состоянии consuming: на нём можно размещать ВМ.",
                                      "type": "boolean"
                                    },
                                    "guid": {
                                      "description": "Идентификатор (GUID) пула — десятичное число строкой.",
                                      "type": "string"
                                    },
                                    "health": {
                                      "description": "Состояние пула; `null`, если неизвестно.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "name": {
                                      "description": "Имя пула; `null`, если не задано.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "node_id": {
                                      "description": "Узел, которому сейчас принадлежит пул; `0`, если узел не задан.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "size": {
                                      "description": "Сырой объём пула в байтах, включая избыточность; `0`, если неизвестен.",
                                      "format": "int64",
                                      "type": "integer"
                                    }
                                  },
                                  "required": [
                                    "guid",
                                    "capacity_pct",
                                    "size",
                                    "node_id",
                                    "consuming"
                                  ],
                                  "type": "object"
                                },
                                "type": "array"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -21
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pool"
        ],
        "x-access": [
          "View Pool Map"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-21": "pool-map: ошибка БД при построении карты пулов."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pool-map-by-guid": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Pool Map By GUID\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-29` | *динамическое сообщение* | pool-map-by-guid: ошибка БД при выборке карты пула по guid. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pool-map-by-guid",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pool-map-by-guid",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "properties": {
                                  "capacity_pct": {
                                    "description": "Заполненность пула в процентах; `0`, если данных о заполненности нет.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "consuming": {
                                    "description": "Пул в состоянии consuming (на нём можно размещать ВМ): `1` — да, `0` — нет.",
                                    "format": "uint8",
                                    "maximum": 255,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "free": {
                                    "description": "Свободный объём в байтах; `0`, если данных нет.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "guid": {
                                    "description": "Идентификатор (GUID) пула — десятичное число строкой; совпадает с ключом.",
                                    "type": "string"
                                  },
                                  "health": {
                                    "description": "Состояние пула; `null`, если неизвестно.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "lif": {
                                    "description": "IP-адрес логического интерфейса (LIF) пула; `null`, если не задан.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "name": {
                                    "description": "Имя пула; `null`, если не задано.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "nodeid": {
                                    "description": "Узел, которому сейчас принадлежит пул; `0`, если узел не задан.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "provisioned": {
                                    "description": "Суммарный заданный размер томов на пуле в байтах.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "provisioned_pct": {
                                    "description": "Выделенный объём томов в процентах от полезного объёма пула.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "resilvering": {
                                    "description": "Идёт восстановление избыточности (resilver): `1` — да, `0` — нет.",
                                    "format": "uint8",
                                    "maximum": 255,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "scrubbing": {
                                    "description": "Идёт проверка целостности (scrub): `1` — да, `0` — нет.",
                                    "format": "uint8",
                                    "maximum": 255,
                                    "minimum": 0,
                                    "type": "integer"
                                  },
                                  "size": {
                                    "description": "Полезный объём пула в байтах (без дисков избыточности); `0`, если неизвестен.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "size_raw": {
                                    "description": "Сырой объём пула в байтах, включая избыточность; `0`, если неизвестен.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "used": {
                                    "description": "Занятый объём в байтах; `0`, если данных нет.",
                                    "format": "int64",
                                    "type": "integer"
                                  }
                                },
                                "required": [
                                  "guid",
                                  "capacity_pct",
                                  "size",
                                  "size_raw",
                                  "used",
                                  "free",
                                  "nodeid",
                                  "provisioned",
                                  "provisioned_pct",
                                  "consuming",
                                  "scrubbing",
                                  "resilvering"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -29
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pool"
        ],
        "x-access": [
          "View Pool Map By GUID"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-29": "pool-map-by-guid: ошибка БД при выборке карты пула по guid."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pools-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Storage Pool Details\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-34` | nodeId is not present in the cluster | pools-get: нода с указанным nodeId отсутствует в кластере. |\n| `-33` | *динамическое сообщение* | pools-get: не удалось переслать запрос на ноду (опрос статусов нод, сериализация или публикация в очередь). |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pools-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pools-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "format": "int32",
                        "maximum": 99,
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "node_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": true,
                              "description": "Пул хранения в том виде, в каком его вернул агент хранилища узла: поля агента передаются\nбез изменений. Если пул есть в учёте кластера, к ним добавлены три признака.",
                              "properties": {
                                "consuming": {
                                  "description": "Пул используется кластером: `1` — да, `0` — нет. Ключ есть, только если пул найден в\nучёте кластера.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "resilvering": {
                                  "description": "Пул восстанавливает избыточность (resilver): `1` — да, `0` — нет. Ключ есть, только если\nпул найден в учёте кластера.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "scrubbing": {
                                  "description": "На пуле идёт проверка данных (scrub): `1` — да, `0` — нет. Ключ есть, только если пул\nнайден в учёте кластера.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -34,
                        -33
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pools"
        ],
        "x-access": [
          "View Storage Pool Details"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-34": "pools-get: нода с указанным nodeId отсутствует в кластере.",
          "-33": "pools-get: не удалось переслать запрос на ноду (опрос статусов нод, сериализация или публикация в очередь)."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#pools-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Storage Pools\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-24` | nodeId is not present in the cluster | pools-list: нода с указанным nodeId отсутствует в кластере. |\n| `-23` | *динамическое сообщение* | pools-list: не удалось переслать запрос на ноду (опрос статусов нод, сериализация или публикация в очередь). |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "pools-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "pools-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "format": "int32",
                        "maximum": 99,
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "node_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -24,
                        -23
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "pools"
        ],
        "x-access": [
          "View Storage Pools"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-24": "pools-list: нода с указанным nodeId отсутствует в кластере.",
          "-23": "pools-list: не удалось переслать запрос на ноду (опрос статусов нод, сериализация или публикация в очередь)."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#portgroup-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Port Groups\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25001` | Network ports management was not enabled | portgroup-list вызван при выключенной функции управления сетевыми портами. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "portgroup-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "portgroup-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "default": null,
                        "format": "int32",
                        "maximum": 99,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "additionalProperties": {
                                  "description": "Группа портов (агрегация каналов) узла.",
                                  "properties": {
                                    "node_id": {
                                      "description": "Узел группы портов.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "portgroup_hash": {
                                      "description": "Политика хеширования трафика, например `L2,L3,L4`; `null`, если не задана.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "portgroup_last_seen": {
                                      "description": "Время последних данных о группе, Unix-время в секундах; 0, если неизвестно.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "portgroup_mac": {
                                      "description": "MAC-адрес группы портов.",
                                      "type": "string"
                                    },
                                    "portgroup_name": {
                                      "description": "Имя группы портов; совпадает с ключом записи.",
                                      "type": "string"
                                    },
                                    "portgroup_proto": {
                                      "description": "Протокол агрегации, например `lacp`; `null`, если не задан.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "portgroup_status": {
                                      "description": "Код состояния группы портов.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "ports": {
                                      "additionalProperties": {
                                        "description": "Порт в группе портов.",
                                        "properties": {
                                          "port_flag_active": {
                                            "description": "Флаг LACP ACTIVE; `null`, если неизвестен.",
                                            "type": [
                                              "boolean",
                                              "null"
                                            ]
                                          },
                                          "port_flag_collecting": {
                                            "description": "Флаг LACP COLLECTING; `null`, если неизвестен.",
                                            "type": [
                                              "boolean",
                                              "null"
                                            ]
                                          },
                                          "port_flag_distributing": {
                                            "description": "Флаг LACP DISTRIBUTING; `null`, если неизвестен.",
                                            "type": [
                                              "boolean",
                                              "null"
                                            ]
                                          },
                                          "port_flags_change_TS": {
                                            "description": "Время последнего обновления флагов порта в группе, Unix-время в секундах;\n0, если неизвестно.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "port_last_seen": {
                                            "description": "Время последних данных о физическом порте, Unix-время в секундах; 0, если\nнеизвестно.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "port_media": {
                                            "description": "Тип среды порта, например `10Gbase-T`; `null`, если неизвестен.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "port_name": {
                                            "description": "Имя порта; совпадает с ключом записи.",
                                            "type": "string"
                                          },
                                          "port_status": {
                                            "description": "Код состояния физического порта.",
                                            "format": "int32",
                                            "type": "integer"
                                          }
                                        },
                                        "required": [
                                          "port_name",
                                          "port_status",
                                          "port_last_seen",
                                          "port_flags_change_TS"
                                        ],
                                        "type": "object"
                                      },
                                      "description": "Порты группы: ключ — имя порта.",
                                      "type": "object"
                                    }
                                  },
                                  "required": [
                                    "node_id",
                                    "portgroup_name",
                                    "portgroup_mac",
                                    "portgroup_status",
                                    "portgroup_last_seen",
                                    "ports"
                                  ],
                                  "type": "object"
                                },
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "portgroup"
        ],
        "x-access": [
          "View Port Groups"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25001": "portgroup-list вызван при выключенной функции управления сетевыми портами.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#privilege-categories": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Privilege Categories, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "privilege-categories",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "privilege-categories",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "privilege"
        ],
        "x-access": [
          "View Privilege Categories",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#privilege-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Privileges, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "privilege-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "privilege-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Привилегия.",
                                "properties": {
                                  "category_id": {
                                    "description": "Идентификатор категории привилегии; `null`, если категория не задана.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "id": {
                                    "description": "Идентификатор привилегии; его передают в `privileges` метода `role-create`.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "methods": {
                                    "description": "Имена методов API, доступ к которым даёт привилегия; пустой массив, если их нет.",
                                    "items": {
                                      "type": "string"
                                    },
                                    "type": "array"
                                  },
                                  "name": {
                                    "description": "Название привилегии.",
                                    "type": "string"
                                  },
                                  "scope_ids": {
                                    "description": "Идентификаторы атрибутов области действия, применимых к привилегии;\nпустой массив, если их нет.",
                                    "items": {
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "id",
                                  "name",
                                  "scope_ids",
                                  "methods"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "privilege"
        ],
        "x-access": [
          "View Privileges",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#privilege-scopes": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Privilege Scopes, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "privilege-scopes",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "privilege-scopes",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Атрибут области действия привилегий.",
                                "properties": {
                                  "id": {
                                    "description": "Идентификатор атрибута; совпадает с ключом объекта.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "name": {
                                    "description": "Название атрибута.",
                                    "type": "string"
                                  },
                                  "self_referencing": {
                                    "description": "Значение атрибута — идентификатор самого пользователя, подставляется\nавтоматически (как у атрибута «создатель»); в областях действия роли\nтакой атрибут указать нельзя.",
                                    "type": "boolean"
                                  }
                                },
                                "required": [
                                  "id",
                                  "name",
                                  "self_referencing"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "privilege"
        ],
        "x-access": [
          "View Privilege Scopes",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#role-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create Role\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22506` | Role with name '{0}' already exists | Роль с таким именем уже существует. |\n| `-22505` | Self-referencing scope cannot be assigned to custom role: {0} | Кастомной роли пытаются назначить самоссылающийся scope. |\n| `-22504` | Scope ID not found: {0} | Указанный в role-create scope не существует. |\n| `-22503` | Privilege ID not found: {0} | Указанная в role-create привилегия не существует. |\n| `-22502` | Role management privileges cannot be assigned to custom roles | Кастомной роли пытаются выдать привилегии управления ролями. |\n| `-22501` | Privileges list must not be empty | В role-create передан пустой список привилегий. |\n| `-22500` | Access denied: only Cluster Master can create roles | role-create вызван не Cluster Master'ом. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "role-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "role-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "name": {
                        "maxLength": 64,
                        "minLength": 1,
                        "type": "string"
                      },
                      "privileges": {
                        "items": {
                          "format": "int32",
                          "type": "integer"
                        },
                        "type": "array"
                      },
                      "scope_ids": {
                        "items": {
                          "format": "int32",
                          "type": "integer"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "name",
                      "privileges"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор созданной роли; его передают в `role-get`, `role-set` и `role-delete`.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22506,
                        -22505,
                        -22504,
                        -22503,
                        -22502,
                        -22501,
                        -22500,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "role"
        ],
        "x-access": [
          "Create Role"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22506": "Роль с таким именем уже существует.",
          "-22505": "Кастомной роли пытаются назначить самоссылающийся scope.",
          "-22504": "Указанный в role-create scope не существует.",
          "-22503": "Указанная в role-create привилегия не существует.",
          "-22502": "Кастомной роли пытаются выдать привилегии управления ролями.",
          "-22501": "В role-create передан пустой список привилегий.",
          "-22500": "role-create вызван не Cluster Master'ом.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#role-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete Role\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22522` | Role not found: {0} | Удаляемая роль не найдена. |\n| `-22521` | Cannot delete a fixed role | Попытка удалить фиксированную (встроенную) роль. |\n| `-22520` | Access denied: only Cluster Master can delete roles | role-delete вызван не Cluster Master'ом. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "role-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "role-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: успешный ответ не несёт данных.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22522,
                        -22521,
                        -22520,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "role"
        ],
        "x-access": [
          "Delete Role"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22522": "Удаляемая роль не найдена.",
          "-22521": "Попытка удалить фиксированную (встроенную) роль.",
          "-22520": "role-delete вызван не Cluster Master'ом.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#role-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Role Details\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22531` | Access denied: only Cluster Master can view role details | Сведения о роли доступны только Cluster Master. |\n| `-22530` | Role not found: {0} | Запрошенная в role-get роль не найдена. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "role-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "role-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Роль с привилегиями и областью действия.",
                              "properties": {
                                "created_ts": {
                                  "description": "Время создания роли, Unix-время в секундах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "creator": {
                                  "description": "Идентификатор пользователя, создавшего роль; `null`, если создатель не записан\n(так у встроенных ролей).",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "id": {
                                  "description": "Идентификатор роли.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "modified_ts": {
                                  "description": "Время последнего изменения роли, Unix-время в секундах; `null`, если роль не изменяли.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "name": {
                                  "description": "Название роли.",
                                  "type": "string"
                                },
                                "privileges": {
                                  "description": "Идентификаторы привилегий роли по возрастанию (как в `privilege-list`).",
                                  "items": {
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "type": "array"
                                },
                                "scope_ids": {
                                  "description": "Идентификаторы атрибутов области действия роли по возрастанию (как в\n`scope_ids` метода `role-create`); пустой массив, если область не задана.",
                                  "items": {
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "id",
                                "name",
                                "created_ts",
                                "privileges",
                                "scope_ids"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22531,
                        -22530,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "role"
        ],
        "x-access": [
          "View Role Details"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22531": "Сведения о роли доступны только Cluster Master.",
          "-22530": "Запрошенная в role-get роль не найдена.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#role-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Roles, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "role-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "role-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Роль кластера.",
                                "properties": {
                                  "created_ts": {
                                    "description": "Время создания роли, Unix-время в секундах.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "creator": {
                                    "description": "Идентификатор пользователя, создавшего роль; `null`, если создатель не записан\n(так у встроенных ролей).",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "id": {
                                    "description": "Идентификатор роли.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "modified_ts": {
                                    "description": "Время последнего изменения роли, Unix-время в секундах; `null`, если роль не изменяли.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "name": {
                                    "description": "Название роли.",
                                    "type": "string"
                                  },
                                  "scope_ids": {
                                    "description": "Идентификаторы атрибутов области действия роли (как в `scope_ids`\nметода `role-create`); пустой массив, если область не задана.",
                                    "items": {
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "id",
                                  "name",
                                  "scope_ids",
                                  "created_ts"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "role"
        ],
        "x-access": [
          "View Roles",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#role-privilege-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Role Privileges, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "role-privilege-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "role-privilege-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "items": {
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "type": "array"
                              },
                              "description": "Привилегии ролей: ключ — идентификатор роли строкой, значение —\nидентификаторы привилегий роли (как в `privilege-list`). Роли без привилегий\nв выдачу не попадают.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "role"
        ],
        "x-access": [
          "View Role Privileges",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#role-scopes": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Role Scopes\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22540` | Role not found: {0} | Запрошенная в role-scopes роль не найдена. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "role-scopes",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "role-scopes",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Атрибут области действия, заданный роли.",
                                "properties": {
                                  "id": {
                                    "description": "Идентификатор атрибута области действия (как в `scope_ids` метода `role-create`).",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "name": {
                                    "description": "Название атрибута.",
                                    "type": "string"
                                  },
                                  "self_referencing": {
                                    "description": "Признак самоссылающегося атрибута. Такие атрибуты в выдачу не попадают,\nпоэтому здесь всегда `false`.",
                                    "type": "boolean"
                                  }
                                },
                                "required": [
                                  "id",
                                  "name",
                                  "self_referencing"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22540,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "role"
        ],
        "x-access": [
          "View Role Scopes"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22540": "Запрошенная в role-scopes роль не найдена.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#role-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Edit Role\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22517` | Self-referencing scope cannot be assigned to custom role: {0} | Кастомной роли пытаются назначить самоссылающийся scope. |\n| `-22516` | Role with name '{0}' already exists | Новое имя роли уже занято другой ролью. |\n| `-22515` | Scope ID not found: {0} | Указанный в role-set scope не существует. |\n| `-22514` | Privilege ID not found: {0} | Указанная в role-set привилегия не существует. |\n| `-22513` | Role management privileges cannot be assigned to custom roles | Кастомной роли пытаются выдать привилегии управления ролями. |\n| `-22512` | Role not found: {0} | Редактируемая роль не найдена. |\n| `-22511` | Cannot modify a fixed role | Попытка изменить фиксированную (встроенную) роль. |\n| `-22510` | Access denied: only Cluster Master can edit roles | role-set вызван не Cluster Master'ом. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "role-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "role-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "add_privileges": {
                        "items": {
                          "format": "int32",
                          "type": "integer"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "name": {
                        "maxLength": 64,
                        "minLength": 1,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "remove_privileges": {
                        "items": {
                          "format": "int32",
                          "type": "integer"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "scope_ids": {
                        "items": {
                          "format": "int32",
                          "type": "integer"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: успешный ответ не несёт данных.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22517,
                        -22516,
                        -22515,
                        -22514,
                        -22513,
                        -22512,
                        -22511,
                        -22510,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "role"
        ],
        "x-access": [
          "Edit Role"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22517": "Кастомной роли пытаются назначить самоссылающийся scope.",
          "-22516": "Новое имя роли уже занято другой ролью.",
          "-22515": "Указанный в role-set scope не существует.",
          "-22514": "Указанная в role-set привилегия не существует.",
          "-22513": "Кастомной роли пытаются выдать привилегии управления ролями.",
          "-22512": "Редактируемая роль не найдена.",
          "-22511": "Попытка изменить фиксированную (встроенную) роль.",
          "-22510": "role-set вызван не Cluster Master'ом.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-acknowledge": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Acknowledge Security Event\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-acknowledge",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-acknowledge",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "event_ids": {
                        "default": null,
                        "items": {
                          "format": "int64",
                          "type": "integer"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "acknowledged": {
                                  "description": "Число событий, отмеченных прочитанными этим запросом.",
                                  "format": "uint64",
                                  "minimum": 0,
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "acknowledged"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24000,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "Acknowledge Security Event"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-archive-export": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Export Security Archive\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24008` | Archive not ready: still being created | Архив ещё создаётся (есть временный файл) — экспорт пока невозможен. |\n| `-24004` | Archive integrity violation: SHA-256 mismatch | SHA-256 файла архива не совпадает с сохранённой контрольной суммой. |\n| `-24003` | Archive not found | Файл архива с указанным именем отсутствует на диске. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-archive-export",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-archive-export",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "filename": {
                        "maxLength": 128,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "filename"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Сведения о файле архива журнала безопасности. Через HTTPS-точку входа клиент\nполучает сам файл (CSV, сжатый gzip), а не этот объект.",
                              "properties": {
                                "auto_delete": {
                                  "description": "Удаляется ли файл после выдачи клиенту; у архива всегда `false`.",
                                  "type": "boolean"
                                },
                                "checksum": {
                                  "description": "Контрольная сумма файла в виде `sha256:<hex>`, посчитанная при выдаче.",
                                  "type": "string"
                                },
                                "content_type": {
                                  "description": "Тип содержимого файла.",
                                  "oneOf": [
                                    {
                                      "const": "application/gzip",
                                      "description": "Архив CSV, сжатый gzip.",
                                      "type": "string"
                                    }
                                  ]
                                },
                                "file_path": {
                                  "description": "Путь к файлу архива на сервере.",
                                  "type": "string"
                                },
                                "file_size": {
                                  "description": "Размер файла в байтах.",
                                  "format": "uint64",
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "filename": {
                                  "description": "Имя файла архива — значение параметра `filename`.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "file_path",
                                "file_size",
                                "checksum",
                                "content_type",
                                "filename",
                                "auto_delete"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24008,
                        -24004,
                        -24003,
                        -24000,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "Export Security Archive"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24008": "Архив ещё создаётся (есть временный файл) — экспорт пока невозможен.",
          "-24004": "SHA-256 файла архива не совпадает с сохранённой контрольной суммой.",
          "-24003": "Файл архива с указанным именем отсутствует на диске.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-archive-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Archive\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-archive-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-archive-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Архивы журнала безопасности, по убыванию имени файла; пустой массив, если каталог архивов\nнедоступен.",
                              "items": {
                                "description": "Файл архива.",
                                "properties": {
                                  "archived_at": {
                                    "description": "Время создания архива, секунды Unix; `null`, если архив не закончен.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "completed": {
                                    "description": "Архив закончен.",
                                    "type": "boolean"
                                  },
                                  "filename": {
                                    "description": "Имя файла архива; у незаконченного — имя, которое файл получит по завершении.",
                                    "type": "string"
                                  },
                                  "records": {
                                    "description": "Число записей журнала в архиве; `null`, если архив не закончен или число не записано.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "sha256": {
                                    "description": "Контрольная сумма SHA-256 архива; `null`, если архив не закончен или сумма не записана.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "size": {
                                    "description": "Размер файла, байт.",
                                    "format": "uint64",
                                    "minimum": 0,
                                    "type": "integer"
                                  }
                                },
                                "required": [
                                  "filename",
                                  "size",
                                  "completed"
                                ],
                                "type": "object"
                              },
                              "type": "array"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24000,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Archive"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-archive-settings-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Archive Settings\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-archive-settings-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-archive-settings-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "security_log_archive_enabled": {
                                  "description": "Архивирование журнала безопасности включено.",
                                  "type": "boolean"
                                },
                                "security_log_archive_path": {
                                  "description": "Каталог архивов журнала безопасности.",
                                  "type": "string"
                                },
                                "security_log_archive_target_size": {
                                  "description": "Размер файла архива журнала безопасности, байт.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "security_log_disk_alert_threshold": {
                                  "description": "Порог свободного места на диске для предупреждения, байт.",
                                  "format": "int64",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "security_log_archive_target_size",
                                "security_log_archive_path",
                                "security_log_archive_enabled",
                                "security_log_disk_alert_threshold"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24000,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Archive Settings"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-archive-settings-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Edit Security Archive Settings\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24007` | Invalid setting value: {0} | Передано недопустимое значение настройки уведомлений о событиях безопасности. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-archive-settings-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-archive-settings-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "security_log_archive_enabled": {
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "security_log_archive_path": {
                        "maxLength": 256,
                        "minLength": 1,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "security_log_archive_target_size": {
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "security_log_disk_alert_threshold": {
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "security_log_archive_enabled": {
                                  "description": "Архивирование журнала безопасности включено.",
                                  "type": "boolean"
                                },
                                "security_log_archive_path": {
                                  "description": "Каталог архивов журнала безопасности.",
                                  "type": "string"
                                },
                                "security_log_archive_target_size": {
                                  "description": "Размер файла архива журнала безопасности, байт.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "security_log_disk_alert_threshold": {
                                  "description": "Порог свободного места на диске для предупреждения, байт.",
                                  "format": "int64",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "security_log_archive_target_size",
                                "security_log_archive_path",
                                "security_log_archive_enabled",
                                "security_log_disk_alert_threshold"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24007,
                        -24000,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "Edit Security Archive Settings"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24007": "Передано недопустимое значение настройки уведомлений о событиях безопасности.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-critical-count": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Log\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-critical-count",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-critical-count",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "count": {
                                  "description": "Число непрочитанных критичных событий.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "latest_id": {
                                  "description": "Идентификатор самого свежего непрочитанного критичного события — его можно открыть\nметодом `security-event-get`; `null`, если таких событий нет.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "count"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24000,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Log"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-export": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Export Security Log\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24002` | File write error: {0} | Не удалось записать файл экспорта на диск. |\n| `-24001` | Export limit exceeded: {0} | security-event-export: выборка превышает лимит записей, а параметр limit не задан. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-export",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-export",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "acknowledged": {
                        "description": "Фильтр по ознакомлению текущего пользователя (совпадение с экраном списка).",
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "category": {
                        "default": null,
                        "items": {
                          "description": "Категория события — маппинг на `security.event_category.code`.\n`Serialize` нужен `validator` (кастомный валидатор массива добавляет значение в ошибку).",
                          "enum": [
                            "auth",
                            "vm",
                            "config",
                            "role",
                            "system",
                            "integrity"
                          ],
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "date_from": {
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "date_to": {
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "event_type": {
                        "description": "Код типа события безопасности в dotted-нотации (например auth.login.success); полный перечень — таблица security.security_event_type",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "format": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "limit": {
                        "format": "int64",
                        "maximum": 100000,
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "offset": {
                        "format": "int64",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "result": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "severity": {
                        "default": null,
                        "items": {
                          "description": "Уровень важности — маппинг на `security.event_severity.code`.\n`Serialize` нужен `validator` (кастомный валидатор массива добавляет значение в ошибку).",
                          "enum": [
                            "emergency",
                            "alert",
                            "critical",
                            "error",
                            "warning",
                            "notice",
                            "info"
                          ],
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "user_id": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Сведения о файле выгрузки. Через HTTPS-точку входа клиент получает сам файл\n(CSV или JSON), а не этот объект.",
                              "properties": {
                                "auto_delete": {
                                  "description": "Файл удаляется после выдачи клиенту; у этого метода всегда `true`.",
                                  "type": "boolean"
                                },
                                "checksum": {
                                  "description": "Контрольная сумма файла в виде `sha256:<hex>`.",
                                  "type": "string"
                                },
                                "content_type": {
                                  "description": "Тип содержимого файла.",
                                  "oneOf": [
                                    {
                                      "const": "text/csv",
                                      "description": "Выгрузка в CSV (по умолчанию).",
                                      "type": "string"
                                    },
                                    {
                                      "const": "application/json",
                                      "description": "Выгрузка в JSON (`format` = `json`).",
                                      "type": "string"
                                    }
                                  ]
                                },
                                "file_path": {
                                  "description": "Путь к файлу выгрузки на сервере.",
                                  "type": "string"
                                },
                                "file_size": {
                                  "description": "Размер файла в байтах.",
                                  "format": "uint64",
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "filename": {
                                  "description": "Имя файла для сохранения: `security-events-<ГГГГ-ММ-ДД>.csv` или `.json`.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "file_path",
                                "file_size",
                                "checksum",
                                "content_type",
                                "filename",
                                "auto_delete"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24002,
                        -24001,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "Export Security Log"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24002": "Не удалось записать файл экспорта на диск.",
          "-24001": "security-event-export: выборка превышает лимит записей, а параметр limit не задан.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Log\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-11202` | Security event not found | Событие безопасности с указанным идентификатором не найдено. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int64",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Запись журнала событий безопасности.",
                              "properties": {
                                "acknowledged": {
                                  "description": "Текущий пользователь ознакомился с событием (метод `security-event-acknowledge`).",
                                  "type": "boolean"
                                },
                                "details": {
                                  "description": "Дополнительные сведения о событии; набор ключей зависит от типа события\nи задаётся тем, кто записал событие. `null`, если сведений нет."
                                },
                                "event_type": {
                                  "description": "Код типа события; справочник типов — метод `security-event-types`.",
                                  "type": "string"
                                },
                                "event_uuid": {
                                  "description": "Уникальный идентификатор события.",
                                  "format": "uuid",
                                  "type": "string"
                                },
                                "id": {
                                  "description": "Номер записи в журнале; его передают в `id` метода `security-event-get`.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "object_id": {
                                  "description": "Идентификатор объекта действия; `null`, если событие не относится к объекту.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "object_name": {
                                  "description": "Имя объекта действия; `null`, если не известно.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "object_type": {
                                  "description": "Тип объекта действия; `null`, если событие не относится к объекту.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "record_hash": {
                                  "description": "Хеш SHA-256 записи в цепочке целостности журнала; `null`, если у записи его нет.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "remote_ip": {
                                  "description": "IP-адрес, с которого выполнено действие, с длиной префикса (например,\n`10.0.0.1/32`); `null`, если не известен.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "request_id": {
                                  "description": "Идентификатор запроса API, в котором записано событие; `null`, если\nсобытие не связано с запросом.",
                                  "format": "uuid",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "result": {
                                  "description": "Итог действия: `success` или `failure`.",
                                  "type": "string"
                                },
                                "ts": {
                                  "description": "Время события, Unix-время в секундах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "user_id": {
                                  "description": "Идентификатор пользователя, выполнившего действие; `null`, если не определён.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "username": {
                                  "description": "Имя пользователя, выполнившего действие; `null`, если не определено.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "event_uuid",
                                "ts",
                                "event_type",
                                "result",
                                "details",
                                "acknowledged"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -11202,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Log"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-11202": "Событие безопасности с указанным идентификатором не найдено.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Log\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "acknowledged": {
                        "description": "Фильтр по ознакомлению текущего пользователя: `false` — только непрочитанные.",
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "category": {
                        "default": null,
                        "items": {
                          "description": "Категория события — маппинг на `security.event_category.code`.\n`Serialize` нужен `validator` (кастомный валидатор массива добавляет значение в ошибку).",
                          "enum": [
                            "auth",
                            "vm",
                            "config",
                            "role",
                            "system",
                            "integrity"
                          ],
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "date_from": {
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "date_to": {
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "event_type": {
                        "description": "Код типа события безопасности в dotted-нотации (например auth.login.success); полный перечень — таблица security.security_event_type",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "limit": {
                        "format": "int64",
                        "maximum": 10000,
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "objective": {
                        "default": null
                      },
                      "offset": {
                        "format": "int64",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "result": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "severity": {
                        "default": null,
                        "items": {
                          "description": "Уровень важности — маппинг на `security.event_severity.code`.\n`Serialize` нужен `validator` (кастомный валидатор массива добавляет значение в ошибку).",
                          "enum": [
                            "emergency",
                            "alert",
                            "critical",
                            "error",
                            "warning",
                            "notice",
                            "info"
                          ],
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "sort_order": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "user_id": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "count": {
                                  "description": "Сколько событий в `events`.",
                                  "format": "uint64",
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "events": {
                                  "anyOf": [
                                    {
                                      "items": {
                                        "description": "Запись журнала событий безопасности.",
                                        "properties": {
                                          "acknowledged": {
                                            "description": "Текущий пользователь ознакомился с событием (метод `security-event-acknowledge`).",
                                            "type": "boolean"
                                          },
                                          "details": {
                                            "description": "Дополнительные сведения о событии; набор ключей зависит от типа события\nи задаётся тем, кто записал событие. `null`, если сведений нет."
                                          },
                                          "event_type": {
                                            "description": "Код типа события; справочник типов — метод `security-event-types`.",
                                            "type": "string"
                                          },
                                          "event_uuid": {
                                            "description": "Уникальный идентификатор события.",
                                            "format": "uuid",
                                            "type": "string"
                                          },
                                          "id": {
                                            "description": "Номер записи в журнале; его передают в `id` метода `security-event-get`.",
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          "object_id": {
                                            "description": "Идентификатор объекта действия; `null`, если событие не относится к объекту.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "object_name": {
                                            "description": "Имя объекта действия; `null`, если не известно.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "object_type": {
                                            "description": "Тип объекта действия; `null`, если событие не относится к объекту.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "record_hash": {
                                            "description": "Хеш SHA-256 записи в цепочке целостности журнала; `null`, если у записи его нет.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "remote_ip": {
                                            "description": "IP-адрес, с которого выполнено действие, с длиной префикса (например,\n`10.0.0.1/32`); `null`, если не известен.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "request_id": {
                                            "description": "Идентификатор запроса API, в котором записано событие; `null`, если\nсобытие не связано с запросом.",
                                            "format": "uuid",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "result": {
                                            "description": "Итог действия: `success` или `failure`.",
                                            "type": "string"
                                          },
                                          "ts": {
                                            "description": "Время события, Unix-время в секундах.",
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          "user_id": {
                                            "description": "Идентификатор пользователя, выполнившего действие; `null`, если не определён.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "username": {
                                            "description": "Имя пользователя, выполнившего действие; `null`, если не определено.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "event_uuid",
                                          "ts",
                                          "event_type",
                                          "result",
                                          "details",
                                          "acknowledged"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "array"
                                    },
                                    {
                                      "additionalProperties": {
                                        "description": "Запись журнала событий безопасности.",
                                        "properties": {
                                          "acknowledged": {
                                            "description": "Текущий пользователь ознакомился с событием (метод `security-event-acknowledge`).",
                                            "type": "boolean"
                                          },
                                          "details": {
                                            "description": "Дополнительные сведения о событии; набор ключей зависит от типа события\nи задаётся тем, кто записал событие. `null`, если сведений нет."
                                          },
                                          "event_type": {
                                            "description": "Код типа события; справочник типов — метод `security-event-types`.",
                                            "type": "string"
                                          },
                                          "event_uuid": {
                                            "description": "Уникальный идентификатор события.",
                                            "format": "uuid",
                                            "type": "string"
                                          },
                                          "id": {
                                            "description": "Номер записи в журнале; его передают в `id` метода `security-event-get`.",
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          "object_id": {
                                            "description": "Идентификатор объекта действия; `null`, если событие не относится к объекту.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "object_name": {
                                            "description": "Имя объекта действия; `null`, если не известно.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "object_type": {
                                            "description": "Тип объекта действия; `null`, если событие не относится к объекту.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "record_hash": {
                                            "description": "Хеш SHA-256 записи в цепочке целостности журнала; `null`, если у записи его нет.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "remote_ip": {
                                            "description": "IP-адрес, с которого выполнено действие, с длиной префикса (например,\n`10.0.0.1/32`); `null`, если не известен.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "request_id": {
                                            "description": "Идентификатор запроса API, в котором записано событие; `null`, если\nсобытие не связано с запросом.",
                                            "format": "uuid",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          },
                                          "result": {
                                            "description": "Итог действия: `success` или `failure`.",
                                            "type": "string"
                                          },
                                          "ts": {
                                            "description": "Время события, Unix-время в секундах.",
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          "user_id": {
                                            "description": "Идентификатор пользователя, выполнившего действие; `null`, если не определён.",
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          "username": {
                                            "description": "Имя пользователя, выполнившего действие; `null`, если не определено.",
                                            "type": [
                                              "string",
                                              "null"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "event_uuid",
                                          "ts",
                                          "event_type",
                                          "result",
                                          "details",
                                          "acknowledged"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "object"
                                    }
                                  ],
                                  "description": "События страницы: массив, а с параметром `objective` — объект с ключом —\n`id` события строкой."
                                },
                                "total_count": {
                                  "description": "Сколько всего событий подходит под фильтры, без учёта `limit` и `offset`.",
                                  "format": "uint64",
                                  "minimum": 0,
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "events",
                                "total_count",
                                "count"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Log"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-log-status": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Log\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-log-status",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-log-status",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "details": {
                        "default": null,
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "verification_id": {
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Состояние проверки.",
                                  "properties": {
                                    "broken_id": {
                                      "description": "Идентификатор первой записи с нарушенной цепочкой; `null`, если нарушений нет.",
                                      "format": "int64",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "checked_records": {
                                      "description": "Число уже проверенных записей; у идущей проверки — текущее.",
                                      "format": "int64",
                                      "type": "integer"
                                    },
                                    "chunk_size": {
                                      "description": "Число записей на один обработчик.",
                                      "format": "int64",
                                      "type": "integer"
                                    },
                                    "completed_ts": {
                                      "description": "Время завершения, секунды Unix; `null`, пока проверка не завершена.",
                                      "format": "int64",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "initiator": {
                                      "description": "Пользователь, запустивший проверку; `null`, если проверку запустила система.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "num_workers": {
                                      "description": "Число параллельных обработчиков проверки.",
                                      "format": "int16",
                                      "maximum": 32767,
                                      "minimum": -32768,
                                      "type": "integer"
                                    },
                                    "progress_pct": {
                                      "description": "Процент выполнения, 0–100.",
                                      "format": "double",
                                      "type": "number"
                                    },
                                    "started_ts": {
                                      "description": "Время запуска, секунды Unix.",
                                      "format": "int64",
                                      "type": "integer"
                                    },
                                    "status": {
                                      "description": "Статус проверки, код из словаря `security-verification-statuses`.",
                                      "format": "int16",
                                      "maximum": 32767,
                                      "minimum": -32768,
                                      "type": "integer"
                                    },
                                    "total_records": {
                                      "description": "Число записей журнала в проверке.",
                                      "format": "int64",
                                      "type": "integer"
                                    },
                                    "verification_id": {
                                      "description": "Идентификатор проверки.",
                                      "format": "int64",
                                      "type": "integer"
                                    },
                                    "workers": {
                                      "description": "Обработчики идущей проверки. Ключ есть только у идущей проверки, запрошенной с\n`details: true`.",
                                      "items": {
                                        "description": "Обработчик проверки.",
                                        "properties": {
                                          "checked_records": {
                                            "description": "Число уже проверенных записей диапазона.",
                                            "format": "uint64",
                                            "minimum": 0,
                                            "type": "integer"
                                          },
                                          "id": {
                                            "description": "Номер обработчика.",
                                            "format": "uint16",
                                            "maximum": 65535,
                                            "minimum": 0,
                                            "type": "integer"
                                          },
                                          "id_from": {
                                            "description": "Первый идентификатор записи диапазона обработчика.",
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          "id_to": {
                                            "description": "Последний идентификатор записи диапазона обработчика.",
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          "progress_pct": {
                                            "description": "Процент выполнения диапазона, 0–100.",
                                            "format": "double",
                                            "type": "number"
                                          },
                                          "records": {
                                            "description": "Число записей в диапазоне.",
                                            "format": "uint64",
                                            "minimum": 0,
                                            "type": "integer"
                                          },
                                          "status": {
                                            "description": "Статус обработчика, код из словаря `security-verification-statuses`.",
                                            "format": "int16",
                                            "maximum": 32767,
                                            "minimum": -32768,
                                            "type": "integer"
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "status",
                                          "id_from",
                                          "id_to",
                                          "records",
                                          "checked_records",
                                          "progress_pct"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "array"
                                    }
                                  },
                                  "required": [
                                    "verification_id",
                                    "status",
                                    "started_ts",
                                    "total_records",
                                    "checked_records",
                                    "progress_pct",
                                    "num_workers",
                                    "chunk_size"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "description": "Проверка ещё не запускалась.",
                                  "properties": {
                                    "status": {
                                      "description": "Статус проверки: `1` — не запускалась (словарь `security-verification-statuses`).",
                                      "format": "int16",
                                      "maximum": 32767,
                                      "minimum": -32768,
                                      "type": "integer"
                                    }
                                  },
                                  "required": [
                                    "status"
                                  ],
                                  "type": "object"
                                }
                              ],
                              "description": "Проверка целостности журнала безопасности: полное состояние проверки либо только статус,\nесли проверка не запускалась ни разу."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Log"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-log-verify": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Verify Security Log\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-11201` | Verification already running | Проверка целостности журнала уже запущена и ещё не завершилась. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-log-verify",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-log-verify",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "chunk_size": {
                                  "description": "Число записей на один обработчик.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "num_workers": {
                                  "description": "Число параллельных обработчиков проверки.",
                                  "format": "int16",
                                  "maximum": 32767,
                                  "minimum": -32768,
                                  "type": "integer"
                                },
                                "status": {
                                  "description": "Статус проверки, код из словаря `security-verification-statuses`: `2` — запущена,\n`3` — завершена сразу (журнал пуст).",
                                  "format": "int16",
                                  "maximum": 32767,
                                  "minimum": -32768,
                                  "type": "integer"
                                },
                                "total_records": {
                                  "description": "Число записей журнала в проверке.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "verification_id": {
                                  "description": "Идентификатор запущенной проверки — по нему ход проверки запрашивают методом\n`security-event-log-status`; `null`, если журнал пуст и проверять нечего.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "status",
                                "total_records",
                                "num_workers",
                                "chunk_size"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -11201,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "Verify Security Log"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-11201": "Проверка целостности журнала уже запущена и ещё не завершилась.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-notify-settings-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Notify Settings\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-notify-settings-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-notify-settings-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "enabled": {
                                  "description": "Рассылка уведомлений о событиях журнала безопасности по почте включена.",
                                  "type": "boolean"
                                },
                                "min_severity": {
                                  "description": "Минимальный уровень важности события для рассылки: `emergency`, `alert`, `critical`,\n`error`, `warning`, `notice` или `info`.",
                                  "type": "string"
                                },
                                "recipients": {
                                  "description": "Адреса получателей; пустой массив, если не заданы.",
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "enabled",
                                "recipients",
                                "min_severity"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24000,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Notify Settings"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-notify-settings-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Edit Security Notify Settings\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24007` | Invalid setting value: {0} | Передано недопустимое значение настройки уведомлений о событиях безопасности. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-notify-settings-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-notify-settings-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "enabled": {
                        "type": [
                          "boolean",
                          "null"
                        ]
                      },
                      "min_severity": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "recipients": {
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "enabled": {
                                  "description": "Рассылка уведомлений о событиях журнала безопасности по почте включена.",
                                  "type": "boolean"
                                },
                                "min_severity": {
                                  "description": "Минимальный уровень важности события для рассылки: `emergency`, `alert`, `critical`,\n`error`, `warning`, `notice` или `info`.",
                                  "type": "string"
                                },
                                "recipients": {
                                  "description": "Адреса получателей; пустой массив, если не заданы.",
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "enabled",
                                "recipients",
                                "min_severity"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24007,
                        -24000,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "Edit Security Notify Settings"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24007": "Передано недопустимое значение настройки уведомлений о событиях безопасности.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-event-types": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Log\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-event-types",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-event-types",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "items": {
                                    "description": "Тип события журнала безопасности.",
                                    "properties": {
                                      "category_id": {
                                        "description": "Идентификатор категории события.",
                                        "format": "int16",
                                        "maximum": 32767,
                                        "minimum": -32768,
                                        "type": "integer"
                                      },
                                      "code": {
                                        "description": "Код типа события; его передают в `event_type` метода `security-event-list`.",
                                        "type": "string"
                                      },
                                      "name_ru": {
                                        "description": "Название типа события на русском.",
                                        "type": "string"
                                      },
                                      "severity_id": {
                                        "description": "Идентификатор уровня важности события.",
                                        "format": "int16",
                                        "maximum": 32767,
                                        "minimum": -32768,
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "code",
                                      "category_id",
                                      "name_ru",
                                      "severity_id"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "Тип события журнала безопасности.",
                                    "properties": {
                                      "category_id": {
                                        "description": "Идентификатор категории события.",
                                        "format": "int16",
                                        "maximum": 32767,
                                        "minimum": -32768,
                                        "type": "integer"
                                      },
                                      "code": {
                                        "description": "Код типа события; его передают в `event_type` метода `security-event-list`.",
                                        "type": "string"
                                      },
                                      "name_ru": {
                                        "description": "Название типа события на русском.",
                                        "type": "string"
                                      },
                                      "severity_id": {
                                        "description": "Идентификатор уровня важности события.",
                                        "format": "int16",
                                        "maximum": 32767,
                                        "minimum": -32768,
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "code",
                                      "category_id",
                                      "name_ru",
                                      "severity_id"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "object"
                                }
                              ],
                              "description": "Справочник типов событий журнала безопасности: массив, а с параметром\n`objective` — объект с ключом — кодом типа."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Log"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#security-verification-statuses": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Security Log\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "security-verification-statuses",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "security-verification-statuses",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "verification": {
                                  "additionalProperties": {
                                    "type": "string"
                                  },
                                  "description": "Статусы проверки целостности журнала: ключ — код статуса строкой, значение — название.",
                                  "type": "object"
                                },
                                "worker": {
                                  "additionalProperties": {
                                    "type": "string"
                                  },
                                  "description": "Статусы обработчика проверки: ключ — код статуса строкой, значение — название.",
                                  "type": "object"
                                }
                              },
                              "required": [
                                "verification",
                                "worker"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "security"
        ],
        "x-access": [
          "View Security Log"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-feature": "security_log",
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#snapshot-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View All Snapshots\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-4107` | Unable to retreive snapshots list: {0} | Ошибка запроса к БД при получении списка snapshot'ов. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "snapshot-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "snapshot-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "additionalProperties": {
                                  "properties": {
                                    "creation_time": {
                                      "description": "Время создания снимка, Unix-время в секундах.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "guid": {
                                      "description": "Идентификатор снимка (GUID ZFS, десятичное число строкой); совпадает с ключом.",
                                      "type": "string"
                                    },
                                    "name": {
                                      "description": "Имя снимка без имени датасета (часть после `@`); пустая строка, если имя неизвестно.",
                                      "type": "string"
                                    },
                                    "size": {
                                      "description": "Размер тома снимка в байтах; `null`, если не известен.",
                                      "format": "int64",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "guid",
                                    "name",
                                    "creation_time"
                                  ],
                                  "type": "object"
                                },
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -4107,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "snapshot"
        ],
        "x-access": [
          "View All Snapshots"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-4107": "Ошибка запроса к БД при получении списка snapshot'ов.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#task": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Own User Task, View Any Task\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-9705` | Database error: {0} | Ошибка БД при выборке задачи. |\n| `-9704` | Task not found | Задача с указанным id не найдена. |\n| `-9701` | No params at all | Запрос задачи пришёл без объекта params (или params = null). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "task",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "task",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "uuid",
                        "type": "string"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "method": {
                                  "description": "Имя вызванного метода.",
                                  "type": "string"
                                },
                                "replied": {
                                  "description": "Ответ на запрос готов: `1` — да, `0` — нет.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "reply_time": {
                                  "description": "Время готовности ответа, Unix-время в секундах; `null`, пока ответа нет.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "request": {
                                  "description": "Исходный запрос JSON-RPC целиком (`id`, `jsonrpc`, `method`, `params`) в том\nвиде, в каком он сохранён; `null`, если не сохранён."
                                },
                                "response": {
                                  "description": "Ответ JSON-RPC на запрос целиком (с `result` или `error`); форма задаётся\nвызванным методом. `null`, пока ответа нет."
                                },
                                "sync_req": {
                                  "description": "Запрос был синхронным: `1` — да, `0` — нет.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "ts": {
                                  "description": "Время приёма запроса, Unix-время в секундах.",
                                  "format": "int64",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "sync_req",
                                "ts",
                                "method",
                                "replied"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -9705,
                        -9704,
                        -9701,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "task"
        ],
        "x-access": [
          "View Own User Task",
          "View Any Task"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-9705": "Ошибка БД при выборке задачи.",
          "-9704": "Задача с указанным id не найдена.",
          "-9701": "Запрос задачи пришёл без объекта params (или params = null).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create User\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-22516` | User with name '{0}' exists already | Пользователь с таким именем уже существует. |\n| `-22515` | Failed to add an user | Вставка нового пользователя в БД не вернула корректный ID записи. |\n| `-22505` | Bad name param value | Имя пользователя в user-create не прошло валидацию. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "fullname": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Созданный пользователь.",
                              "properties": {
                                "id": {
                                  "description": "Идентификатор нового пользователя.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -22516,
                        -22515,
                        -22505,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Create User"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-22516": "Пользователь с таким именем уже существует.",
          "-22515": "Вставка нового пользователя в БД не вернула корректный ID записи.",
          "-22505": "Имя пользователя в user-create не прошло валидацию.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete User\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-22610` | Build-it users removal prohibited | Попытка удалить встроенного (built-in) пользователя. |\n| `-22606` | Specified user was not found | Удаляемый пользователь не найден в БД. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: пользователь удалён.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -22610,
                        -22606,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Delete User"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-22610": "Попытка удалить встроенного (built-in) пользователя.",
          "-22606": "Удаляемый пользователь не найден в БД.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View User Details\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22805` | Bad id param value | Значение параметра id в user-get не приводится к числу. |\n| `-22804` | Empty param id | Параметр id в user-get равен null. |\n| `-22803` | No param id | Запрос user-get пришёл без params или без параметра id. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Пользователь. Если активного пользователя с таким `id` нет, ответ всё равно\nуспешный: `id` из запроса, `failed_login_attempts` = 0, остальные поля — `null`.",
                              "properties": {
                                "created": {
                                  "description": "Время создания учётной записи, Unix-время в секундах; `null`, если пользователь не найден.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "failed_login_attempts": {
                                  "description": "Счётчик неудачных попыток входа.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "first_failed_at": {
                                  "description": "Время первой неудачной попытки входа, Unix-время в секундах; `null`, если счётчик пуст.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "fullname": {
                                  "description": "Полное имя; `null`, если не задано или пользователь не найден.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "id": {
                                  "description": "Идентификатор пользователя.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "locked_until": {
                                  "description": "Время окончания блокировки, Unix-время в секундах; `null`, если учётная запись не заблокирована.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "modified": {
                                  "description": "Время последнего изменения, Unix-время в секундах; `null`, если учётную запись не изменяли.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "must_change_password": {
                                  "description": "Пользователь должен сменить пароль при следующем входе; `null`, если пользователь не найден.",
                                  "type": [
                                    "boolean",
                                    "null"
                                  ]
                                },
                                "name": {
                                  "description": "Логин пользователя; `null`, если не задан или пользователь не найден.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "failed_login_attempts"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22805,
                        -22804,
                        -22803,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "View User Details"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22805": "Значение параметра id в user-get не приводится к числу.",
          "-22804": "Параметр id в user-get равен null.",
          "-22803": "Запрос user-get пришёл без params или без параметра id.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Users\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Активный пользователь кластера.",
                                "properties": {
                                  "created": {
                                    "description": "Время создания учётной записи, Unix-время в секундах.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "failed_login_attempts": {
                                    "description": "Счётчик неудачных попыток входа.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "first_failed_at": {
                                    "description": "Время первой неудачной попытки входа, Unix-время в секундах; `null`, если счётчик пуст.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "fullname": {
                                    "description": "Полное имя; `null`, если не задано.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "id": {
                                    "description": "Идентификатор пользователя.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "locked_until": {
                                    "description": "Время окончания блокировки, Unix-время в секундах; `null`, если учётная запись не заблокирована.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "modified": {
                                    "description": "Время последнего изменения, Unix-время в секундах; `null`, если учётную запись не изменяли.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "must_change_password": {
                                    "description": "Пользователь должен сменить пароль при следующем входе.",
                                    "type": "boolean"
                                  },
                                  "name": {
                                    "description": "Логин пользователя; `null`, если не задан.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  }
                                },
                                "required": [
                                  "id",
                                  "created",
                                  "failed_login_attempts",
                                  "must_change_password"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "View Users"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-params-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Get User Params\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-29030` | No user with ID=={0} | Пользователь текущей сессии не найден при чтении user-params. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-params-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-params-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": true,
                              "description": "Параметры интерфейса вызывающего пользователя — объект, сохранённый методом\n`user-params-set`, отдаётся как есть: набор ключей задаёт клиент. `null`,\nесли параметры ещё не сохранялись.",
                              "type": [
                                "object",
                                "null"
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -29030,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Get User Params"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-29030": "Пользователь текущей сессии не найден при чтении user-params.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-params-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set User Params\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-39030` | No user with ID=={0} | Пользователь текущей сессии не найден при записи user-params. |\n| `-34000` | No params at all | Запрос user-params-set пришёл без объекта params. |\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-params-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-params-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: параметры пользователя сохранены.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -39030,
                        -34000,
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Set User Params"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-39030": "Пользователь текущей сессии не найден при записи user-params.",
          "-34000": "Запрос user-params-set пришёл без объекта params.",
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-remote-add": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Add User Remote\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24715` | Invalid CIDR syntax of remote param | СУБД отклонила значение remote как некорректный CIDR при добавлении. |\n| `-24714` | User ID=={0} has remote {1} already | Такой remote у пользователя уже добавлен. |\n| `-24713` | remote param has mask out of range 8..32 | Маска CIDR в параметре remote вне диапазона 8..32. |\n| `-24712` | remote param value is not CIDR | Значение параметра remote в user-remote-add не является CIDR. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-remote-add",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-remote-add",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "remote": {
                        "type": "string"
                      },
                      "user_id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "remote",
                      "user_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: сеть добавлена в разрешённые адреса входа пользователя.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24715,
                        -24714,
                        -24713,
                        -24712,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Add User Remote"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24715": "СУБД отклонила значение remote как некорректный CIDR при добавлении.",
          "-24714": "Такой remote у пользователя уже добавлен.",
          "-24713": "Маска CIDR в параметре remote вне диапазона 8..32.",
          "-24712": "Значение параметра remote в user-remote-add не является CIDR.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-remote-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete User Remote\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24815` | Invalid CIDR syntax of remote param | СУБД отклонила значение remote как некорректный CIDR при удалении. |\n| `-24814` | User ID=={0} has no remote {1} | У пользователя нет указанного remote — удалять нечего. |\n| `-24812` | remote param value is not CIDR | Значение параметра remote в user-remote-delete не является CIDR. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-remote-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-remote-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "remote": {
                        "type": "string"
                      },
                      "user_id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "remote",
                      "user_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: сеть удалена из разрешённых адресов входа пользователя.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24815,
                        -24814,
                        -24812,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Delete User Remote"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24815": "СУБД отклонила значение remote как некорректный CIDR при удалении.",
          "-24814": "У пользователя нет указанного remote — удалять нечего.",
          "-24812": "Значение параметра remote в user-remote-delete не является CIDR.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-remote-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View User Remotes\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24506` | user_id param value is not numeric | Значение параметра user_id в user-remote-list не является числом. |\n| `-24505` | user_id param is NULL | Параметр user_id в user-remote-list равен null. |\n| `-24504` | user_id param has been ommited | Запрос user-remote-list пришёл без params или без параметра user_id. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-remote-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-remote-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "user_id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "user_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Сети, с адресов которых пользователю разрешён вход, в нотации CIDR\n(`10.0.0.0/24`, `2001:db8::/32`), по возрастанию. Пустой массив — вход\nразрешён с любого адреса.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24506,
                        -24505,
                        -24504,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "View User Remotes"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24506": "Значение параметра user_id в user-remote-list не является числом.",
          "-24505": "Параметр user_id в user-remote-list равен null.",
          "-24504": "Запрос user-remote-list пришёл без params или без параметра user_id.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-role": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View User Role\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-role",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-role",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "UID": {
                                  "description": "Идентификатор вызывающего пользователя.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "authmap": {
                                  "description": "Роли вызывающего пользователя с привязкой к ДЦ.",
                                  "items": {
                                    "description": "Роль пользователя в ДЦ.",
                                    "properties": {
                                      "GI_account": {
                                        "description": "Пользователь — учётная запись федерации (GI).",
                                        "type": "boolean"
                                      },
                                      "role_id": {
                                        "description": "Идентификатор роли.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "role_name": {
                                        "description": "Название роли.",
                                        "type": "string"
                                      },
                                      "vdc_id": {
                                        "description": "Идентификатор ДЦ; `0` — роль без привязки к ДЦ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vdc_name": {
                                        "description": "Название ДЦ; пустая строка у роли без привязки к ДЦ.",
                                        "type": "string"
                                      }
                                    },
                                    "required": [
                                      "vdc_id",
                                      "vdc_name",
                                      "role_id",
                                      "role_name",
                                      "GI_account"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "UID",
                                "authmap"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "View User Role"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-role-assign": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Assign User Role\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-22340` | Role id=={0} doesn't exist | Роли с указанным id нет. |\n| `-22330` | User id=={0} doesn't exist | Пользователь с указанным ID не найден при назначении роли. |\n| `-22321` | User ID=={0} has been assigned role ID=={1} at vDC ID=={2} already | Такое назначение роли пользователю в этом vDC уже существует. |\n| `-22320` | Build-it users management prohibited | Попытка назначить роль встроенному (built-in) пользователю. |\n| `-22310` | vdc_id is required for scoped role ID=={0} | Роль скоупная, а параметр vdc_id в user-role-assign не передан. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-role-assign",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-role-assign",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "role_id": {
                        "default": 0,
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "user_id": {
                        "default": 0,
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: роль назначена пользователю.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -22340,
                        -22330,
                        -22321,
                        -22320,
                        -22310,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Assign User Role"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-22340": "Роли с указанным id нет.",
          "-22330": "Пользователь с указанным ID не найден при назначении роли.",
          "-22321": "Такое назначение роли пользователю в этом vDC уже существует.",
          "-22320": "Попытка назначить роль встроенному (built-in) пользователю.",
          "-22310": "Роль скоупная, а параметр vdc_id в user-role-assign не передан.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-role-deassign": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Deassign User Role\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-22430` | User id=={0} doesn't exist | Пользователь с указанным ID не найден при снятии роли. |\n| `-22421` | Build-it users management prohibited | Попытка снять роль со встроенного (built-in) пользователя. |\n| `-22420` | Specified user has no specified role assignment | У пользователя нет указанного назначения роли. |\n| `-22410` | vdc_id is required for scoped role ID=={0} | Роль скоупная, а параметр vdc_id в user-role-deassign не передан. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-role-deassign",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-role-deassign",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "role_id": {
                        "default": 0,
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "user_id": {
                        "default": 0,
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: роль снята с пользователя.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -22430,
                        -22421,
                        -22420,
                        -22410,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Deassign User Role"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-22430": "Пользователь с указанным ID не найден при снятии роли.",
          "-22421": "Попытка снять роль со встроенного (built-in) пользователя.",
          "-22420": "У пользователя нет указанного назначения роли.",
          "-22410": "Роль скоупная, а параметр vdc_id в user-role-deassign не передан.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-roles": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Own User Roles, View Any User Roles, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22205` | Bad id param value | Значение параметра user_id в user-roles не приводится к числу. |\n| `-22204` | Empty param user_id | Параметр user_id в user-roles равен null. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-roles",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-roles",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "q": {
                        "default": false,
                        "type": "boolean"
                      },
                      "user_id": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "additionalProperties": {
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "description": "Без ключа `q` в параметрах: одна роль на ДЦ — идентификатор роли; если\nролей в ДЦ несколько, отдаётся роль с наибольшим идентификатором.",
                                  "type": "object"
                                },
                                {
                                  "additionalProperties": {
                                    "items": {
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "type": "array"
                                  },
                                  "description": "С ключом `q` в параметрах (значение не важно): все роли ДЦ — массив\nидентификаторов ролей по возрастанию.",
                                  "type": "object"
                                }
                              ],
                              "description": "Роли пользователя по ДЦ: ключ — идентификатор ДЦ строкой; `\"0\"` — роли без\nпривязки к ДЦ."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22205,
                        -22204,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "View Own User Roles",
          "View Any User Roles",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22205": "Значение параметра user_id в user-roles не приводится к числу.",
          "-22204": "Параметр user_id в user-roles равен null.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-roles-map": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Roles Map\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-roles-map",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-roles-map",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Активный пользователь с его ролями.",
                                "properties": {
                                  "created": {
                                    "description": "Время создания пользователя, Unix-время в секундах.",
                                    "format": "int64",
                                    "type": "integer"
                                  },
                                  "fullname": {
                                    "description": "Полное имя пользователя; `null`, если не задано.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "modified": {
                                    "description": "Время последнего изменения пользователя, Unix-время в секундах; `null`,\nесли пользователя не изменяли.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "name": {
                                    "description": "Логин пользователя; `null`, если не задан.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "roles": {
                                    "description": "Роли пользователя с привязкой к ДЦ.",
                                    "items": {
                                      "description": "Роль пользователя в ДЦ.",
                                      "properties": {
                                        "role_id": {
                                          "description": "Идентификатор роли.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "role_name": {
                                          "description": "Название роли.",
                                          "type": "string"
                                        },
                                        "vdc_id": {
                                          "description": "Идентификатор ДЦ; `0` — роль без привязки к ДЦ.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "vdc_name": {
                                          "description": "Название ДЦ; пустая строка у роли без привязки к ДЦ.",
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "role_id",
                                        "vdc_id",
                                        "role_name",
                                        "vdc_name"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "created",
                                  "roles"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "View Roles Map"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-roles-v2": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Own User Roles, View Any User Roles, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22205` | Bad id param value | Значение параметра user_id в user-roles не приводится к числу. |\n| `-22204` | Empty param user_id | Параметр user_id в user-roles равен null. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-roles-v2",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-roles-v2",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "user_id": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Роль пользователя.",
                                "properties": {
                                  "scopes": {
                                    "additionalProperties": {
                                      "description": "Область действия роли по одному атрибуту.",
                                      "properties": {
                                        "ids": {
                                          "description": "Назначенные пользователю значения атрибута (например, идентификаторы ДЦ)\nпо возрастанию; пустой массив, если `is_global` равно `true`.",
                                          "items": {
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "type": "array"
                                        },
                                        "is_global": {
                                          "description": "Область не ограничена: пользователю не назначено ни одного значения\nэтого атрибута.",
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "is_global",
                                        "ids"
                                      ],
                                      "type": "object"
                                    },
                                    "description": "Области действия роли: ключ — идентификатор атрибута области строкой\n(перечень — метод `privilege-scopes`); пустой объект, если у роли нет\nобластей действия.",
                                    "type": "object"
                                  }
                                },
                                "required": [
                                  "scopes"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22205,
                        -22204,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "View Own User Roles",
          "View Any User Roles",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22205": "Значение параметра user_id в user-roles не приводится к числу.",
          "-22204": "Параметр user_id в user-roles равен null.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-set-password": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set Own User Password, Set Any User Password\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-22737` | New password must differ from the current one | Новый пароль совпадает с текущим. |\n| `-22735` | Password must not match the username | Новый пароль совпадает с именем пользователя. |\n| `-22734` | Password must contain at least one special character | В новом пароле нет ни одного специального символа. |\n| `-22733` | Password must contain at least one digit | В новом пароле нет ни одной цифры. |\n| `-22732` | Password must contain at least one lowercase letter | В новом пароле нет ни одной строчной буквы. |\n| `-22731` | Password must contain at least one uppercase letter | В новом пароле нет ни одной заглавной буквы. |\n| `-22730` | Password is too short | Новый пароль короче минимально допустимой длины. |\n| `-22720` | Specified user was not found | Пользователь, которому меняют пароль, не найден. |\n| `-22712` | Bad password | Параметр password в user-set-password не прошёл валидацию. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-127` | Temp token allows changing own password only | С временным токеном можно менять только собственный пароль (id не совпадает с uid). |\n| `-125` | Temp token expired or invalid | Временный токен смены пароля истёк или не найден. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-set-password",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-set-password",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "password": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "password"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: пароль изменён.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -22737,
                        -22735,
                        -22734,
                        -22733,
                        -22732,
                        -22731,
                        -22730,
                        -22720,
                        -22712,
                        -403,
                        -127,
                        -125,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Set Own User Password",
          "Set Any User Password"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-22737": "Новый пароль совпадает с текущим.",
          "-22735": "Новый пароль совпадает с именем пользователя.",
          "-22734": "В новом пароле нет ни одного специального символа.",
          "-22733": "В новом пароле нет ни одной цифры.",
          "-22732": "В новом пароле нет ни одной строчной буквы.",
          "-22731": "В новом пароле нет ни одной заглавной буквы.",
          "-22730": "Новый пароль короче минимально допустимой длины.",
          "-22720": "Пользователь, которому меняют пароль, не найден.",
          "-22712": "Параметр password в user-set-password не прошёл валидацию.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-127": "С временным токеном можно менять только собственный пароль (id не совпадает с uid).",
          "-125": "Временный токен смены пароля истёк или не найден.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-unlock": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Unlock User\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-22906` | Specified user was not found | Разблокируемый пользователь не найден. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-unlock",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-unlock",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Разблокированный пользователь.",
                              "properties": {
                                "id": {
                                  "description": "Идентификатор пользователя из запроса.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24000,
                        -22906,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Unlock User"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-22906": "Разблокируемый пользователь не найден.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-vhost-add": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Add User VHost\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24814` | User ID=={0} has vhost {1} already | Такой vhost у пользователя уже добавлен. |\n| `-24812` | vhost param has bad length | Параметр vhost в user-vhost-add не прошёл валидацию длины. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-vhost-add",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-vhost-add",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "user_id": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "vhost": {
                        "maxLength": 512,
                        "minLength": 5,
                        "type": "string"
                      }
                    },
                    "required": [
                      "user_id",
                      "vhost"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: виртуальный хост добавлен пользователю.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24814,
                        -24812,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Add User VHost"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24814": "Такой vhost у пользователя уже добавлен.",
          "-24812": "Параметр vhost в user-vhost-add не прошёл валидацию длины.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-vhost-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete User VHost\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-24914` | User ID=={0} has no vhost {1} | У пользователя нет указанного vhost — удалять нечего. |\n| `-24912` | vhost param has bad length | Параметр vhost в user-vhost-delete не прошёл валидацию длины. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-vhost-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-vhost-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "user_id": {
                        "format": "int32",
                        "type": "integer"
                      },
                      "vhost": {
                        "maxLength": 512,
                        "minLength": 5,
                        "type": "string"
                      }
                    },
                    "required": [
                      "user_id",
                      "vhost"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: виртуальный хост удалён у пользователя.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -24914,
                        -24912,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "Delete User VHost"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-24914": "У пользователя нет указанного vhost — удалять нечего.",
          "-24912": "Параметр vhost в user-vhost-delete не прошёл валидацию длины.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#user-vhost-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View User VHosts\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-29102` | *динамическое сообщение* | Ошибка БД при чтении или обновлении настроек безопасности аутентификации. |\n| `-24606` | user_id param value is not numeric | Значение параметра user_id в user-vhost-list не является числом. |\n| `-24605` | user_id param is NULL | Параметр user_id в user-vhost-list равен null. |\n| `-24604` | user_id param has been ommited | Запрос user-vhost-list пришёл без params или без параметра user_id. |\n| `-24000` | Security log DB error: {0} | Ошибка БД при работе с журналом событий безопасности. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при операции с пользователями или ролями. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "user-vhost-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "user-vhost-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "user_id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "user_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Виртуальные хосты (vhost) пользователя — массив строк, отсортированный\nпо имени; пустой массив, если их нет.",
                              "items": {
                                "type": "string"
                              },
                              "type": "array"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -29102,
                        -24606,
                        -24605,
                        -24604,
                        -24000,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "user"
        ],
        "x-access": [
          "View User VHosts"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-29102": "Ошибка БД при чтении или обновлении настроек безопасности аутентификации.",
          "-24606": "Значение параметра user_id в user-vhost-list не является числом.",
          "-24605": "Параметр user_id в user-vhost-list равен null.",
          "-24604": "Запрос user-vhost-list пришёл без params или без параметра user_id.",
          "-24000": "Ошибка БД при работе с журналом событий безопасности.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при операции с пользователями или ролями."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-assign-network": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Assign vDC Network\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-2122` | Bad network_id param value | Значение параметра network_id в vdc-assign-network не является числом. |\n| `-2121` | Bad vdc_id param value | Значение параметра vdc_id в vdc-assign-network не является числом. |\n| `-2120` | Network id {0} does not exist | Сеть с указанным ID не существует. |\n| `-2109` | *динамическое сообщение* | Ошибка обращения к БД при назначении сети на vDC. |\n| `-2108` | You ain't the creator of network id {0} | Вызывающий пользователь не является создателем сети. |\n| `-2107` | Unknown creator of network id {0} | У сети не указан создатель — принадлежность проверить невозможно. |\n| `-2102` | No params at all | Запрос vdc-assign-network пришёл без объекта params. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-assign-network",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-assign-network",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "network_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "network_id",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: сеть назначена ВЦОД.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -2122,
                        -2121,
                        -2120,
                        -2109,
                        -2108,
                        -2107,
                        -2102,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Assign vDC Network"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-2122": "Значение параметра network_id в vdc-assign-network не является числом.",
          "-2121": "Значение параметра vdc_id в vdc-assign-network не является числом.",
          "-2120": "Сеть с указанным ID не существует.",
          "-2109": "Ошибка обращения к БД при назначении сети на vDC.",
          "-2108": "Вызывающий пользователь не является создателем сети.",
          "-2107": "У сети не указан создатель — принадлежность проверить невозможно.",
          "-2102": "Запрос vdc-assign-network пришёл без объекта params.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create vDC\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-2004` | *динамическое сообщение* | Ошибка БД при создании записи vDC. |\n| `-2002` | No params at all | Запрос vdc-create пришёл без объекта params. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "description": {
                        "maxLength": 1024,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "name": {
                        "maxLength": 255,
                        "minLength": 1,
                        "type": "string"
                      },
                      "quota_cpu_cores": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "quota_cpu_ghz": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "quota_oversubscription_rate_cpu_cores": {
                        "default": null,
                        "format": "double",
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "quota_oversubscription_rate_cpu_ghz": {
                        "default": null,
                        "format": "double",
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "quota_oversubscription_rate_ram": {
                        "default": null,
                        "format": "double",
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "quota_oversubscription_rate_space_gb": {
                        "default": null,
                        "format": "double",
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "quota_oversubscription_rate_space_snapshots": {
                        "default": null,
                        "format": "double",
                        "type": [
                          "number",
                          "null"
                        ]
                      },
                      "quota_ram_gb": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "quota_space_gb": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "quota_space_snapshots": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "vdc_id": {
                                  "description": "Идентификатор созданного ВЦОД.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "vdc_id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -2004,
                        -2002,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Create vDC"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-2004": "Ошибка БД при создании записи vDC.",
          "-2002": "Запрос vdc-create пришёл без объекта params.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-create-volume": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create vDC Volume\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45019` | Invalid volume parameters: {0} | Параметры тома не прошли валидацию (имя, размер и т.п.). |\n| `-45018` | Volume already exists: {0} | Том с таким именем в этом vDC уже существует. |\n| `-45017` | Quota exceeded: requested {requested_gb} GB, available {available_gb} GB | Запрошенный размер тома превышает доступную квоту vDC. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-create-volume",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-create-volume",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "block_size": {
                        "default": null,
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "name": {
                        "pattern": "^[a-z0-9]([a-z0-9.-]{0,61}[a-z0-9])?$",
                        "type": "string"
                      },
                      "size_gb": {
                        "format": "int64",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vdc": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "name",
                      "size_gb",
                      "vdc"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор созданного тома.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45019,
                        -45018,
                        -45017,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Create vDC Volume"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45019": "Параметры тома не прошли валидацию (имя, размер и т.п.).",
          "-45018": "Том с таким именем в этом vDC уже существует.",
          "-45017": "Запрошенный размер тома превышает доступную квоту vDC.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-deassign-network": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Deassign vDC Network\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-2222` | Bad network_id param value | Значение параметра network_id в vdc-deassign-network не является числом. |\n| `-2221` | Bad vdc_id param value | Значение параметра vdc_id в vdc-deassign-network не является числом. |\n| `-2220` | Network id {0} does not exist | Сеть с указанным ID не существует. |\n| `-2219` | *динамическое сообщение* | Ошибка БД при удалении записи о привязке сети к vDC. |\n| `-2218` | You ain't the creator of network id {0} | Вызывающий пользователь не является создателем сети. |\n| `-2217` | Unknown creator of network id {0} | У сети не указан создатель — принадлежность проверить невозможно. |\n| `-2209` | *динамическое сообщение* | Ошибка обращения к БД при проверках перед откреплением сети. |\n| `-2207` | Error upon network ID=={0} deassignment from vDC ID=={1} | Удаление привязки не затронуло ни одной записи — открепление не выполнено. |\n| `-2206` | There are {0} ports assigned to VMs | В сети остались порты, привязанные к VM — сначала освободите их. |\n| `-2203` | No params at all | Запрос vdc-deassign-network пришёл без объекта params. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-deassign-network",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-deassign-network",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "network_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "network_id",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: сеть снята с ВЦОД.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -2222,
                        -2221,
                        -2220,
                        -2219,
                        -2218,
                        -2217,
                        -2209,
                        -2207,
                        -2206,
                        -2203,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Deassign vDC Network"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-2222": "Значение параметра network_id в vdc-deassign-network не является числом.",
          "-2221": "Значение параметра vdc_id в vdc-deassign-network не является числом.",
          "-2220": "Сеть с указанным ID не существует.",
          "-2219": "Ошибка БД при удалении записи о привязке сети к vDC.",
          "-2218": "Вызывающий пользователь не является создателем сети.",
          "-2217": "У сети не указан создатель — принадлежность проверить невозможно.",
          "-2209": "Ошибка обращения к БД при проверках перед откреплением сети.",
          "-2207": "Удаление привязки не затронуло ни одной записи — открепление не выполнено.",
          "-2206": "В сети остались порты, привязанные к VM — сначала освободите их.",
          "-2203": "Запрос vdc-deassign-network пришёл без объекта params.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete vDC\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45021` | Storage teardown failed: {0} | Шаг демонтажа стораджа завершился ошибкой на контроллере. |\n| `-45020` | Storage teardown timed out: {0} | Шаг демонтажа стораджа не завершился за отведённое время. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-3412` | VDC has owned OS images | У VDC есть собственные образы ОС; сначала удалите их. |\n| `-3411` | VDC has assigned volumes | В vDC остались тома Unified Storage — удалите их через vdc-volume-delete. |\n| `-3410` | *динамическое сообщение* | Ошибка БД на одном из шагов vdc-delete (проверки привязок или само удаление). |\n| `-3409` | VDC has assigned datasets | В vDC остались датасеты — удалите или перенесите их. |\n| `-3408` | VDC has assigned VMs | В vDC остались виртуальные машины — удалите или перенесите их. |\n| `-3407` | VDC has assigned ports | За vDC ещё закреплены порты (включая порты VM) — сначала освободите их. |\n| `-3406` | VDC has assigned networks | За vDC ещё закреплены сети — сначала выполните vdc-deassign-network. |\n| `-3405` | VDC not found | Запрошенный на удаление vDC не существует или не виден пользователю. |\n| `-3402` | No params at all | Запрос vdc-delete пришёл без объекта params. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: ВЦОД удалён.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45021,
                        -45020,
                        -45002,
                        -45001,
                        -3412,
                        -3411,
                        -3410,
                        -3409,
                        -3408,
                        -3407,
                        -3406,
                        -3405,
                        -3402,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Delete vDC"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45021": "Шаг демонтажа стораджа завершился ошибкой на контроллере.",
          "-45020": "Шаг демонтажа стораджа не завершился за отведённое время.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-3412": "У VDC есть собственные образы ОС; сначала удалите их.",
          "-3411": "В vDC остались тома Unified Storage — удалите их через vdc-volume-delete.",
          "-3410": "Ошибка БД на одном из шагов vdc-delete (проверки привязок или само удаление).",
          "-3409": "В vDC остались датасеты — удалите или перенесите их.",
          "-3408": "В vDC остались виртуальные машины — удалите или перенесите их.",
          "-3407": "За vDC ещё закреплены порты (включая порты VM) — сначала освободите их.",
          "-3406": "За vDC ещё закреплены сети — сначала выполните vdc-deassign-network.",
          "-3405": "Запрошенный на удаление vDC не существует или не виден пользователю.",
          "-3402": "Запрос vdc-delete пришёл без объекта params.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка БД при выборке списка vDC (vdc-list). |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "items": {
                                    "description": "ВЦОД с квотами и текущим потреблением.",
                                    "properties": {
                                      "cpu_cores_quota_usage": {
                                        "description": "Доля ядер запущенных ВМ от квоты; `null`, если квота не задана, равна нулю\nили запущенных ВМ нет.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "cpu_running": {
                                        "description": "Процессорных ядер у запущенных ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "created": {
                                        "description": "Время создания, Unix-время в секундах.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "description": {
                                        "description": "Описание ВЦОД; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "id": {
                                        "description": "Идентификатор ВЦОД.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "modified": {
                                        "description": "Время последнего изменения, Unix-время в секундах.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Название ВЦОД; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "quota_cpu_cores": {
                                        "description": "Квота процессорных ядер; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "quota_cpu_ghz": {
                                        "description": "Квота процессорной частоты, ГГц; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_cpu_cores": {
                                        "description": "Коэффициент переподписки процессорных ядер; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_cpu_ghz": {
                                        "description": "Коэффициент переподписки процессорной частоты; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_ram": {
                                        "description": "Коэффициент переподписки ОЗУ; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_space_gb": {
                                        "description": "Коэффициент переподписки дискового пространства; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_space_snapshots": {
                                        "description": "Коэффициент переподписки пространства под снимки; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_ram_gb": {
                                        "description": "Квота ОЗУ, ГБ; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "quota_space_gb": {
                                        "description": "Квота дискового пространства, ГБ; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "quota_space_snapshots": {
                                        "description": "Квота пространства под снимки, ГБ; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "ram_quota_usage": {
                                        "description": "Доля ОЗУ запущенных ВМ от квоты; `null`, если квота не задана или равна нулю.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "ram_usage": {
                                        "description": "ОЗУ запущенных ВМ, ГБ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "role_id": {
                                        "description": "Идентификатор роли вызывающего в этом ВЦОД.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "role_name": {
                                        "description": "Название роли вызывающего в этом ВЦОД.",
                                        "type": "string"
                                      },
                                      "space_gb_used": {
                                        "description": "Занято дисками ВМ и томами, ГБ.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "space_quota_usage": {
                                        "description": "Доля занятого пространства от квоты; `null`, если квота не задана, равна\nнулю или ничего не занято.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "vms_running": {
                                        "description": "Запущенных ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vms_total": {
                                        "description": "Всего ВМ в ВЦОД.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "role_id",
                                      "role_name",
                                      "created",
                                      "modified",
                                      "vms_total",
                                      "vms_running",
                                      "ram_usage",
                                      "cpu_running",
                                      "space_gb_used"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "ВЦОД с квотами и текущим потреблением.",
                                    "properties": {
                                      "cpu_cores_quota_usage": {
                                        "description": "Доля ядер запущенных ВМ от квоты; `null`, если квота не задана, равна нулю\nили запущенных ВМ нет.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "cpu_running": {
                                        "description": "Процессорных ядер у запущенных ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "created": {
                                        "description": "Время создания, Unix-время в секундах.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "description": {
                                        "description": "Описание ВЦОД; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "id": {
                                        "description": "Идентификатор ВЦОД.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "modified": {
                                        "description": "Время последнего изменения, Unix-время в секундах.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Название ВЦОД; `null`, если не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "quota_cpu_cores": {
                                        "description": "Квота процессорных ядер; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "quota_cpu_ghz": {
                                        "description": "Квота процессорной частоты, ГГц; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_cpu_cores": {
                                        "description": "Коэффициент переподписки процессорных ядер; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_cpu_ghz": {
                                        "description": "Коэффициент переподписки процессорной частоты; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_ram": {
                                        "description": "Коэффициент переподписки ОЗУ; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_space_gb": {
                                        "description": "Коэффициент переподписки дискового пространства; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_oversubscription_rate_space_snapshots": {
                                        "description": "Коэффициент переподписки пространства под снимки; `null`, если не задан.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "quota_ram_gb": {
                                        "description": "Квота ОЗУ, ГБ; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "quota_space_gb": {
                                        "description": "Квота дискового пространства, ГБ; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "quota_space_snapshots": {
                                        "description": "Квота пространства под снимки, ГБ; `null` — без ограничения.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "ram_quota_usage": {
                                        "description": "Доля ОЗУ запущенных ВМ от квоты; `null`, если квота не задана или равна нулю.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "ram_usage": {
                                        "description": "ОЗУ запущенных ВМ, ГБ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "role_id": {
                                        "description": "Идентификатор роли вызывающего в этом ВЦОД.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "role_name": {
                                        "description": "Название роли вызывающего в этом ВЦОД.",
                                        "type": "string"
                                      },
                                      "space_gb_used": {
                                        "description": "Занято дисками ВМ и томами, ГБ.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "space_quota_usage": {
                                        "description": "Доля занятого пространства от квоты; `null`, если квота не задана, равна\nнулю или ничего не занято.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      },
                                      "vms_running": {
                                        "description": "Запущенных ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vms_total": {
                                        "description": "Всего ВМ в ВЦОД.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "role_id",
                                      "role_name",
                                      "created",
                                      "modified",
                                      "vms_total",
                                      "vms_running",
                                      "ram_usage",
                                      "cpu_running",
                                      "space_gb_used"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "object"
                                }
                              ]
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "View vDC"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка БД при выборке списка vDC (vdc-list)."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-list-volumes": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Volumes\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка БД при выборке томов vDC (vdc-list-volumes). |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-list-volumes",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-list-volumes",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "anyOf": [
                                  {
                                    "description": "SDS-том ВЦОД.",
                                    "properties": {
                                      "block_size": {
                                        "description": "Размер блока тома в байтах; `null`, если не задан.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "id": {
                                        "description": "Идентификатор тома.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "initial_group_id": {
                                        "description": "Имя initiator group раздачи; `null`, если том не роздан или имя не задано.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "lun_id": {
                                        "description": "Номер LUN; `null`, если том не роздан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "mapped": {
                                        "description": "Том роздан по iSCSI.",
                                        "type": "boolean"
                                      },
                                      "name": {
                                        "description": "Название тома.",
                                        "type": "string"
                                      },
                                      "pool": {
                                        "anyOf": [
                                          {
                                            "format": "int64",
                                            "type": "integer"
                                          },
                                          {
                                            "type": "string"
                                          }
                                        ],
                                        "description": "GUID пула."
                                      },
                                      "pool_name": {
                                        "description": "Название пула; `null`, если неизвестно.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "protocol": {
                                        "description": "Протокол раздачи; `null`, если том не роздан.",
                                        "enum": [
                                          "iscsi",
                                          null
                                        ],
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "size_gb": {
                                        "description": "Размер тома в ГиБ, с округлением вниз.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "target_qn": {
                                        "description": "Имя таргета раздачи; `null`, если том не роздан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "vdc": {
                                        "description": "Идентификатор ВЦОД.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "volblocksize": {
                                        "description": "Размер блока тома в байтах; `null`, если не задан.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "volname": {
                                        "description": "Имя тома на пуле.",
                                        "type": "string"
                                      },
                                      "volsize": {
                                        "description": "Размер тома в байтах.",
                                        "format": "int64",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "vdc",
                                      "name",
                                      "volname",
                                      "volsize",
                                      "pool",
                                      "size_gb",
                                      "mapped"
                                    ],
                                    "type": "object"
                                  },
                                  {
                                    "description": "iSCSI-том (датасет, назначенный таргету ВЦОД), без параметра `objective`.",
                                    "properties": {
                                      "guid": {
                                        "description": "GUID датасета строкой.",
                                        "type": "string"
                                      },
                                      "name": {
                                        "description": "Имя датасета.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "parent": {
                                        "anyOf": [
                                          {
                                            "anyOf": [
                                              {
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              {
                                                "type": "string"
                                              }
                                            ],
                                            "description": "Числовой идентификатор (GUID): числом, а если в нём больше 15 цифр — строкой."
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "GUID родительского датасета; `null`, если нет."
                                      },
                                      "pool": {
                                        "anyOf": [
                                          {
                                            "anyOf": [
                                              {
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              {
                                                "type": "string"
                                              }
                                            ],
                                            "description": "Числовой идентификатор (GUID): числом, а если в нём больше 15 цифр — строкой."
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "GUID пула; `null`, если неизвестен."
                                      },
                                      "pool_guid": {
                                        "anyOf": [
                                          {
                                            "anyOf": [
                                              {
                                                "format": "int64",
                                                "type": "integer"
                                              },
                                              {
                                                "type": "string"
                                              }
                                            ],
                                            "description": "Числовой идентификатор (GUID): числом, а если в нём больше 15 цифр — строкой."
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ],
                                        "description": "GUID пула; `null`, если неизвестен."
                                      },
                                      "pool_name": {
                                        "description": "Название пула; `null`, если неизвестно.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "target_qn": {
                                        "description": "Имя таргета.",
                                        "type": "string"
                                      },
                                      "target_type": {
                                        "description": "Тип таргета.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "volsize": {
                                        "description": "Размер тома в байтах.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "volume_type": {
                                        "description": "Тип датасета.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "guid",
                                      "target_qn",
                                      "target_type"
                                    ],
                                    "type": "object"
                                  },
                                  {
                                    "description": "Группа iSCSI-томов одного таргета, с параметром `objective`.",
                                    "properties": {
                                      "target": {
                                        "additionalProperties": {
                                          "properties": {
                                            "qn": {
                                              "description": "Имя таргета.",
                                              "type": "string"
                                            },
                                            "type": {
                                              "description": "Тип таргета.",
                                              "format": "int32",
                                              "type": "integer"
                                            },
                                            "volume": {
                                              "additionalProperties": {
                                                "properties": {
                                                  "guid": {
                                                    "description": "GUID датасета строкой.",
                                                    "type": "string"
                                                  },
                                                  "name": {
                                                    "description": "Имя датасета.",
                                                    "type": [
                                                      "string",
                                                      "null"
                                                    ]
                                                  },
                                                  "parent": {
                                                    "anyOf": [
                                                      {
                                                        "anyOf": [
                                                          {
                                                            "format": "int64",
                                                            "type": "integer"
                                                          },
                                                          {
                                                            "type": "string"
                                                          }
                                                        ],
                                                        "description": "Числовой идентификатор (GUID): числом, а если в нём больше 15 цифр — строкой."
                                                      },
                                                      {
                                                        "type": "null"
                                                      }
                                                    ],
                                                    "description": "GUID родительского датасета; `null`, если нет."
                                                  },
                                                  "pool_guid": {
                                                    "anyOf": [
                                                      {
                                                        "anyOf": [
                                                          {
                                                            "format": "int64",
                                                            "type": "integer"
                                                          },
                                                          {
                                                            "type": "string"
                                                          }
                                                        ],
                                                        "description": "Числовой идентификатор (GUID): числом, а если в нём больше 15 цифр — строкой."
                                                      },
                                                      {
                                                        "type": "null"
                                                      }
                                                    ],
                                                    "description": "GUID пула; `null`, если неизвестен."
                                                  },
                                                  "pool_name": {
                                                    "description": "Название пула; `null`, если неизвестно.",
                                                    "type": [
                                                      "string",
                                                      "null"
                                                    ]
                                                  },
                                                  "volsize": {
                                                    "description": "Размер тома в байтах.",
                                                    "format": "int64",
                                                    "type": [
                                                      "integer",
                                                      "null"
                                                    ]
                                                  },
                                                  "volume_type": {
                                                    "description": "Тип датасета.",
                                                    "format": "int32",
                                                    "type": [
                                                      "integer",
                                                      "null"
                                                    ]
                                                  }
                                                },
                                                "required": [
                                                  "guid"
                                                ],
                                                "type": "object"
                                              },
                                              "description": "Тома таргета; ключ — GUID датасета строкой.",
                                              "type": "object"
                                            }
                                          },
                                          "required": [
                                            "qn",
                                            "type",
                                            "volume"
                                          ],
                                          "type": "object"
                                        },
                                        "description": "Объект из одного ключа — имени таргета.",
                                        "type": "object"
                                      }
                                    },
                                    "required": [
                                      "target"
                                    ],
                                    "type": "object"
                                  }
                                ],
                                "description": "Запись выдачи. Без параметра `objective` ключ — GUID датасета iSCSI-тома или\n`id` SDS-тома строкой. С `objective` iSCSI-тома сгруппированы по таргету\n(ключ — имя таргета), SDS-тома — как без него."
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "View vDC Volumes"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка БД при выборке томов vDC (vdc-list-volumes)."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-network-addr-limit": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Manage vDC Network Limit\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-23030` | network_id=={0} has not been assigned to vdc_id=={1}, so limit can't be set | Сеть не назначена на указанный vDC — лимит адресов задать нельзя. |\n| `-23022` | Bad addr_limit | Значение параметра addr_limit недопустимо (не число или вне диапазона). |\n| `-23020` | No param addr_limit | В запросе vdc-network-addr-limit отсутствует параметр addr_limit. |\n| `-23012` | Bad network_id param value | Значение параметра network_id в vdc-network-addr-limit не является числом. |\n| `-23005` | Bad vdc_id param value | Значение параметра vdc_id в vdc-network-addr-limit не является числом. |\n| `-23002` | Empty params | Объект params в vdc-network-addr-limit пуст. |\n| `-23001` | No params at all | Запрос vdc-network-addr-limit пришёл без объекта params. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка обращения к БД при установке лимита адресов. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-network-addr-limit",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-network-addr-limit",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "addr_limit": {
                        "default": null,
                        "format": "int32",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "network_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "network_id",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: лимит адресов обновлён.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -23030,
                        -23022,
                        -23020,
                        -23012,
                        -23005,
                        -23002,
                        -23001,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Manage vDC Network Limit"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-23030": "Сеть не назначена на указанный vDC — лимит адресов задать нельзя.",
          "-23022": "Значение параметра addr_limit недопустимо (не число или вне диапазона).",
          "-23020": "В запросе vdc-network-addr-limit отсутствует параметр addr_limit.",
          "-23012": "Значение параметра network_id в vdc-network-addr-limit не является числом.",
          "-23005": "Значение параметра vdc_id в vdc-network-addr-limit не является числом.",
          "-23002": "Объект params в vdc-network-addr-limit пуст.",
          "-23001": "Запрос vdc-network-addr-limit пришёл без объекта params.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД при установке лимита адресов."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-networks": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Networks\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | *динамическое сообщение* | Ошибка БД при выборке сетей vDC (vdc-networks). |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-networks",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-networks",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "additionalProperties": {
                                  "description": "Сеть, назначенная ВЦОД.",
                                  "properties": {
                                    "addr_limit": {
                                      "description": "Лимит адресов сети в этом ВЦОД; `null` — без ограничения.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "backend": {
                                      "description": "Идентификатор бэкенда сети.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "creator": {
                                      "description": "Идентификатор пользователя, создавшего сеть.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "id": {
                                      "description": "Идентификатор сети.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "mtu": {
                                      "description": "MTU сети.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "name": {
                                      "description": "Название сети.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "net_cidr": {
                                      "description": "Подсеть IPv4 в нотации CIDR; `null`, если не задана.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "network_type_id": {
                                      "description": "Идентификатор типа сети.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "qinq_id": {
                                      "description": "Внешний тег QinQ; `null`, если не задан.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "vlan_id": {
                                      "description": "VLAN ID; `null` или `0` у overlay-сети.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "vxlan_multicast_addr": {
                                      "description": "Multicast-адрес VXLAN; `null`, если не задан.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "vxlan_port": {
                                      "description": "UDP-порт VXLAN: `9009` у overlay-сети (без VLAN ID), иначе `null`.",
                                      "format": "int32",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "id"
                                  ],
                                  "type": "object"
                                },
                                "description": "ВЦОД с назначенными ему сетями. Кроме `id` и `name`, каждый ключ объекта —\nидентификатор сети строкой, значение — сеть. В выдачу попадают только ВЦОД,\nу которых есть видимые вызывающему сети.",
                                "properties": {
                                  "id": {
                                    "description": "Идентификатор ВЦОД.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "name": {
                                    "description": "Название ВЦОД; `null`, если не задано.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  }
                                },
                                "required": [
                                  "id"
                                ],
                                "type": "object"
                              },
                              "description": "Сети по ВЦОД: ключ — идентификатор ВЦОД строкой.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "View vDC Networks"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка БД при выборке сетей vDC (vdc-networks)."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-roles": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Roles\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка БД при выборке ролей vDC. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-roles",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-roles",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "items": {
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "type": "array"
                              },
                              "description": "Роли пользователей, действующие в ВЦОД: ключ — идентификатор пользователя\nстрокой, значение — идентификаторы его ролей в этом ВЦОД и глобальных ролей.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "View vDC Roles"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка БД при выборке ролей vDC."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Edit vDC\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-3309` | VDC space quota {requested_gb} GB is below the used space {used_gb} GB | Снижение ёмкостной квоты ниже фактически занятого ломает инвариант «занятое ≤ лимит», после чего проверки квоты ведут себя неопределённо. Оба числа названы: клиенту нужно показать причину. |\n| `-3308` | VDC description must not exceed 512 characters | Описание vDC длиннее 512 символов. |\n| `-3307` | VDC name must not exceed 64 characters | Имя vDC длиннее 64 символов. |\n| `-3306` | VDC name must not be null or empty | Имя vDC передано как null или пустая строка. |\n| `-3305` | No vdc_params has been provided | В vdc_params не передано ни одного изменяемого поля. |\n| `-3301` | No param id | Запрос vdc-set пришёл без объекта params (или params = null). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | *динамическое сообщение* | Ошибка БД при обновлении vDC. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vdc_params": {
                        "properties": {
                          "description": {
                            "default": null,
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "name": {
                            "default": null,
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "quota_cpu_cores": {
                            "default": null,
                            "format": "int32",
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "quota_cpu_ghz": {
                            "default": null,
                            "format": "int32",
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "quota_oversubscription_rate_cpu_cores": {
                            "default": null,
                            "format": "double",
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "quota_oversubscription_rate_cpu_ghz": {
                            "default": null,
                            "format": "double",
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "quota_oversubscription_rate_ram": {
                            "default": null,
                            "format": "double",
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "quota_oversubscription_rate_space_gb": {
                            "default": null,
                            "format": "double",
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "quota_oversubscription_rate_space_snapshots": {
                            "default": null,
                            "format": "double",
                            "type": [
                              "number",
                              "null"
                            ]
                          },
                          "quota_ram_gb": {
                            "default": null,
                            "format": "int32",
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "quota_space_gb": {
                            "default": null,
                            "format": "int32",
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "quota_space_snapshots": {
                            "default": null,
                            "format": "int32",
                            "type": [
                              "integer",
                              "null"
                            ]
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "id",
                      "vdc_params"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: изменения применены.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -3309,
                        -3308,
                        -3307,
                        -3306,
                        -3305,
                        -3301,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Edit vDC"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-3309": "Снижение ёмкостной квоты ниже фактически занятого ломает инвариант «занятое ≤ лимит», после чего проверки квоты ведут себя неопределённо. Оба числа названы: клиенту нужно показать причину.",
          "-3308": "Описание vDC длиннее 512 символов.",
          "-3307": "Имя vDC длиннее 64 символов.",
          "-3306": "Имя vDC передано как null или пустая строка.",
          "-3305": "В vdc_params не передано ни одного изменяемого поля.",
          "-3301": "Запрос vdc-set пришёл без объекта params (или params = null).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка БД при обновлении vDC."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-storage-enable": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Enable vDC Storage\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45037` | Storage name already taken: {0} | Имя стораджа (fs-путь root-датасета) уже занято другим vDC. |\n| `-45007` | Storage already enabled for VDC: {0} | Сторадж для этого vDC уже включён — повторный vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-storage-enable",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-storage-enable",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "name": {
                        "pattern": "^[a-z0-9]([a-z0-9.-]{0,61}[a-z0-9])?$",
                        "type": "string"
                      },
                      "pool_guid": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "vdc": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "name",
                      "pool_guid",
                      "vdc"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "guid": {
                                  "description": "GUID созданного корневого датасета VDC, десятичное число строкой.",
                                  "type": "string"
                                },
                                "name": {
                                  "description": "Имя корневого датасета VDC.",
                                  "type": "string"
                                },
                                "vdc": {
                                  "description": "Идентификатор VDC.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "guid",
                                "name",
                                "vdc"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45037,
                        -45007,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Enable vDC Storage"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45037": "Имя стораджа (fs-путь root-датасета) уже занято другим vDC.",
          "-45007": "Сторадж для этого vDC уже включён — повторный vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-storage-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Storage\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-storage-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-storage-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "vdc": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "capacity_gb": {
                                  "description": "Квота пространства ДЦ, ГБ; `null`, если не задана.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "iscsi": {
                                  "description": "Состояние раздачи по iSCSI.",
                                  "properties": {
                                    "auth_group": {
                                      "description": "Группа CHAP-аутентификации таргета; `null`, если не назначена или не найдена.",
                                      "properties": {
                                        "id": {
                                          "description": "Идентификатор группы.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "name": {
                                          "description": "Имя группы; `null`, если не задано.",
                                          "type": [
                                            "string",
                                            "null"
                                          ]
                                        },
                                        "users_count": {
                                          "description": "Число пользователей CHAP в группе.",
                                          "format": "int64",
                                          "type": "integer"
                                        }
                                      },
                                      "required": [
                                        "id",
                                        "users_count"
                                      ],
                                      "type": [
                                        "object",
                                        "null"
                                      ]
                                    },
                                    "configured": {
                                      "description": "iSCSI настроен для хранилища.",
                                      "type": "boolean"
                                    },
                                    "initiator_group": {
                                      "description": "Всегда `null`: поле зарезервировано.",
                                      "type": "null"
                                    },
                                    "luns": {
                                      "description": "Число томов, розданных через таргет. В этой версии тома, розданные методом `vdc-volume-map`, здесь не учитываются, поэтому значение — `0`.",
                                      "format": "uint64",
                                      "minimum": 0,
                                      "type": "integer"
                                    },
                                    "portal_group": {
                                      "description": "Всегда `null`: поле зарезервировано.",
                                      "type": "null"
                                    },
                                    "target_iqn": {
                                      "description": "IQN таргета; `null`, если iSCSI не настроен.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    }
                                  },
                                  "required": [
                                    "configured",
                                    "luns",
                                    "portal_group",
                                    "initiator_group"
                                  ],
                                  "type": "object"
                                },
                                "name": {
                                  "description": "Имя хранилища ДЦ.",
                                  "type": "string"
                                },
                                "pool_guid": {
                                  "anyOf": [
                                    {
                                      "format": "int64",
                                      "type": "integer"
                                    },
                                    {
                                      "type": "string"
                                    }
                                  ],
                                  "description": "Идентификатор пула: число, а если в нём больше 15 цифр — строка."
                                },
                                "pool_name": {
                                  "description": "Имя пула, на котором размещено хранилище.",
                                  "type": "string"
                                },
                                "protocols": {
                                  "description": "Протоколы раздачи, которые поддерживает хранилище.",
                                  "items": {
                                    "enum": [
                                      "iscsi"
                                    ],
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "root_dataset": {
                                  "description": "Корневой датасет хранилища на пуле.",
                                  "type": "string"
                                },
                                "root_dataset_guid": {
                                  "anyOf": [
                                    {
                                      "format": "int64",
                                      "type": "integer"
                                    },
                                    {
                                      "type": "string"
                                    }
                                  ],
                                  "description": "Идентификатор корневого датасета: число, а если в нём больше 15 цифр — строка."
                                },
                                "teardown_state": {
                                  "anyOf": [
                                    {
                                      "oneOf": [
                                        {
                                          "const": "in_progress",
                                          "description": "Демонтаж идёт.",
                                          "type": "string"
                                        },
                                        {
                                          "const": "interrupted",
                                          "description": "Демонтаж прервался: хранилище разобрано частично, повторное удаление ДЦ\nдоразберёт остаток.",
                                          "type": "string"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "Состояние демонтажа хранилища; `null`, если демонтаж не начинался."
                                },
                                "vdc": {
                                  "description": "Идентификатор ДЦ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "volumes_capacity": {
                                  "description": "Ёмкость томов хранилища; пустой массив, если томов нет.",
                                  "items": {
                                    "description": "Ёмкость одного тома.",
                                    "properties": {
                                      "allocated_gb": {
                                        "description": "Выделено тому, ГБ.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "name": {
                                        "description": "Имя тома.",
                                        "type": "string"
                                      },
                                      "used_gb": {
                                        "description": "Занято в томе, ГБ; `null`, если значение недоступно: контроллер хранилища не ответил, вернул ошибку или не прислал это значение.",
                                        "format": "double",
                                        "type": [
                                          "number",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "name",
                                      "allocated_gb"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                }
                              },
                              "required": [
                                "vdc",
                                "name",
                                "pool_name",
                                "pool_guid",
                                "root_dataset",
                                "root_dataset_guid",
                                "volumes_capacity",
                                "protocols",
                                "iscsi"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "View vDC Storage"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-storage-iscsi-configure": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Configure vDC Storage iSCSI\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45033` | Unknown auth group: {0} | Auth group с указанным ID не существует. |\n| `-45015` | Target already exists: {0} | Таргет с таким QN уже существует. |\n| `-45014` | iSCSI is already configured for VDC: {0} | iSCSI для этого vDC уже сконфигурирован — повторный vdc-storage-iscsi-configure. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-storage-iscsi-configure",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-storage-iscsi-configure",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "auth_group_id": {
                        "default": null,
                        "description": "Опц. существующая CHAP auth-группа VDC: если задана — таргет создаётся\nсразу с этой группой (CHAP при создании); иначе — без CHAP (контроллер\nвыставит `disable_chap`).",
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "vdc": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45033,
                        -45015,
                        -45014,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Configure vDC Storage iSCSI"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45033": "Auth group с указанным ID не существует.",
          "-45015": "Таргет с таким QN уже существует.",
          "-45014": "iSCSI для этого vDC уже сконфигурирован — повторный vdc-storage-iscsi-configure.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-storage-iscsi-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Storage iSCSI Detail\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-storage-iscsi-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-storage-iscsi-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "active_sessions_count": {
                                  "description": "Число активных сессий на таргете (по одной на каждый адрес подключённого\nинициатора); `0`, если iSCSI не настроен; `null`, если число не удалось\nполучить от контроллера хранилища: он не ответил, вернул ошибку или прислал\nответ без списка подключений.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "auth_group": {
                                  "description": "Группа CHAP-аутентификации таргета; `null`, если не назначена или не найдена.",
                                  "properties": {
                                    "id": {
                                      "description": "Идентификатор группы.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "name": {
                                      "description": "Имя группы; `null`, если не задано.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "users_count": {
                                      "description": "Число пользователей CHAP в группе.",
                                      "format": "int64",
                                      "type": "integer"
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "users_count"
                                  ],
                                  "type": [
                                    "object",
                                    "null"
                                  ]
                                },
                                "configured": {
                                  "description": "iSCSI для хранилища ДЦ настроен; `false` — пустое состояние, не ошибка.",
                                  "type": "boolean"
                                },
                                "portal_group": {
                                  "description": "Группа порталов таргета; `null`, если не привязана или не найдена.",
                                  "properties": {
                                    "id": {
                                      "description": "Идентификатор группы порталов.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "name": {
                                      "description": "Имя группы; `null`, если не задано.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "portals": {
                                      "description": "Порталы группы.",
                                      "items": {
                                        "description": "Портал: адрес и порт.",
                                        "properties": {
                                          "ip": {
                                            "description": "IP-адрес портала.",
                                            "type": "string"
                                          },
                                          "port": {
                                            "description": "TCP-порт портала.",
                                            "format": "int32",
                                            "type": "integer"
                                          }
                                        },
                                        "required": [
                                          "ip",
                                          "port"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "array"
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "portals"
                                  ],
                                  "type": [
                                    "object",
                                    "null"
                                  ]
                                },
                                "target_iqn": {
                                  "description": "IQN таргета; `null`, если iSCSI не настроен.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "configured"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "View vDC Storage iSCSI Detail"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-storage-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** List vDC Storages\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-storage-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-storage-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null,
                        "description": "Switches response format (array vs object map), per `src/methods/CLAUDE.md`."
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "items": {
                                    "description": "Сводка хранилища одного ДЦ.",
                                    "properties": {
                                      "capacity_used": {
                                        "description": "Занято томами хранилища, байт.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "quota_space_gb": {
                                        "description": "Квота пространства ДЦ, ГБ; `null`, если не задана.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "storage_enabled": {
                                        "description": "Хранилище ДЦ включено.",
                                        "type": "boolean"
                                      },
                                      "vdc": {
                                        "description": "Идентификатор ДЦ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "vdc",
                                      "storage_enabled",
                                      "capacity_used"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "Сводка хранилища одного ДЦ.",
                                    "properties": {
                                      "capacity_used": {
                                        "description": "Занято томами хранилища, байт.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "quota_space_gb": {
                                        "description": "Квота пространства ДЦ, ГБ; `null`, если не задана.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "storage_enabled": {
                                        "description": "Хранилище ДЦ включено.",
                                        "type": "boolean"
                                      },
                                      "vdc": {
                                        "description": "Идентификатор ДЦ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "vdc",
                                      "storage_enabled",
                                      "capacity_used"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "object"
                                }
                              ],
                              "description": "Сводка хранилища по ДЦ, доступным вызывающему: массив, а с параметром\n`objective` — объект с ключом `vdc` строкой."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "List vDC Storages"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-volume-delete": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Delete vDC Volume\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45026` | Unknown volume: {0} | Том с указанным ID не найден в этом vDC. |\n| `-45021` | Storage teardown failed: {0} | Шаг демонтажа стораджа завершился ошибкой на контроллере. |\n| `-45020` | Storage teardown timed out: {0} | Шаг демонтажа стораджа не завершился за отведённое время. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-volume-delete",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-volume-delete",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "volume_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc_id",
                      "volume_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Том удалён: пустой объект.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45026,
                        -45021,
                        -45020,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Delete vDC Volume"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45026": "Том с указанным ID не найден в этом vDC.",
          "-45021": "Шаг демонтажа стораджа завершился ошибкой на контроллере.",
          "-45020": "Шаг демонтажа стораджа не завершился за отведённое время.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-volume-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View vDC Volume Detail\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45026` | Unknown volume: {0} | Том с указанным ID не найден в этом vDC. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-volume-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-volume-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "volume_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc_id",
                      "volume_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "capacity_available_gb": {
                                  "description": "Свободно в томе, ГБ (размер минус занятое, не меньше нуля); `null`, если\nзанятое неизвестно.",
                                  "format": "double",
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "capacity_used_gb": {
                                  "description": "Занято в томе, ГБ; `null`, если значение недоступно: контроллер хранилища не ответил, вернул ошибку или не прислал это значение.",
                                  "format": "double",
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "compression_ratio": {
                                  "description": "Коэффициент сжатия; `null`, если значение недоступно: контроллер хранилища не ответил, вернул ошибку или не прислал это значение.",
                                  "format": "double",
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "dedup_ratio": {
                                  "description": "Коэффициент дедупликации; `null`, если значение недоступно: контроллер хранилища не ответил, вернул ошибку или не прислал это значение.",
                                  "format": "double",
                                  "type": [
                                    "number",
                                    "null"
                                  ]
                                },
                                "id": {
                                  "description": "Идентификатор тома.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "initiator_group": {
                                  "description": "Группа инициаторов, которой роздан том; `null`, если том не роздан или\nгруппа не найдена.",
                                  "properties": {
                                    "id": {
                                      "description": "Идентификатор группы.",
                                      "format": "int32",
                                      "type": "integer"
                                    },
                                    "initiators": {
                                      "description": "Инициаторы группы.",
                                      "items": {
                                        "description": "Инициатор группы.",
                                        "properties": {
                                          "iqn": {
                                            "description": "IQN инициатора.",
                                            "type": "string"
                                          },
                                          "synced": {
                                            "description": "Инициатор настроен на контроллере хранилища; `null`, если значение недоступно: контроллер не ответил, вернул ошибку или не прислал это значение.",
                                            "type": [
                                              "boolean",
                                              "null"
                                            ]
                                          }
                                        },
                                        "required": [
                                          "iqn"
                                        ],
                                        "type": "object"
                                      },
                                      "type": "array"
                                    },
                                    "name": {
                                      "description": "Имя группы; `null`, если не задано.",
                                      "type": [
                                        "string",
                                        "null"
                                      ]
                                    },
                                    "networks": {
                                      "description": "Сети группы в нотации CIDR.",
                                      "items": {
                                        "type": "string"
                                      },
                                      "type": "array"
                                    }
                                  },
                                  "required": [
                                    "id",
                                    "initiators",
                                    "networks"
                                  ],
                                  "type": [
                                    "object",
                                    "null"
                                  ]
                                },
                                "lun_id": {
                                  "description": "Номер LUN; `null`, если том не роздан.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "mapped": {
                                  "description": "Том роздан по сети.",
                                  "type": "boolean"
                                },
                                "name": {
                                  "description": "Имя тома.",
                                  "type": "string"
                                },
                                "path": {
                                  "description": "Путь тома на пуле.",
                                  "type": "string"
                                },
                                "pool_name": {
                                  "description": "Имя пула, на котором лежит том.",
                                  "type": "string"
                                },
                                "protocol": {
                                  "description": "Протокол раздачи; `null`, если том не роздан.",
                                  "enum": [
                                    "iscsi",
                                    null
                                  ],
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "size_gb": {
                                  "description": "Размер тома в ГБ.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "target_iqn": {
                                  "description": "IQN таргета, через который роздан том; `null`, если том не роздан.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                }
                              },
                              "required": [
                                "id",
                                "name",
                                "pool_name",
                                "size_gb",
                                "path",
                                "mapped"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45026,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "View vDC Volume Detail"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45026": "Том с указанным ID не найден в этом vDC.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-volume-map": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Map vDC Volume\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45032` | iSCSI is not configured for VDC: {0} | iSCSI для этого vDC не сконфигурирован — сначала vdc-storage-iscsi-configure. |\n| `-45031` | Invalid volume map parameters: {0} | Параметры vdc-volume-map не прошли валидацию (lun_id, протокол, initiator group). |\n| `-45030` | Volume map protocol is out of scope: {0} | Запрошенный протокол маппинга (например nvme) пока не поддерживается. |\n| `-45029` | LUN ID {lun_id} is already in use on target {target} | Указанный LUN ID уже занят на этом таргете. |\n| `-45027` | Volume is already mapped: {0} | Том уже примаплен: повторный map или удаление тома с активной раздачей. |\n| `-45026` | Unknown volume: {0} | Том с указанным ID не найден в этом vDC. |\n| `-45025` | Invalid initiator group parameters: {0} | Параметры initiator group не прошли валидацию (имя, initiators, CIDR). |\n| `-45023` | Initiator group already exists: {0} | Initiator group с таким именем уже существует. |\n| `-45022` | Unknown initiator group: {0} | Initiator group с указанным ID не существует. |\n| `-45021` | Storage teardown failed: {0} | Шаг демонтажа стораджа завершился ошибкой на контроллере. |\n| `-45020` | Storage teardown timed out: {0} | Шаг демонтажа стораджа не завершился за отведённое время. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45010` | Unknown portal group: {0} | Portal group с указанным ID не существует. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-volume-map",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-volume-map",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "initiator_group_id": {
                        "default": null,
                        "description": "Существующая IG VDC (взаимоисключимо с `new_initiator_group`).",
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "lun_id": {
                        "default": null,
                        "description": "LUN ID (обяз. при `protocol = iscsi`); диапазон проверяет [`resolve_iscsi_params`].",
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "new_initiator_group": {
                        "default": null,
                        "description": "Создать IG «на месте» (взаимоисключимо с `initiator_group_id`).",
                        "properties": {
                          "initiators": {
                            "items": {
                              "type": "string"
                            },
                            "minItems": 1,
                            "type": "array"
                          },
                          "name": {
                            "maxLength": 63,
                            "minLength": 1,
                            "pattern": "^[a-z0-9]([a-z0-9.-]{0,61}[a-z0-9])?$",
                            "type": "string"
                          },
                          "networks": {
                            "items": {
                              "type": "string"
                            },
                            "minItems": 1,
                            "type": "array"
                          }
                        },
                        "required": [
                          "name",
                          "initiators",
                          "networks"
                        ],
                        "type": [
                          "object",
                          "null"
                        ]
                      },
                      "portal_group_id": {
                        "default": null,
                        "description": "Портал-группа для привязки (обяз. при `protocol = iscsi`); pool-scoped.",
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "protocol": {
                        "description": "Протокол раздачи. На Этапе 2 поддерживается только `iscsi`; `nvme` — вне scope.",
                        "enum": [
                          "iscsi",
                          "nvme"
                        ],
                        "type": "string"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "volume_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "protocol",
                      "vdc_id",
                      "volume_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Том выдан группе инициаторов: пустой объект.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45032,
                        -45031,
                        -45030,
                        -45029,
                        -45027,
                        -45026,
                        -45025,
                        -45023,
                        -45022,
                        -45021,
                        -45020,
                        -45013,
                        -45010,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Map vDC Volume"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45032": "iSCSI для этого vDC не сконфигурирован — сначала vdc-storage-iscsi-configure.",
          "-45031": "Параметры vdc-volume-map не прошли валидацию (lun_id, протокол, initiator group).",
          "-45030": "Запрошенный протокол маппинга (например nvme) пока не поддерживается.",
          "-45029": "Указанный LUN ID уже занят на этом таргете.",
          "-45027": "Том уже примаплен: повторный map или удаление тома с активной раздачей.",
          "-45026": "Том с указанным ID не найден в этом vDC.",
          "-45025": "Параметры initiator group не прошли валидацию (имя, initiators, CIDR).",
          "-45023": "Initiator group с таким именем уже существует.",
          "-45022": "Initiator group с указанным ID не существует.",
          "-45021": "Шаг демонтажа стораджа завершился ошибкой на контроллере.",
          "-45020": "Шаг демонтажа стораджа не завершился за отведённое время.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45010": "Portal group с указанным ID не существует.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vdc-volume-unmap": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Unmap vDC Volume\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45039` | Unified Storage feature is disabled | Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД. |\n| `-45028` | Volume is not mapped: {0} | Том не примаплен — снимать маппинг нечего. |\n| `-45026` | Unknown volume: {0} | Том с указанным ID не найден в этом vDC. |\n| `-45021` | Storage teardown failed: {0} | Шаг демонтажа стораджа завершился ошибкой на контроллере. |\n| `-45020` | Storage teardown timed out: {0} | Шаг демонтажа стораджа не завершился за отведённое время. |\n| `-45013` | Storage is not enabled for VDC: {0} | Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable. |\n| `-45004` | Unknown VDC: {0} | vDC с указанным ID не найден. |\n| `-45002` | Unknown pool: {0} | Пул с указанным GUID не найден или не имеет имени. |\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vdc-volume-unmap",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vdc-volume-unmap",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "volume_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vdc_id",
                      "volume_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Выдача тома снята: пустой объект.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45039,
                        -45028,
                        -45026,
                        -45021,
                        -45020,
                        -45013,
                        -45004,
                        -45002,
                        -45001,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vdc"
        ],
        "x-access": [
          "Unmap vDC Volume"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45039": "Фиче-гейт: подсистема Unified Storage выключена (`feature.unified_storage == 0`). Отдельный код от `Db` — клиент отличает выключенную фичу от ошибки БД.",
          "-45028": "Том не примаплен — снимать маппинг нечего.",
          "-45026": "Том с указанным ID не найден в этом vDC.",
          "-45021": "Шаг демонтажа стораджа завершился ошибкой на контроллере.",
          "-45020": "Шаг демонтажа стораджа не завершился за отведённое время.",
          "-45013": "Сторадж для этого vDC ещё не включён — сначала vdc-storage-enable.",
          "-45004": "vDC с указанным ID не найден.",
          "-45002": "Пул с указанным GUID не найден или не имеет имени.",
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-backup-restore": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Backup VM Restore\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25420` | Backup feature is disabled | Метод резервного копирования вызван при выключенной опции `feature.backup`. |\n| `-25410` | No active node available | Нет пула с узлом-владельцем и адресом узла для приёма резервной копии. |\n| `-25308` | No free 'send-receive' ports. Please try later | Все send-receive порты заняты — повторите попытку позже. |\n| `-458` | All nodes are offline or unavailable for auto placement | Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах резервного копирования. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-backup-restore",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-backup-restore",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "timeout": {
                        "default": null,
                        "description": "Connect/wait timeout for the receive side, seconds (gi passes its RECV_CONNECT_TIMEOUT_SECS).",
                        "format": "uint16",
                        "maximum": 65535,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Куда передавать поток резервной копии: приём на узле уже запущен.",
                              "properties": {
                                "message": {
                                  "description": "Всегда `relayed`.",
                                  "type": "string"
                                },
                                "node_ip": {
                                  "description": "Адрес узла, принимающего поток.",
                                  "type": "string"
                                },
                                "port": {
                                  "description": "Порт, на котором узел ждёт поток.",
                                  "format": "uint16",
                                  "maximum": 65535,
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "rpc_id": {
                                  "description": "Идентификатор запроса.",
                                  "format": "uuid",
                                  "type": "string"
                                },
                                "target_dataset": {
                                  "description": "Датасет карантина, в который принимается копия; после приёма ВМ из него восстанавливают\nметодом `vm-import-area-process`.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "message",
                                "rpc_id",
                                "node_ip",
                                "port",
                                "target_dataset"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25420,
                        -25410,
                        -25308,
                        -458,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Backup VM Restore"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25420": "Метод резервного копирования вызван при выключенной опции `feature.backup`.",
          "-25410": "Нет пула с узлом-владельцем и адресом узла для приёма резервной копии.",
          "-25308": "Все send-receive порты заняты — повторите попытку позже.",
          "-458": "Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах резервного копирования."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-backup-send": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Backup VM Send\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25420` | Backup feature is disabled | Метод резервного копирования вызван при выключенной опции `feature.backup`. |\n| `-25402` | Pool is not consuming | Пул ВМ не используется кластером или у него нет узла-владельца. |\n| `-25401` | VM is locked | ВМ заблокирована другой операцией. |\n| `-25400` | Unable to determine VM for backup | ВМ не найдена, вне зоны доступа вызывающего или у неё нет корневого датасета. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах резервного копирования. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-backup-send",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-backup-send",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "parent_snap": {
                        "default": null,
                        "description": "Short parent snapshot name for an incremental send; `None` = full backup.",
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "target_ip": {
                        "description": "IP of the backup storage receiver (BACKUP_STORAGE_IP on the gi side).",
                        "minLength": 1,
                        "type": "string"
                      },
                      "target_port": {
                        "description": "Receive port the backup storage chose (from its `backup-recv`).",
                        "format": "uint16",
                        "maximum": 65535,
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "target_ip",
                      "target_port",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Итог передачи точки восстановления получателю.",
                              "properties": {
                                "size_bytes": {
                                  "description": "Передано байт; ключа нет, если агент узла объём не сообщил.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "snap_creation": {
                                  "description": "Время создания снимка в том виде, в каком его вернул агент узла; ключа нет, если не вернул."
                                },
                                "snap_guid": {
                                  "description": "GUID переданного снимка, десятичное число строкой; ключа нет, если агент узла его не вернул.",
                                  "type": "string"
                                },
                                "snap_name": {
                                  "description": "Полное имя переданного снимка (`<датасет>@<снимок>`); пустая строка, если агент узла\nимя не вернул.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "snap_name"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25420,
                        -25402,
                        -25401,
                        -25400,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Backup VM Send"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25420": "Метод резервного копирования вызван при выключенной опции `feature.backup`.",
          "-25402": "Пул ВМ не используется кластером или у него нет узла-владельца.",
          "-25401": "ВМ заблокирована другой операцией.",
          "-25400": "ВМ не найдена, вне зоны доступа вызывающего или у неё нет корневого датасета.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах резервного копирования."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-boot_media-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Boot Media, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-5231` | Unable to get boot media list: {0} | Ошибка запроса к БД при получении списка boot media. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-boot_media-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-boot_media-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -5231,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View Boot Media",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-5231": "Ошибка запроса к БД при получении списка boot media.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-change-vdc": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Change VM VDC\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-5020` | following networks are absent at dst_vdc: {0} | В целевом vDC отсутствуют сети, используемые портами ВМ, — сначала назначьте эти сети на dst_vdc. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при смене vDC у ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-change-vdc",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-change-vdc",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "dst_vdc": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "src_vdc": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "dst_vdc",
                      "src_vdc",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "message": {
                                  "description": "Подтверждение переноса ВМ в целевой виртуальный ЦОД.",
                                  "enum": [
                                    "Changed without errors"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "message"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -5020,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Change VM VDC"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-5020": "В целевом vDC отсутствуют сети, используемые портами ВМ, — сначала назначьте эти сети на dst_vdc.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при смене vDC у ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-check-configuration": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Check VM Configuration\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25308` | No free 'send-receive' ports. Please try later | Все send-receive порты заняты — повторите попытку позже. |\n| `-25307` | Unable to determine node for migration pool, not imported? | Не удалось определить ноду целевого пула — возможно, пул не импортирован. |\n| `-25306` | Migration not offlined VM is not possible | ВМ не остановлена — миграция возможна только для offline ВМ. |\n| `-25305` | Migration to the same pool is not possible | Целевой пул совпадает с текущим пулом ВМ. |\n| `-25304` | Unable to determine node for migration VM | Не удалось получить данные ВМ и определить её ноду для миграции. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-4943` | VM agent does not support runtime configuration readout | VM-агент не поддерживает чтение runtime-конфигурации (устаревшая версия агента). |\n| `-4942` | target VM-agent node is not reachable | Целевая нода с VM-агентом недоступна — запрос не дошёл до агента. |\n| `-4941` | VM with ID=={0} is not running | ВМ не запущена — прочитать runtime-конфигурацию можно только у работающей ВМ. |\n| `-4940` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при миграции ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-check-configuration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-check-configuration",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "meta": {
                                  "description": "Сведения о выдаче результата.",
                                  "properties": {
                                    "fetched_at": {
                                      "description": "Время формирования ответа, секунды Unix. Результат сверки может быть\nвзят из кеша, поэтому сама сверка бывает раньше этого времени.",
                                      "format": "int64",
                                      "type": "integer"
                                    }
                                  },
                                  "required": [
                                    "fetched_at"
                                  ],
                                  "type": "object"
                                },
                                "mismatch_count": {
                                  "description": "Число расходящихся параметров конфигурации; `0` при `match`.",
                                  "format": "uint32",
                                  "minimum": 0,
                                  "type": "integer"
                                },
                                "status": {
                                  "description": "Итог сверки конфигурации запущенной ВМ на узле с эталоном кластера:\n`match` — совпадает, `mismatch` — есть расхождения.",
                                  "enum": [
                                    "match",
                                    "mismatch"
                                  ],
                                  "type": "string"
                                }
                              },
                              "required": [
                                "status",
                                "mismatch_count",
                                "meta"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25308,
                        -25307,
                        -25306,
                        -25305,
                        -25304,
                        -9707,
                        -9706,
                        -4943,
                        -4942,
                        -4941,
                        -4940,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Check VM Configuration"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25308": "Все send-receive порты заняты — повторите попытку позже.",
          "-25307": "Не удалось определить ноду целевого пула — возможно, пул не импортирован.",
          "-25306": "ВМ не остановлена — миграция возможна только для offline ВМ.",
          "-25305": "Целевой пул совпадает с текущим пулом ВМ.",
          "-25304": "Не удалось получить данные ВМ и определить её ноду для миграции.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-4943": "VM-агент не поддерживает чтение runtime-конфигурации (устаревшая версия агента).",
          "-4942": "Целевая нода с VM-агентом недоступна — запрос не дошёл до агента.",
          "-4941": "ВМ не запущена — прочитать runtime-конфигурацию можно только у работающей ВМ.",
          "-4940": "ВМ с указанным id не существует или недоступна пользователю.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при миграции ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-console": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Access VM Console\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-3112` | Bad value of param type | Параметр type имеет значение, отличное от 1 (VNC) и 2 (текстовая консоль). |\n| `-3103` | No VM with ID=={0} within users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при получении консольных данных ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-console",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-console",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "type": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор ВМ из запроса.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "type": {
                                  "description": "Тип консоли: `1` — графическая (VNC), `2` — текстовая.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "vnc": {
                                  "description": "Адрес консоли на узле в виде `хост:порт`.",
                                  "type": "string"
                                },
                                "wss": {
                                  "description": "Адрес WebSocket-моста консоли: базовый адрес кластера и одноразовый токен\nчерез `/`.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "id",
                                "wss",
                                "vnc",
                                "type"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -3112,
                        -3103,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Access VM Console"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-3112": "Параметр type имеет значение, отличное от 1 (VNC) и 2 (текстовая консоль).",
          "-3103": "ВМ с указанным id не существует или недоступна пользователю.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при получении консольных данных ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-disk-set-label": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Label VM Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-4048` | Bad guid param: {0} | Параметр guid диска не удалось разобрать как число. |\n| `-4047` | Bad label param length | Параметр label имеет недопустимую длину. |\n| `-4030` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при установке label диска. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-disk-set-label",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-disk-set-label",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "guid": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "label": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "guid",
                      "label",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: узел применил новую метку диска.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -4048,
                        -4047,
                        -4030,
                        -1611,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Label VM Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-4048": "Параметр guid диска не удалось разобрать как число.",
          "-4047": "Параметр label имеет недопустимую длину.",
          "-4030": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при установке label диска."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-get": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View VM Details\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-3001` | No VM with ID=={0} within users scope | ВМ с указанным id не существует или недоступна пользователю в его scope. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при получении карточки ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-get",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-get",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "GI_object": {
                                  "description": "ВМ — объект федерации кластеров: `1` — да, `0` — нет; `null`, если признак\nне задан.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "admin_status": {
                                  "description": "Желаемый (административный) статус ВМ, код из словаря `vm-statuses`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "boot_media_id": {
                                  "description": "Загрузочный носитель, идентификатор из словаря `vm-boot_media-list`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "cpu_priority": {
                                  "description": "Приоритет vCPU.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "cpus": {
                                  "description": "Число vCPU.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "create_completed": {
                                  "description": "Создание ВМ завершено: `1` — да, `0` — нет; `null`, если признак не задан.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "created": {
                                  "description": "Время создания ВМ, секунды Unix.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "description": {
                                  "description": "Описание ВМ; `null`, если не задано.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "disks": {
                                  "description": "Диски ВМ.",
                                  "items": {
                                    "description": "Диск ВМ.",
                                    "properties": {
                                      "guid": {
                                        "description": "GUID диска, десятичное число строкой.",
                                        "type": "string"
                                      },
                                      "iops_limit": {
                                        "description": "Ограничение IOPS; `null`, если ограничения нет.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "label": {
                                        "description": "Метка диска; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "mbps_limit": {
                                        "description": "Ограничение пропускной способности, МБ/с; `null`, если ограничения нет.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "sector_size": {
                                        "description": "Размеры сектора диска, байт.",
                                        "properties": {
                                          "logical": {
                                            "description": "Логический размер сектора, байт.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "physical": {
                                            "description": "Физический размер сектора, байт.",
                                            "format": "int32",
                                            "type": "integer"
                                          }
                                        },
                                        "required": [
                                          "logical",
                                          "physical"
                                        ],
                                        "type": "object"
                                      },
                                      "size": {
                                        "description": "Размер диска в байтах; `null`, если не известен.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "slot": {
                                        "description": "Номер слота диска в ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "guid",
                                      "slot",
                                      "sector_size"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "gc_id": {
                                  "description": "Способ настройки гостевой ОС: числовой идентификатор.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "gc_name": {
                                  "description": "Название способа настройки гостевой ОС.",
                                  "type": "string"
                                },
                                "guest": {
                                  "description": "Использование памяти гостевой ОС по метрикам. Ключ есть, только если\nхранилище метрик доступно.",
                                  "properties": {
                                    "ram_balloon_performed": {
                                      "description": "Фактический объём балуна памяти в байтах; `null`, если свежей метрики нет.",
                                      "format": "int64",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "ram_balloon_requested": {
                                      "description": "Запрошенный объём балуна памяти в байтах; `null`, если свежей метрики нет.",
                                      "format": "int64",
                                      "type": [
                                        "integer",
                                        "null"
                                      ]
                                    },
                                    "ram_used": {
                                      "description": "Использование памяти ВМ по последней метрике гипервизора; `null`, если\nсвежей метрики нет.",
                                      "format": "double",
                                      "type": [
                                        "number",
                                        "null"
                                      ]
                                    }
                                  },
                                  "type": "object"
                                },
                                "hv_faults": {
                                  "description": "Политики реакции на сбои гипервизора ВМ.",
                                  "properties": {
                                    "sigabort": {
                                      "description": "Политика перезапуска процесса гипервизора после аварийного завершения\n(SIGABRT).",
                                      "properties": {
                                        "interval": {
                                          "description": "Интервал политики; `0`, если не задан.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "restarts": {
                                          "description": "Допустимое число перезапусков; `0`, если не задано.",
                                          "format": "int32",
                                          "type": "integer"
                                        }
                                      },
                                      "required": [
                                        "interval",
                                        "restarts"
                                      ],
                                      "type": "object"
                                    }
                                  },
                                  "required": [
                                    "sigabort"
                                  ],
                                  "type": "object"
                                },
                                "hw_version": {
                                  "description": "Версия виртуального оборудования; `4`, если не задана.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "id": {
                                  "description": "Идентификатор ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "incarnation": {
                                  "description": "Номер ревизии записи ВМ: время последнего изменения в десятых долях секунды.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "locked": {
                                  "description": "ВМ заблокирована выполняющейся операцией: `1` — да, `0` — нет; `null`,\nесли признак не задан.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "modified": {
                                  "description": "Время последнего изменения ВМ, секунды Unix.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "name": {
                                  "description": "Имя ВМ.",
                                  "type": "string"
                                },
                                "ndmp_address": {
                                  "description": "Адрес сетевого интерфейса пула хранения ВМ; `null`, если не задан.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "network_ports": {
                                  "description": "Сетевые порты ВМ.",
                                  "items": {
                                    "description": "Сетевой порт ВМ.",
                                    "properties": {
                                      "address": {
                                        "description": "IPv4-адрес порта; `null`, если адреса нет.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "address_v6": {
                                        "description": "IPv6-адреса порта; пустой массив, если адресов нет.",
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      },
                                      "ip_guard": {
                                        "description": "Защита от подмены IP-адреса: `1` — включена, `0` — выключена; `null`, если\nне задана.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "mac": {
                                        "description": "MAC-адрес порта; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "mac_guard": {
                                        "description": "Защита от подмены MAC-адреса: `1` — включена, `0` — выключена; `null`, если\nне задана.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "network_id": {
                                        "description": "Идентификатор сети.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "port_id": {
                                        "description": "Идентификатор порта.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "ratelimit_mbits": {
                                        "description": "Ограничение скорости порта, Мбит/с; `null`, если ограничения нет.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "slot": {
                                        "description": "Номер слота сетевого интерфейса в ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "network_id",
                                      "port_id",
                                      "slot",
                                      "address_v6"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "node": {
                                  "description": "Узел, на котором размещена ВМ; `null`, если узел не известен.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "nvme": {
                                  "description": "Диски ВМ подключаются как NVMe.",
                                  "type": "boolean"
                                },
                                "oper_status": {
                                  "description": "Текущий (наблюдаемый) статус ВМ — то же значение, что `status`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "oper_status_ts": {
                                  "description": "Время последней смены наблюдаемого статуса, секунды Unix.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "os_profile": {
                                  "description": "Профиль (образ) ОС, из которого создана ВМ; `null`, если не задан.",
                                  "format": "uuid",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "os_type": {
                                  "description": "Тип ОС: числовой идентификатор.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "pool": {
                                  "description": "GUID пула хранения ВМ, десятичное число строкой.",
                                  "type": "string"
                                },
                                "ram": {
                                  "description": "Объём памяти ВМ в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "root_dataset": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "format": "uint64",
                                          "minimum": 0,
                                          "type": "integer"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ],
                                      "description": "GUID датасета: число или строка."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "GUID корневого датасета ВМ: число, а если не помещается в 64 бита — строка;\n`null`, если не задан."
                                },
                                "root_dataset_name": {
                                  "description": "Имя корневого датасета ВМ; `null`, если не задан.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "rstart": {
                                  "description": "ВМ запущена на узле, отличном от владельца пула: `1` — да, `0` — нет.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "service": {
                                  "description": "Служебный признак ВМ; у обычной ВМ — `0`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "status": {
                                  "description": "Текущий (наблюдаемый) статус ВМ, код из словаря `vm-statuses`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "uefi": {
                                  "description": "Путь к прошивке UEFI ВМ на узле; `null`, если не задан.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "vcpu_class": {
                                  "description": "Класс vCPU.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "vdc": {
                                  "description": "Идентификатор виртуального ЦОД, которому принадлежит ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id",
                                "hw_version",
                                "name",
                                "cpus",
                                "ram",
                                "os_type",
                                "created",
                                "modified",
                                "incarnation",
                                "pool",
                                "rstart",
                                "cpu_priority",
                                "vcpu_class",
                                "boot_media_id",
                                "gc_id",
                                "gc_name",
                                "service",
                                "vdc",
                                "status",
                                "oper_status",
                                "oper_status_ts",
                                "admin_status",
                                "nvme",
                                "hv_faults",
                                "network_ports",
                                "disks"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -3001,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View VM Details"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-3001": "ВМ с указанным id не существует или недоступна пользователю в его scope.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при получении карточки ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-history": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View VM History\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-9328` | VM {0} not found | ВМ с указанным id не существует или недоступна пользователю. |\n| `-9327` | ts_finish must be greater than ts_start | ts_finish меньше или равен ts_start — интервал задан наоборот. |\n| `-9326` | Too large ts_finish value | Значение ts_finish больше максимально допустимой временной границы. |\n| `-9325` | Too old ts_finish value | Значение ts_finish меньше минимально допустимой временной границы. |\n| `-9320` | Too old ts_start value | Значение ts_start меньше минимально допустимой временной границы. |\n| `-9305` | Value of lines parameter is out of range | Параметр lines вне диапазона 1..999. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | DB error: {0} | Ошибка запроса к БД при получении истории ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-history",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-history",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "lines": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "ts_finish": {
                        "default": null,
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "ts_start": {
                        "default": null,
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "items": {
                                "description": "Запись истории статусов ВМ.",
                                "properties": {
                                  "progress": {
                                    "description": "Прогресс операции в процентах; `null`, если не задан.",
                                    "format": "int16",
                                    "maximum": 32767,
                                    "minimum": -32768,
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "status": {
                                    "description": "Код статуса ВМ (словарь метода `vm-statuses`).",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "ts": {
                                    "description": "Время смены статуса, секунды Unix.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "ts_nano": {
                                    "description": "Время смены статуса в микросекундах Unix (несмотря на имя ключа).",
                                    "format": "int64",
                                    "type": "integer"
                                  }
                                },
                                "required": [
                                  "ts",
                                  "ts_nano",
                                  "status"
                                ],
                                "type": "object"
                              },
                              "type": "array"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -9328,
                        -9327,
                        -9326,
                        -9325,
                        -9320,
                        -9305,
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View VM History"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-9328": "ВМ с указанным id не существует или недоступна пользователю.",
          "-9327": "ts_finish меньше или равен ts_start — интервал задан наоборот.",
          "-9326": "Значение ts_finish больше максимально допустимой временной границы.",
          "-9325": "Значение ts_finish меньше минимально допустимой временной границы.",
          "-9320": "Значение ts_start меньше минимально допустимой временной границы.",
          "-9305": "Параметр lines вне диапазона 1..999.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка запроса к БД при получении истории ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-import-area-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View Import Area\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | DB error: {0} | Ошибка запроса к БД при получении списка import area. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-import-area-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-import-area-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "description": "Запись области импорта: принятый датасет и ход его передачи.",
                                "properties": {
                                  "dataset": {
                                    "description": "Датасет в области импорта; совпадает с ключом записи.",
                                    "type": "string"
                                  },
                                  "duration": {
                                    "description": "Длительность передачи в секундах; `0`, если не задана.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "finished": {
                                    "description": "Передача завершена: `1` — да, `0` — нет.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "full_size": {
                                    "description": "Полный объём датасета в байтах; `null`, если неизвестен.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "local_ip": {
                                    "description": "IP-адрес узла, принимающего датасет.",
                                    "type": "string"
                                  },
                                  "original_pool_exists": {
                                    "description": "Исходный пул ВМ есть в кластере: `1` — да, `0` — нет. Есть только\nу завершённых записей с метаданными ВМ.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "original_vdc_exists": {
                                    "description": "Исходный ДЦ (по `vm.vdc`) есть в кластере: `1` — да, `0` — нет. Есть\nтолько у завершённых записей с метаданными ВМ.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "original_vm_exists": {
                                    "description": "Исходная ВМ (по `vm.id`) есть в кластере: `1` — да, `0` — нет. Есть\nтолько у завершённых записей с метаданными ВМ.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "peer_ip": {
                                    "description": "IP-адрес отправителя.",
                                    "type": "string"
                                  },
                                  "pool_guid": {
                                    "description": "GUID пула — десятичное число строкой. Есть только у завершённых записей.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "pool_name": {
                                    "description": "Пул, на котором лежит принятый датасет. Есть только у завершённых записей.",
                                    "type": [
                                      "string",
                                      "null"
                                    ]
                                  },
                                  "start_ts": {
                                    "description": "Время начала передачи, Unix-время в секундах; `null`, если не задано.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "transferred": {
                                    "description": "Передано байт; `null`, если неизвестно.",
                                    "format": "int64",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "update_ts": {
                                    "description": "Время завершения, Unix-время в секундах; `null`, пока передача не завершена.",
                                    "format": "int32",
                                    "type": [
                                      "integer",
                                      "null"
                                    ]
                                  },
                                  "vm": {
                                    "description": "Метаданные ВМ, пришедшие вместе с датасетом. Есть только у завершённых\nзаписей с метаданными ВМ.",
                                    "properties": {
                                      "GI_object": {
                                        "description": "Признак объекта федерации."
                                      },
                                      "cpus": {
                                        "description": "Число vCPU."
                                      },
                                      "created": {
                                        "description": "Время создания ВМ."
                                      },
                                      "description": {
                                        "description": "Описание ВМ."
                                      },
                                      "hw_version": {
                                        "description": "Версия виртуального оборудования."
                                      },
                                      "id": {
                                        "description": "Идентификатор исходной ВМ."
                                      },
                                      "incarnation": {
                                        "description": "Поколение (incarnation) ВМ."
                                      },
                                      "modified": {
                                        "description": "Время последнего изменения ВМ."
                                      },
                                      "name": {
                                        "description": "Имя ВМ."
                                      },
                                      "os_name": {
                                        "description": "ОС ВМ."
                                      },
                                      "os_profile": {
                                        "description": "Идентификатор образа ОС строкой; `null`, если в метаданных не строка или его нет.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "os_type": {
                                        "description": "Тип ОС."
                                      },
                                      "ram": {
                                        "description": "Объём памяти."
                                      },
                                      "vcpu_class": {
                                        "description": "Класс vCPU."
                                      },
                                      "vdc": {
                                        "description": "Идентификатор исходного ДЦ."
                                      }
                                    },
                                    "required": [
                                      "id",
                                      "name",
                                      "description",
                                      "vdc",
                                      "cpus",
                                      "ram",
                                      "vcpu_class",
                                      "hw_version",
                                      "os_type",
                                      "os_name",
                                      "created",
                                      "modified",
                                      "incarnation",
                                      "GI_object"
                                    ],
                                    "type": "object"
                                  }
                                },
                                "required": [
                                  "dataset",
                                  "duration",
                                  "local_ip",
                                  "peer_ip",
                                  "finished"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View Import Area"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка запроса к БД при получении списка import area."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-import-area-process": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Process Import Area\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25224` | can't parse dataset name {0} | Имя dataset диска не соответствует ожидаемому формату zvol — разобрать его не удалось. |\n| `-25223` | port address {0} of a network {1} exists already | IP-адрес порта импортируемой ВМ уже занят в указанной сети. |\n| `-25222` | port mac {0} exists already | MAC-адрес порта импортируемой ВМ уже используется. |\n| `-25221` | Internal error while validating port address {0} of a network {1} | Внутренняя ошибка при проверке уникальности адреса порта в сети. |\n| `-25220` | Internal error while validating port mac {0} | Внутренняя ошибка при проверке уникальности MAC порта. |\n| `-25210` | new Console ports allocations failed | Не удалось выделить новые консольные порты для импортируемой ВМ. |\n| `-25209` | Can't retreive pool map | Не удалось сопоставить пул элемента import area с нодой (нет pool_guid или пула в карте пулов). |\n| `-25208` | IDs regen failed: {0} | Ошибка при перегенерации идентификаторов ВМ в транзакции импорта. |\n| `-25207` | Import area item has no VM id | В vm_item элемента import area отсутствует корректный VM id. |\n| `-25206` | Import area item is not finished | Перенос элемента import area ещё не завершён — дождитесь признака finished. |\n| `-25205` | VM item is not defined | Указанный элемент import area не найден либо не содержит vm_item. |\n| `-3577` | Network port address conflicts with skip or network IP family: {0} | Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети. |\n| `-3550` | *динамическое сообщение* | Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя. |\n| `-3549` | Failed to add nic: {0} | Ошибка БД при создании записи NIC. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-210` | VM generation failed: {0} | Ошибка транзакции создания ВМ (вставка ВМ, дисков, NIC или консольных портов). |\n| `-78` | DB error: {0} | Ошибка запроса к БД при обработке import area. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-import-area-process",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-import-area-process",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "item": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "regen_IDs": {
                        "default": null,
                        "type": [
                          "boolean",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "item"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "id": {
                                  "description": "Идентификатор восстановленной ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "message": {
                                  "description": "Всегда `VM has been restored`.",
                                  "type": "string"
                                }
                              },
                              "required": [
                                "message",
                                "id"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25224,
                        -25223,
                        -25222,
                        -25221,
                        -25220,
                        -25210,
                        -25209,
                        -25208,
                        -25207,
                        -25206,
                        -25205,
                        -3577,
                        -3550,
                        -3549,
                        -403,
                        -210,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Process Import Area"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25224": "Имя dataset диска не соответствует ожидаемому формату zvol — разобрать его не удалось.",
          "-25223": "IP-адрес порта импортируемой ВМ уже занят в указанной сети.",
          "-25222": "MAC-адрес порта импортируемой ВМ уже используется.",
          "-25221": "Внутренняя ошибка при проверке уникальности адреса порта в сети.",
          "-25220": "Внутренняя ошибка при проверке уникальности MAC порта.",
          "-25210": "Не удалось выделить новые консольные порты для импортируемой ВМ.",
          "-25209": "Не удалось сопоставить пул элемента import area с нодой (нет pool_guid или пула в карте пулов).",
          "-25208": "Ошибка при перегенерации идентификаторов ВМ в транзакции импорта.",
          "-25207": "В vm_item элемента import area отсутствует корректный VM id.",
          "-25206": "Перенос элемента import area ещё не завершён — дождитесь признака finished.",
          "-25205": "Указанный элемент import area не найден либо не содержит vm_item.",
          "-3577": "Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети.",
          "-3550": "Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя.",
          "-3549": "Ошибка БД при создании записи NIC.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-210": "Ошибка транзакции создания ВМ (вставка ВМ, дисков, NIC или консольных портов).",
          "-78": "Ошибка запроса к БД при обработке import area."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-inventory": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View VM Inventory\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-200` | Can't get 'node status' from cluster-management | Не удалось получить статус нод от cluster-management — инвентаризация невозможна. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-inventory",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-inventory",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Инвентаризация по пулам (режим кластера по умолчанию).",
                                  "properties": {
                                    "VMs": {
                                      "additionalProperties": {
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "description": "Статусы ВМ, которые сообщили узлы: ключ — идентификатор ВМ строкой, значение —\nкод статуса ВМ.",
                                      "type": "object"
                                    },
                                    "discrepancy": {
                                      "description": "Расхождения между учётом ВМ в кластере и тем, что сообщили узлы. Каждый\nэлемент — пара `[id в учёте, id от узла]`: `[id, null]` — ВМ есть в учёте, но\nеё не сообщил ни один узел; `[null, id]` — узел сообщил ВМ, которой нет в учёте.",
                                      "items": {
                                        "maxItems": 2,
                                        "minItems": 2,
                                        "prefixItems": [
                                          {
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          },
                                          {
                                            "format": "int32",
                                            "type": [
                                              "integer",
                                              "null"
                                            ]
                                          }
                                        ],
                                        "type": "array"
                                      },
                                      "type": "array"
                                    }
                                  },
                                  "required": [
                                    "discrepancy",
                                    "VMs"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "additionalProperties": false,
                                  "description": "Инвентаризация по узлам: пустой объект — признак завершения.",
                                  "type": "object"
                                }
                              ],
                              "description": "Итог инвентаризации ВМ. Форма зависит от режима инвентаризации кластера."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -200
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View VM Inventory"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-200": "Не удалось получить статус нод от cluster-management — инвентаризация невозможна."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View VM List, View VM Infrastructure Details\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | DB error: {0} | Ошибка запроса к БД при получении списка ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null
                      },
                      "vdc": {
                        "default": null,
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "items": {
                                    "description": "Запись ВМ в списке.",
                                    "properties": {
                                      "GI_object": {
                                        "description": "ВМ — объект федерации кластеров: `1` — да, `0` — нет; `null`, если признак\nне задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "address": {
                                        "description": "IPv4-адрес первого сетевого интерфейса; `null`, если адреса нет.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "address_v6": {
                                        "description": "IPv6-адреса первого сетевого интерфейса; пустой массив, если адресов нет.",
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      },
                                      "admin_status": {
                                        "description": "Желаемый (административный) статус ВМ, код из словаря `vm-statuses`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "cpu_count": {
                                        "description": "Число vCPU.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "create_completed": {
                                        "description": "Создание ВМ завершено: `1` — да, `0` — нет; `null`, если признак не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "hw_version": {
                                        "description": "Версия виртуального оборудования; без `objective` — `null`, если не\nзадана, с `objective` — `0`.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "incarnation": {
                                        "description": "Номер ревизии записи ВМ: время последнего изменения в десятых долях секунды.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "locked": {
                                        "description": "ВМ заблокирована выполняющейся операцией: `1` — да, `0` — нет; `null`,\nесли признак не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "memory_count": {
                                        "description": "Объём памяти ВМ в байтах.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "modified": {
                                        "description": "Время последнего изменения ВМ, секунды Unix.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "node": {
                                        "description": "Узел, на котором размещена ВМ; `null`, если узел не известен. Ключ есть\nтолько у вызывающего с правом просмотра инфраструктурных деталей.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "nvme": {
                                        "description": "Диски ВМ подключаются как NVMe.",
                                        "type": "boolean"
                                      },
                                      "oper_status": {
                                        "description": "Текущий (наблюдаемый) статус ВМ — то же значение, что `vm_status`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "oper_status_ts": {
                                        "description": "Время последней смены наблюдаемого статуса, секунды Unix; `0`, если\nстатус ещё не известен.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "os_profile": {
                                        "description": "Профиль (образ) ОС, из которого создана ВМ; `null`, если не задан.",
                                        "format": "uuid",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "os_type": {
                                        "description": "Тип ОС, числовой идентификатор.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "pool": {
                                        "description": "GUID пула хранения ВМ, десятичное число строкой.",
                                        "type": "string"
                                      },
                                      "rstart": {
                                        "description": "ВМ запущена на узле, отличном от владельца пула: `1` — да, `0` — нет. Ключ\nесть только у вызывающего с правом просмотра инфраструктурных деталей.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "service": {
                                        "description": "Служебный признак ВМ; у обычной ВМ — `0`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "storage_provisioned": {
                                        "description": "Суммарный размер дисков ВМ в байтах.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "vcpu_class": {
                                        "description": "Класс vCPU.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vdc_id": {
                                        "description": "Идентификатор виртуального ЦОД, которому принадлежит ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vm_id": {
                                        "description": "Идентификатор ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vm_name": {
                                        "description": "Имя ВМ.",
                                        "type": "string"
                                      },
                                      "vm_status": {
                                        "description": "Текущий (наблюдаемый) статус ВМ, код из словаря `vm-statuses`; `0`, если\nстатус ещё не известен.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "vdc_id",
                                      "vm_id",
                                      "vm_name",
                                      "vm_status",
                                      "admin_status",
                                      "oper_status",
                                      "oper_status_ts",
                                      "os_type",
                                      "cpu_count",
                                      "memory_count",
                                      "storage_provisioned",
                                      "address_v6",
                                      "pool",
                                      "vcpu_class",
                                      "service",
                                      "nvme",
                                      "modified",
                                      "incarnation"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "Запись ВМ в списке.",
                                    "properties": {
                                      "GI_object": {
                                        "description": "ВМ — объект федерации кластеров: `1` — да, `0` — нет; `null`, если признак\nне задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "address": {
                                        "description": "IPv4-адрес первого сетевого интерфейса; `null`, если адреса нет.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "address_v6": {
                                        "description": "IPv6-адреса первого сетевого интерфейса; пустой массив, если адресов нет.",
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      },
                                      "admin_status": {
                                        "description": "Желаемый (административный) статус ВМ, код из словаря `vm-statuses`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "cpu_count": {
                                        "description": "Число vCPU.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "create_completed": {
                                        "description": "Создание ВМ завершено: `1` — да, `0` — нет; `null`, если признак не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "hw_version": {
                                        "description": "Версия виртуального оборудования; без `objective` — `null`, если не\nзадана, с `objective` — `0`.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "incarnation": {
                                        "description": "Номер ревизии записи ВМ: время последнего изменения в десятых долях секунды.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "locked": {
                                        "description": "ВМ заблокирована выполняющейся операцией: `1` — да, `0` — нет; `null`,\nесли признак не задан.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "memory_count": {
                                        "description": "Объём памяти ВМ в байтах.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "modified": {
                                        "description": "Время последнего изменения ВМ, секунды Unix.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "node": {
                                        "description": "Узел, на котором размещена ВМ; `null`, если узел не известен. Ключ есть\nтолько у вызывающего с правом просмотра инфраструктурных деталей.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "nvme": {
                                        "description": "Диски ВМ подключаются как NVMe.",
                                        "type": "boolean"
                                      },
                                      "oper_status": {
                                        "description": "Текущий (наблюдаемый) статус ВМ — то же значение, что `vm_status`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "oper_status_ts": {
                                        "description": "Время последней смены наблюдаемого статуса, секунды Unix; `0`, если\nстатус ещё не известен.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "os_profile": {
                                        "description": "Профиль (образ) ОС, из которого создана ВМ; `null`, если не задан.",
                                        "format": "uuid",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "os_type": {
                                        "description": "Тип ОС, числовой идентификатор.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "pool": {
                                        "description": "GUID пула хранения ВМ, десятичное число строкой.",
                                        "type": "string"
                                      },
                                      "rstart": {
                                        "description": "ВМ запущена на узле, отличном от владельца пула: `1` — да, `0` — нет. Ключ\nесть только у вызывающего с правом просмотра инфраструктурных деталей.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "service": {
                                        "description": "Служебный признак ВМ; у обычной ВМ — `0`.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "storage_provisioned": {
                                        "description": "Суммарный размер дисков ВМ в байтах.",
                                        "format": "int64",
                                        "type": "integer"
                                      },
                                      "vcpu_class": {
                                        "description": "Класс vCPU.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vdc_id": {
                                        "description": "Идентификатор виртуального ЦОД, которому принадлежит ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vm_id": {
                                        "description": "Идентификатор ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "vm_name": {
                                        "description": "Имя ВМ.",
                                        "type": "string"
                                      },
                                      "vm_status": {
                                        "description": "Текущий (наблюдаемый) статус ВМ, код из словаря `vm-statuses`; `0`, если\nстатус ещё не известен.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "vdc_id",
                                      "vm_id",
                                      "vm_name",
                                      "vm_status",
                                      "admin_status",
                                      "oper_status",
                                      "oper_status_ts",
                                      "os_type",
                                      "cpu_count",
                                      "memory_count",
                                      "storage_provisioned",
                                      "address_v6",
                                      "pool",
                                      "vcpu_class",
                                      "service",
                                      "nvme",
                                      "modified",
                                      "incarnation"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "object"
                                }
                              ],
                              "description": "ВМ: массив, а с параметром `objective` — объект с ключом `vm_id` строкой."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View VM List",
          "View VM Infrastructure Details"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка запроса к БД при получении списка ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-migrate": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Live Migrate VM\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25308` | No free 'send-receive' ports. Please try later | Все send-receive порты заняты — повторите попытку позже. |\n| `-25307` | Unable to determine node for migration pool, not imported? | Не удалось определить ноду целевого пула — возможно, пул не импортирован. |\n| `-25306` | Migration not offlined VM is not possible | ВМ не остановлена — миграция возможна только для offline ВМ. |\n| `-25305` | Migration to the same pool is not possible | Целевой пул совпадает с текущим пулом ВМ. |\n| `-25304` | Unable to determine node for migration VM | Не удалось получить данные ВМ и определить её ноду для миграции. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-1610` | Target pool equals current pool | Целевой пул совпадает с текущим пулом ВМ. |\n| `-1609` | Target pool not found | Целевого пула нет. |\n| `-1608` | Live migration is not available: bhyve port pool exhausted | Пул портов bhyve для переноса ВМ исчерпан. |\n| `-1607` | Target node equals current node | Целевой узел совпадает с текущим узлом ВМ. |\n| `-1606` | Target node not found | Целевого узла нет. |\n| `-1605` | VM state is not allowed for migration | Состояние ВМ не допускает миграцию выбранного типа. |\n| `-1604` | Access denied to VM | ВМ вне зоны доступа вызывающего. |\n| `-1603` | VM not found | ВМ не найдена. |\n| `-1602` | Bad params for migration_type | Набор параметров не соответствует migration_type: нужен target_node_id для переноса ВМ на узел или target_pool_id для переноса хранилища. |\n| `-1601` | Bad migration_type value | migration_type отличается от 1 и 2. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах миграции ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-migrate",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-migrate",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "migration_type": {
                        "description": "Deliberately **not** validated by `validator`: the allowed set `{1, 2}`\nis checked in [`validate_cross_fields`], so a wrong value surfaces as the\ndocumented domain code `-1601 VM_MIGRATE_BAD_TYPE` instead of the generic\n`JsonRpcValidationError` that `parse_params` produces for any\n`validate()` failure.",
                        "format": "int16",
                        "maximum": 32767,
                        "minimum": -32768,
                        "type": "integer"
                      },
                      "switchover_ms": {
                        "default": null,
                        "format": "uint32",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "target_node_id": {
                        "default": null,
                        "format": "int32",
                        "minimum": 1,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "target_pool_id": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "timeout_sec": {
                        "default": null,
                        "format": "uint32",
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "migration_type",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "accepted": {
                                  "description": "Миграция принята к выполнению; всегда `true`.",
                                  "type": "boolean"
                                },
                                "migration_id": {
                                  "description": "Идентификатор миграции; по нему ход миграции запрашивают методом\n`vm-migrate-status`. Совпадает с `id` запроса.",
                                  "format": "uuid",
                                  "type": "string"
                                },
                                "migration_type": {
                                  "description": "Тип миграции из запроса: `1` — ВМ переносится на другой узел, `2` —\nпереносится хранилище ВМ.",
                                  "format": "int16",
                                  "maximum": 32767,
                                  "minimum": -32768,
                                  "type": "integer"
                                },
                                "vm_id": {
                                  "description": "Идентификатор мигрируемой ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "migration_id",
                                "vm_id",
                                "migration_type",
                                "accepted"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25308,
                        -25307,
                        -25306,
                        -25305,
                        -25304,
                        -9707,
                        -9706,
                        -1611,
                        -1610,
                        -1609,
                        -1608,
                        -1607,
                        -1606,
                        -1605,
                        -1604,
                        -1603,
                        -1602,
                        -1601,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Live Migrate VM"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25308": "Все send-receive порты заняты — повторите попытку позже.",
          "-25307": "Не удалось определить ноду целевого пула — возможно, пул не импортирован.",
          "-25306": "ВМ не остановлена — миграция возможна только для offline ВМ.",
          "-25305": "Целевой пул совпадает с текущим пулом ВМ.",
          "-25304": "Не удалось получить данные ВМ и определить её ноду для миграции.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-1611": "По ВМ уже идёт миграция.",
          "-1610": "Целевой пул совпадает с текущим пулом ВМ.",
          "-1609": "Целевого пула нет.",
          "-1608": "Пул портов bhyve для переноса ВМ исчерпан.",
          "-1607": "Целевой узел совпадает с текущим узлом ВМ.",
          "-1606": "Целевого узла нет.",
          "-1605": "Состояние ВМ не допускает миграцию выбранного типа.",
          "-1604": "ВМ вне зоны доступа вызывающего.",
          "-1603": "ВМ не найдена.",
          "-1602": "Набор параметров не соответствует migration_type: нужен target_node_id для переноса ВМ на узел или target_pool_id для переноса хранилища.",
          "-1601": "migration_type отличается от 1 и 2.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах миграции ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-migrate-status": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View VM Migration Status\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-1612` | Migration not found | Миграции с указанным идентификатором нет. |\n| `-1604` | Access denied to VM | ВМ вне зоны доступа вызывающего. |\n| `-1602` | Bad params for migration_type | Набор параметров не соответствует migration_type: нужен target_node_id для переноса ВМ на узел или target_pool_id для переноса хранилища. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка обращения к БД на методах миграции ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-migrate-status",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-migrate-status",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "migration_id": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "migration_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "properties": {
                                "controller_status": {
                                  "additionalProperties": true,
                                  "description": "Ход операции по данным узлов: ключ — направление (например, `send`,\n`receive`), значение передаётся как его сообщил источник. В начале\nмиграции — пустой объект.",
                                  "type": "object"
                                },
                                "created_at": {
                                  "description": "Время создания, Unix-время в секундах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "error": {
                                  "description": "Описание ошибки при сбое; форма задаётся источником ошибки. `null`, если\nсбоя нет."
                                },
                                "finished_at": {
                                  "description": "Время завершения, Unix-время в секундах; `null`, пока миграция не завершена.",
                                  "format": "int64",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "migration_id": {
                                  "description": "Идентификатор миграции.",
                                  "format": "uuid",
                                  "type": "string"
                                },
                                "migration_type": {
                                  "description": "Тип миграции: `1` — ВМ переносится на другой узел, `2` — холодный перенос\nхранилища ВМ.",
                                  "format": "int16",
                                  "maximum": 32767,
                                  "minimum": -32768,
                                  "type": "integer"
                                },
                                "phase": {
                                  "description": "Текущая фаза миграции; при сбое — фаза, на которой он произошёл.",
                                  "enum": [
                                    "preparing",
                                    "replicating_storage",
                                    "receiving",
                                    "sending",
                                    "running",
                                    "finalizing",
                                    "done",
                                    "receive_failed",
                                    "send_failed",
                                    "storage_failed",
                                    "timeout",
                                    "cleanup_failed"
                                  ],
                                  "type": "string"
                                },
                                "progress": {
                                  "description": "Общий процент выполнения, 0–100.",
                                  "format": "int16",
                                  "maximum": 32767,
                                  "minimum": -32768,
                                  "type": "integer"
                                },
                                "source_node_id": {
                                  "description": "Узел-источник; `null`, если ещё не определён.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "source_pool_id": {
                                  "description": "GUID пула-источника — десятичное число строкой; `null`, если не определён.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "state": {
                                  "description": "Состояние миграции.",
                                  "enum": [
                                    "accepted",
                                    "running",
                                    "done",
                                    "failed"
                                  ],
                                  "type": "string"
                                },
                                "target_node_id": {
                                  "description": "Узел назначения; `null`, если ещё не определён.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "target_pool_id": {
                                  "description": "GUID пула назначения — десятичное число строкой; `null`, если не определён.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "updated_at": {
                                  "description": "Время последнего обновления, Unix-время в секундах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "vm_id": {
                                  "description": "Идентификатор мигрируемой ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "migration_id",
                                "vm_id",
                                "migration_type",
                                "state",
                                "phase",
                                "progress",
                                "controller_status",
                                "created_at",
                                "updated_at"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -1612,
                        -1604,
                        -1602,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View VM Migration Status"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-1612": "Миграции с указанным идентификатором нет.",
          "-1604": "ВМ вне зоны доступа вызывающего.",
          "-1602": "Набор параметров не соответствует migration_type: нужен target_node_id для переноса ВМ на узел или target_pool_id для переноса хранилища.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка обращения к БД на методах миграции ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-migration": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Migrate VM\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25308` | No free 'send-receive' ports. Please try later | Все send-receive порты заняты — повторите попытку позже. |\n| `-25307` | Unable to determine node for migration pool, not imported? | Не удалось определить ноду целевого пула — возможно, пул не импортирован. |\n| `-25306` | Migration not offlined VM is not possible | ВМ не остановлена — миграция возможна только для offline ВМ. |\n| `-25305` | Migration to the same pool is not possible | Целевой пул совпадает с текущим пулом ВМ. |\n| `-25304` | Unable to determine node for migration VM | Не удалось получить данные ВМ и определить её ноду для миграции. |\n| `-25300` | Method available to the Cluster master role only | Метод vm-migration доступен только роли Cluster master. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-4943` | VM agent does not support runtime configuration readout | VM-агент не поддерживает чтение runtime-конфигурации (устаревшая версия агента). |\n| `-4942` | target VM-agent node is not reachable | Целевая нода с VM-агентом недоступна — запрос не дошёл до агента. |\n| `-4941` | VM with ID=={0} is not running | ВМ не запущена — прочитать runtime-конфигурацию можно только у работающей ВМ. |\n| `-4940` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при миграции ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-migration",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-migration",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "migration_pool": {
                        "pattern": "^z\\d{2}$",
                        "type": "string"
                      },
                      "vm_id": {
                        "format": "int32",
                        "type": "integer"
                      }
                    },
                    "required": [
                      "migration_pool",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Строка вида `VM <id> migration completed`.",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25308,
                        -25307,
                        -25306,
                        -25305,
                        -25304,
                        -25300,
                        -9707,
                        -9706,
                        -4943,
                        -4942,
                        -4941,
                        -4940,
                        -1611,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Migrate VM"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25308": "Все send-receive порты заняты — повторите попытку позже.",
          "-25307": "Не удалось определить ноду целевого пула — возможно, пул не импортирован.",
          "-25306": "ВМ не остановлена — миграция возможна только для offline ВМ.",
          "-25305": "Целевой пул совпадает с текущим пулом ВМ.",
          "-25304": "Не удалось получить данные ВМ и определить её ноду для миграции.",
          "-25300": "Метод vm-migration доступен только роли Cluster master.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-4943": "VM-агент не поддерживает чтение runtime-конфигурации (устаревшая версия агента).",
          "-4942": "Целевая нода с VM-агентом недоступна — запрос не дошёл до агента.",
          "-4941": "ВМ не запущена — прочитать runtime-конфигурацию можно только у работающей ВМ.",
          "-4940": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при миграции ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-perfdata": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View VM Performance\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-4930` | There's no VM id=={0} | ВМ с указанным id не существует. |\n| `-4925` | Error upon perfdata retreival | Внутренняя ошибка при получении метрик из InfluxDB. |\n| `-4923` | Error upon perfdata retreival: {0} | HTTP-ошибка при выполнении запроса метрик к InfluxDB. |\n| `-4916` | Bad end_time value | Параметр end_time имеет недопустимое значение. |\n| `-4915` | Bad begin_time value | Параметр begin_time имеет недопустимое значение. |\n| `-4912` | Bad slice value | Параметр slice имеет недопустимое значение. |\n| `-4911` | Bad interval value | Параметр interval имеет недопустимое значение. |\n| `-4907` | Bad metric value | Параметр metric имеет недопустимое значение. |\n| `-3912` | Bad slice value | Параметр slice в node-perfdata имеет недопустимое значение. |\n| `-3911` | Bad interval value | Параметр interval в node-perfdata имеет недопустимое значение. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-perfdata",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-perfdata",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "begin_time": {
                        "default": null,
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "end_time": {
                        "default": null,
                        "format": "int64",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "interval": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "metric": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "slice": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -4930,
                        -4925,
                        -4923,
                        -4916,
                        -4915,
                        -4912,
                        -4911,
                        -4907,
                        -3912,
                        -3911,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View VM Performance"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-4930": "ВМ с указанным id не существует.",
          "-4925": "Внутренняя ошибка при получении метрик из InfluxDB.",
          "-4923": "HTTP-ошибка при выполнении запроса метрик к InfluxDB.",
          "-4916": "Параметр end_time имеет недопустимое значение.",
          "-4915": "Параметр begin_time имеет недопустимое значение.",
          "-4912": "Параметр slice имеет недопустимое значение.",
          "-4911": "Параметр interval имеет недопустимое значение.",
          "-4907": "Параметр metric имеет недопустимое значение.",
          "-3912": "Параметр slice в node-perfdata имеет недопустимое значение.",
          "-3911": "Параметр interval в node-perfdata имеет недопустимое значение.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-profiles": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View VM Profiles\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-2300` | Couldn't get profiles list | Ошибка запроса к БД при получении списка OS-профилей. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-profiles",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-profiles",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "properties": {
                                  "id": {
                                    "description": "Идентификатор типа ОС.",
                                    "format": "int32",
                                    "type": "integer"
                                  },
                                  "name": {
                                    "description": "Название типа ОС.",
                                    "type": "string"
                                  },
                                  "profiles": {
                                    "description": "Профили ОС этого типа, видимые вызывающему.",
                                    "items": {
                                      "properties": {
                                        "description": {
                                          "description": "Описание профиля; `null`, если не задано.",
                                          "type": [
                                            "string",
                                            "null"
                                          ]
                                        },
                                        "id": {
                                          "description": "Идентификатор профиля ОС; его передают в `os_profile` метода `vms-create`.",
                                          "format": "uuid",
                                          "type": "string"
                                        },
                                        "min_size": {
                                          "description": "Минимальный размер системного диска в байтах; `null`, если не задан.",
                                          "format": "int64",
                                          "type": [
                                            "integer",
                                            "null"
                                          ]
                                        },
                                        "name": {
                                          "description": "Название профиля.",
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "id",
                                        "name"
                                      ],
                                      "type": "object"
                                    },
                                    "type": "array"
                                  }
                                },
                                "required": [
                                  "id",
                                  "name",
                                  "profiles"
                                ],
                                "type": "object"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -2300,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View VM Profiles"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-2300": "Ошибка запроса к БД при получении списка OS-профилей.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-ratelimit-disk": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Rate Limit VM Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-7330` | Failed to update ratelimit: {0} | Ошибка БД при обновлении значения ratelimit. |\n| `-7329` | Can't get vm item: id=={0} | Не удалось получить item ВМ из БД. |\n| `-7328` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-7325` | vm_id=={0} has no disk with guid=={1} | У ВМ нет диска с указанным guid. |\n| `-7324` | vm_id=={0} has no assigned disk_guid=={1} | Указанный диск не привязан к слоту этой ВМ. |\n| `-7323` | VM with hardware version == 3 can't be managed via v4 method | ВМ имеет hardware version 3 — метод v4 недоступен, сначала обновите версию ВМ. |\n| `-7322` | Bad disk_guid param: {0} | Параметр disk_guid не удалось разобрать как число. |\n| `-7321` | VM id=={0} doesn't exists | ВМ с указанным id не существует. |\n| `-7320` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-7318` | mbps_limit and/or iops_limit must be defined | В запросе не передан ни mbps_limit, ни iops_limit — нужен хотя бы один. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при установке ratelimit диска. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-ratelimit-disk",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-ratelimit-disk",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "disk_guid": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "iops_limit": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "mbps_limit": {
                        "default": null,
                        "description": "Double-option: absent → `None` (leave the column unchanged); explicit `null` →\n`Some(None)` (clear the limit → SQL NULL); value → `Some(Some(v))`.",
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "disk_guid",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Итог установки ограничений диска. Пустой объект — ограничения сохранены и\nприменены к запущенной ВМ.",
                              "properties": {
                                "message": {
                                  "description": "Есть только в двух случаях, см. значения.",
                                  "oneOf": [
                                    {
                                      "const": "Ratelimit has been set",
                                      "description": "ВМ выключена: ограничения сохранены, узел не вызывался.",
                                      "type": "string"
                                    },
                                    {
                                      "const": "Rate limit has been set, but running instance update failed.",
                                      "description": "Ограничения сохранены, но обновить запущенную ВМ на узле не удалось; код ответа — 11.",
                                      "type": "string"
                                    }
                                  ]
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -7330,
                        -7329,
                        -7328,
                        -7325,
                        -7324,
                        -7323,
                        -7322,
                        -7321,
                        -7320,
                        -7318,
                        -1611,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Rate Limit VM Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-7330": "Ошибка БД при обновлении значения ratelimit.",
          "-7329": "Не удалось получить item ВМ из БД.",
          "-7328": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-7325": "У ВМ нет диска с указанным guid.",
          "-7324": "Указанный диск не привязан к слоту этой ВМ.",
          "-7323": "ВМ имеет hardware version 3 — метод v4 недоступен, сначала обновите версию ВМ.",
          "-7322": "Параметр disk_guid не удалось разобрать как число.",
          "-7321": "ВМ с указанным id не существует.",
          "-7320": "ВМ с указанным id не существует или недоступна пользователю.",
          "-7318": "В запросе не передан ни mbps_limit, ни iops_limit — нужен хотя бы один.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при установке ratelimit диска."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-ratelimit-nic": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Rate Limit VM NIC\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-7230` | Failed to update ratelimit: {0} | Ошибка БД при обновлении значения ratelimit. |\n| `-7229` | Can't get vm item: id=={0} | Не удалось получить item ВМ из БД. |\n| `-7228` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-7224` | vm_id=={0} has no assigned port_id=={1} | Указанный port_id не привязан к этой ВМ. |\n| `-7223` | VM with hardware version == 3 can't be managed via v4 method | ВМ имеет hardware version 3 — метод v4 недоступен, сначала обновите версию ВМ. |\n| `-7220` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при установке ratelimit NIC. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-ratelimit-nic",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-ratelimit-nic",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "port_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "ratelimit_mbits": {
                        "default": null,
                        "description": "Double-option: absent → `None` (field required, rejected in handler);\nexplicit `null` → `Some(None)` (no limit → SQL NULL); value → `Some(Some(v))`.",
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "port_id",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Итог установки ограничения скорости сетевого интерфейса. Пустой объект —\nограничение сохранено и применено к запущенной ВМ.",
                              "properties": {
                                "message": {
                                  "description": "Есть только в двух случаях, см. значения.",
                                  "oneOf": [
                                    {
                                      "const": "Ratelimit has been set",
                                      "description": "ВМ выключена: ограничение сохранено, узел не вызывался.",
                                      "type": "string"
                                    },
                                    {
                                      "const": "Rate limit has been set, but running instance update failed.",
                                      "description": "Ограничение сохранено, но обновить запущенную ВМ на узле не удалось; код ответа — 10.",
                                      "type": "string"
                                    }
                                  ]
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -7230,
                        -7229,
                        -7228,
                        -7224,
                        -7223,
                        -7220,
                        -1611,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Rate Limit VM NIC"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-7230": "Ошибка БД при обновлении значения ratelimit.",
          "-7229": "Не удалось получить item ВМ из БД.",
          "-7228": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-7224": "Указанный port_id не привязан к этой ВМ.",
          "-7223": "ВМ имеет hardware version 3 — метод v4 недоступен, сначала обновите версию ВМ.",
          "-7220": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при установке ratelimit NIC."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-remove-disk": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove VM Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-45001` | *динамическое сообщение* | Ошибка обращения к БД в операциях SAN/Unified Storage. |\n| `-10101` | Unable to update VM datasets after creation: {0} | Ошибка обновления datasets ВМ по ответу storage после создания. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-4433` | Pool of VM isn't in consuming state | Пул ВМ не в состоянии consuming — операции с дисками недоступны. |\n| `-4430` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-4427` | DB error while setting the hold: {0} | Ошибка БД при установке hold на диск перед удалением. |\n| `-4424` | vm id=={0} must be stopped in order to remove disk | ВМ должна быть остановлена перед удалением диска. |\n| `-4423` | v3 VM has no ability to remove nic | ВМ версии v3 не поддерживает удаление диска — сначала обновите версию ВМ. |\n| `-4422` | Unable to retreive v4 item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-4420` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при удалении диска. |\n| `-35` | Pool is not present on the requested node | pools-get: на указанной ноде нет запрошенного пула. |\n| `-25` | Pool is not present on the requested node | pools-list: на указанной ноде нет запрошенного пула. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-remove-disk",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-remove-disk",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "disk_guid": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "disk_guid",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -45001,
                        -10101,
                        -9707,
                        -9706,
                        -4433,
                        -4430,
                        -4427,
                        -4424,
                        -4423,
                        -4422,
                        -4420,
                        -1611,
                        -403,
                        -219,
                        -78,
                        -35,
                        -25
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Remove VM Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-45001": "Ошибка обращения к БД в операциях SAN/Unified Storage.",
          "-10101": "Ошибка обновления datasets ВМ по ответу storage после создания.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-4433": "Пул ВМ не в состоянии consuming — операции с дисками недоступны.",
          "-4430": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-4427": "Ошибка БД при установке hold на диск перед удалением.",
          "-4424": "ВМ должна быть остановлена перед удалением диска.",
          "-4423": "ВМ версии v3 не поддерживает удаление диска — сначала обновите версию ВМ.",
          "-4422": "Не удалось получить v4-item ВМ из БД.",
          "-4420": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при удалении диска.",
          "-35": "pools-get: на указанной ноде нет запрошенного пула.",
          "-25": "pools-list: на указанной ноде нет запрошенного пула."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-remove-nic": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove VM NIC\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-3752` | DB error while removing a NIC | Ошибка БД при снятии блокировки адресов (ippool_blockaddr) при удалении NIC. |\n| `-3749` | Can't get pool map | Не удалось получить карту пулов кластера. |\n| `-3748` | Unable to retreive VM item: {0} | Не удалось получить item ВМ из БД. |\n| `-3746` | Can't find pool of VM {0} | Не удалось определить пул, в котором размещена ВМ. |\n| `-3729` | DB error while removing a NIC: {0} | Ошибка БД при удалении записи NIC. |\n| `-3727` | DB error while setting the hold: {0} | Ошибка БД при установке hold на порт перед удалением. |\n| `-3724` | vm id=={0} must be stopped in order to remove nic | ВМ должна быть остановлена перед удалением NIC. |\n| `-3723` | v3 VM has no ability to remove nic | ВМ версии v3 не поддерживает удаление NIC — сначала обновите версию ВМ. |\n| `-3722` | Unable to retreive v4 item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-3720` | No VM ID=={0} with port ID=={1} assigned | У ВМ с указанным id нет назначенного порта с указанным port_id. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при удалении NIC. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-remove-nic",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-remove-nic",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "port_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "port_id",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -3752,
                        -3749,
                        -3748,
                        -3746,
                        -3729,
                        -3727,
                        -3724,
                        -3723,
                        -3722,
                        -3720,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Remove VM NIC"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-3752": "Ошибка БД при снятии блокировки адресов (ippool_blockaddr) при удалении NIC.",
          "-3749": "Не удалось получить карту пулов кластера.",
          "-3748": "Не удалось получить item ВМ из БД.",
          "-3746": "Не удалось определить пул, в котором размещена ВМ.",
          "-3729": "Ошибка БД при удалении записи NIC.",
          "-3727": "Ошибка БД при установке hold на порт перед удалением.",
          "-3724": "ВМ должна быть остановлена перед удалением NIC.",
          "-3723": "ВМ версии v3 не поддерживает удаление NIC — сначала обновите версию ВМ.",
          "-3722": "Не удалось получить v4-item ВМ из БД.",
          "-3720": "У ВМ с указанным id нет назначенного порта с указанным port_id.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при удалении NIC."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-set": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Edit VM Settings\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-3244` | Boot media id == {0} doesn't exists | Boot media с указанным id нет в справочнике. |\n| `-3243` | Bad boot_media param value | Параметр boot_media не удалось разобрать как число. |\n| `-3242` | empty boot_media param | Параметр boot_media передан пустым (null). |\n| `-3241` | Unable to get boot media dictionary | Ошибка БД при получении справочника boot media. |\n| `-3234` | ram param value must be a multiple of 4096 (4 KiB) | Значение ram не кратно 4096 (4 KiB). |\n| `-3233` | ram param value is out of range 536870912..{0} | Значение ram вне диапазона от 536870912 байт до максимума кластера. |\n| `-3232` | Bad ram param value | Параметр ram не удалось разобрать как число. |\n| `-3231` | empty ram param | Параметр ram передан пустым (null). |\n| `-3223` | cpus param value is out of range 1..{0} | Значение cpus вне диапазона от 1 до максимума кластера. |\n| `-3222` | Bad cpus param value | Параметр cpus не удалось разобрать как число. |\n| `-3221` | empty cpus param | Параметр cpus передан пустым (null). |\n| `-3219` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-3212` | name param must be a non-empty string without leading/trailing whitespace | Параметр name пуст или содержит ведущие/замыкающие пробелы. |\n| `-3211` | name param cannot be null | Параметр name передан как null. |\n| `-3203` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-79` | DB update error: {0} | Ошибка БД при записи обновлённых параметров ВМ. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при изменении параметров ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-set",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-set",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vm_params": {
                        "properties": {
                          "boot_media": {
                            "default": null
                          },
                          "cpus": {
                            "default": null
                          },
                          "description": {
                            "default": null
                          },
                          "name": {
                            "default": null
                          },
                          "ram": {
                            "default": null
                          }
                        },
                        "type": "object"
                      }
                    },
                    "required": [
                      "id",
                      "vm_params"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "additionalProperties": false,
                                  "description": "Изменения сохранены и применены на узле ВМ.",
                                  "type": "object"
                                },
                                {
                                  "description": "В `vm_params` нет полей, которые можно изменить; ВМ не менялась.",
                                  "properties": {
                                    "result": {
                                      "properties": {
                                        "code": {
                                          "description": "Код итога; всегда `1`.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "message": {
                                          "description": "Сообщение вида `Nothing to update for vm_id == <id>`.",
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "code",
                                        "message"
                                      ],
                                      "type": "object"
                                    }
                                  },
                                  "required": [
                                    "result"
                                  ],
                                  "type": "object"
                                }
                              ],
                              "description": "Пустой объект — изменения сохранены и применены на узле ВМ; объект с ключом\n`result` — изменять было нечего."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -9707,
                        -9706,
                        -3244,
                        -3243,
                        -3242,
                        -3241,
                        -3234,
                        -3233,
                        -3232,
                        -3231,
                        -3223,
                        -3222,
                        -3221,
                        -3219,
                        -3212,
                        -3211,
                        -3203,
                        -1611,
                        -403,
                        -219,
                        -79,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Edit VM Settings"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-3244": "Boot media с указанным id нет в справочнике.",
          "-3243": "Параметр boot_media не удалось разобрать как число.",
          "-3242": "Параметр boot_media передан пустым (null).",
          "-3241": "Ошибка БД при получении справочника boot media.",
          "-3234": "Значение ram не кратно 4096 (4 KiB).",
          "-3233": "Значение ram вне диапазона от 536870912 байт до максимума кластера.",
          "-3232": "Параметр ram не удалось разобрать как число.",
          "-3231": "Параметр ram передан пустым (null).",
          "-3223": "Значение cpus вне диапазона от 1 до максимума кластера.",
          "-3222": "Параметр cpus не удалось разобрать как число.",
          "-3221": "Параметр cpus передан пустым (null).",
          "-3219": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-3212": "Параметр name пуст или содержит ведущие/замыкающие пробелы.",
          "-3211": "Параметр name передан как null.",
          "-3203": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-79": "Ошибка БД при записи обновлённых параметров ВМ.",
          "-78": "Ошибка запроса к БД при изменении параметров ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-snapshot-list": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View All Snapshots, View Own User Snapshots\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-4107` | Unable to retreive snapshots list: {0} | Ошибка запроса к БД при получении списка snapshot'ов. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-snapshot-list",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-snapshot-list",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "objective": {
                        "default": null
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "items": {
                                    "description": "Снимок ВМ.",
                                    "properties": {
                                      "creation_time": {
                                        "description": "Время создания снимка, секунды Unix.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "guid": {
                                        "description": "Идентификатор снимка (GUID снимка в хранилище, десятичное число строкой).",
                                        "type": "string"
                                      },
                                      "name": {
                                        "description": "Имя снимка без префикса датасета (часть после `@`).",
                                        "type": "string"
                                      },
                                      "size": {
                                        "description": "Размер тома снимка в байтах; `null`, если не известен.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "guid",
                                      "name",
                                      "creation_time"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                {
                                  "additionalProperties": {
                                    "description": "Снимок ВМ.",
                                    "properties": {
                                      "creation_time": {
                                        "description": "Время создания снимка, секунды Unix.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "guid": {
                                        "description": "Идентификатор снимка (GUID снимка в хранилище, десятичное число строкой).",
                                        "type": "string"
                                      },
                                      "name": {
                                        "description": "Имя снимка без префикса датасета (часть после `@`).",
                                        "type": "string"
                                      },
                                      "size": {
                                        "description": "Размер тома снимка в байтах; `null`, если не известен.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      }
                                    },
                                    "required": [
                                      "guid",
                                      "name",
                                      "creation_time"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "object"
                                }
                              ],
                              "description": "Снимки ВМ по времени создания: массив, а с параметром `objective` — объект с\nключом `guid` снимка."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -4107,
                        -403
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View All Snapshots",
          "View Own User Snapshots"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-4107": "Ошибка запроса к БД при получении списка snapshot'ов.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-statuses": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** View VM Statuses, Web UI\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-7` | DB error: {0} | Ошибка запроса к БД при получении статусов ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-statuses",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-statuses",
                    "type": "string"
                  },
                  "params": {
                    "properties": {},
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": {
                                "type": "string"
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -403,
                        -7
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "View VM Statuses",
          "Web UI"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-7": "Ошибка запроса к БД при получении статусов ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vm-unlock": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Unlock VM\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25903` | VM unlock method available for Cluster master only | Метод vm-unlock доступен только роли Cluster master. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при снятии блокировки ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vm-unlock",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vm-unlock",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: блокировка с ВМ снята.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25903,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vm"
        ],
        "x-access": [
          "Unlock VM"
        ],
        "x-async": false,
        "x-error-reasons": {
          "-25903": "Метод vm-unlock доступен только роли Cluster master.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при снятии блокировки ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-add-disk": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Add VM Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-3448` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-3447` | vDC storage quota depleted | Добавление диска превысило бы квоту хранилища vDC. |\n| `-3446` | Internal error while getting quota usage info | Внутренняя ошибка при получении данных об использовании квот vDC. |\n| `-3445` | Slot {0} occupied already | Указанный slot уже занят другим диском. |\n| `-3444` | No free disk slots left | Все дисковые слоты ВМ уже заняты. |\n| `-3443` | a disk slot {0} is out of range 1..5 | Значение slot меньше 1 — допустимый диапазон 1..5. |\n| `-3442` | a disk slot {0} is out of range 1..5 | Значение slot больше 5 — допустимый диапазон 1..5. |\n| `-3430` | There is no free disk slots | У ВМ уже занято максимальное число дисковых слотов. |\n| `-3425` | Unable to retreive v4 item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-3423` | physical sector size value neither 512 nor 4096 | Физический размер сектора не равен 512 или 4096. |\n| `-3421` | logical sector size value neither 512 nor 4096 | Логический размер сектора не равен 512 или 4096. |\n| `-3420` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-3415` | disk has bad label length | Параметр label диска имеет недопустимую длину. |\n| `-3414` | disk has bad iops_limit value | Значение iops_limit диска вне допустимого диапазона. |\n| `-3413` | disk has bad mbps_limit value | Значение mbps_limit диска вне допустимого диапазона. |\n| `-3412` | Logical sector size ({0}) should be smaller or equal to physical sector size ({1}) | Логический размер сектора больше физического — так задавать нельзя. |\n| `-3411` | disk size value should be multiple of physical sector size value | Размер диска не кратен физическому размеру сектора. |\n| `-3410` | disk size value should be multiple of logical sector size value | Размер диска не кратен логическому размеру сектора. |\n| `-3409` | New disk size exceeds 2TB | Размер нового диска превышает 2 TB. |\n| `-3408` | Minimal size of new disk is 1GB | Размер нового диска меньше минимального 1 GB. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при добавлении диска. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-add-disk",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-add-disk",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "iops_limit": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "label": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "mbps_limit": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "sector_size": {
                        "properties": {
                          "logical": {
                            "format": "int32",
                            "type": [
                              "integer",
                              "null"
                            ]
                          },
                          "physical": {
                            "format": "int32",
                            "type": [
                              "integer",
                              "null"
                            ]
                          }
                        },
                        "type": [
                          "object",
                          "null"
                        ]
                      },
                      "size": {
                        "format": "int64",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "slot": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "size",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": true,
                              "description": "Добавленный диск в том виде, в каком его вернул агент хранилища, с поправками диспетчера:\nбез имени датасета и пула, слот в нумерации клиента, метка из запроса.",
                              "properties": {
                                "guid": {
                                  "description": "GUID диска — так, как его вернул агент (десятичное число строкой либо числом)."
                                },
                                "label": {
                                  "description": "Метка диска из запроса; ключа нет, если метка не задана.",
                                  "type": "string"
                                },
                                "sector_size": {
                                  "description": "Размеры сектора диска, байт.",
                                  "properties": {
                                    "logical": {
                                      "description": "Логический размер сектора, байт; ключа нет, если агент его не вернул.",
                                      "format": "int64",
                                      "type": "integer"
                                    },
                                    "physical": {
                                      "description": "Физический размер сектора, байт; ключа нет, если агент его не вернул.",
                                      "format": "int64",
                                      "type": "integer"
                                    }
                                  },
                                  "type": "object"
                                },
                                "size": {
                                  "description": "Размер диска в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "slot": {
                                  "description": "Номер слота диска в ВМ.",
                                  "format": "int64",
                                  "type": "integer"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -3448,
                        -3447,
                        -3446,
                        -3445,
                        -3444,
                        -3443,
                        -3442,
                        -3430,
                        -3425,
                        -3423,
                        -3421,
                        -3420,
                        -3415,
                        -3414,
                        -3413,
                        -3412,
                        -3411,
                        -3410,
                        -3409,
                        -3408,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Add VM Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-3448": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-3447": "Добавление диска превысило бы квоту хранилища vDC.",
          "-3446": "Внутренняя ошибка при получении данных об использовании квот vDC.",
          "-3445": "Указанный slot уже занят другим диском.",
          "-3444": "Все дисковые слоты ВМ уже заняты.",
          "-3443": "Значение slot меньше 1 — допустимый диапазон 1..5.",
          "-3442": "Значение slot больше 5 — допустимый диапазон 1..5.",
          "-3430": "У ВМ уже занято максимальное число дисковых слотов.",
          "-3425": "Не удалось получить v4-item ВМ из БД.",
          "-3423": "Физический размер сектора не равен 512 или 4096.",
          "-3421": "Логический размер сектора не равен 512 или 4096.",
          "-3420": "ВМ с указанным id не существует или недоступна пользователю.",
          "-3415": "Параметр label диска имеет недопустимую длину.",
          "-3414": "Значение iops_limit диска вне допустимого диапазона.",
          "-3413": "Значение mbps_limit диска вне допустимого диапазона.",
          "-3412": "Логический размер сектора больше физического — так задавать нельзя.",
          "-3411": "Размер диска не кратен физическому размеру сектора.",
          "-3410": "Размер диска не кратен логическому размеру сектора.",
          "-3409": "Размер нового диска превышает 2 TB.",
          "-3408": "Размер нового диска меньше минимального 1 GB.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при добавлении диска."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-add-nic": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Add VM NIC\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-3752` | DB error while removing a NIC | Ошибка БД при снятии блокировки адресов (ippool_blockaddr) при удалении NIC. |\n| `-3729` | DB error while removing a NIC: {0} | Ошибка БД при удалении записи NIC. |\n| `-3727` | DB error while setting the hold: {0} | Ошибка БД при установке hold на порт перед удалением. |\n| `-3599` | An error occureed upon retreiving networks of vDC: {0} | Ошибка БД при получении списка сетей vDC. |\n| `-3577` | Network port address conflicts with skip or network IP family: {0} | Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети. |\n| `-3565` | Bad address param | Параметр address не является корректным IP-адресом. |\n| `-3563` | Disabling ip_guard available on Isolated networks only | Отключить ip_guard можно только на сетях типа Isolated. |\n| `-3562` | Network id=={0} isn't assigned to vdc id=={1} | Указанная сеть не назначена на vDC этой ВМ — сначала назначьте сеть на vDC. |\n| `-3550` | *динамическое сообщение* | Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя. |\n| `-3549` | Failed to add nic: {0} | Ошибка БД при создании записи NIC. |\n| `-3548` | Unable to retreive VM item: {0} | Не удалось получить item ВМ из БД. |\n| `-3547` | Can't get pool map | Не удалось получить карту пулов кластера. |\n| `-3546` | Can't find pool of VM {0} | Не удалось определить пул, в котором размещена ВМ. |\n| `-3545` | Slot {0} occupied already | Указанный slot уже занят другим сетевым портом. |\n| `-3544` | No free network_port slots left | Все слоты сетевых портов ВМ уже заняты. |\n| `-3543` | a network_port slot {0} is out of range 1..5 | Значение slot меньше 1 — допустимый диапазон 1..5. |\n| `-3542` | a network_port slot {0} is out of range 1..5 | Значение slot больше 5 — допустимый диапазон 1..5. |\n| `-3530` | There are no free network_port slots | У ВМ уже занято максимальное число сетевых портов (5). |\n| `-3526` | vm id=={0} must be stopped in order to add nic | ВМ должна быть остановлена перед добавлением NIC. |\n| `-3525` | Unable to retreive VM item {0} | Не удалось получить данные ВМ и её портов из БД. |\n| `-3520` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-3508` | nic has bad ratelimit_mbits value | Значение ratelimit_mbits вне допустимого диапазона 0..99999. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при добавлении NIC. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-add-nic",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-add-nic",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "address": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "address_v6": {
                        "default": null,
                        "items": {
                          "type": "string"
                        },
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "ip_guard": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "mac": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "network_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "ratelimit_mbits": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "skip_v4": {
                        "default": false,
                        "type": "boolean"
                      },
                      "skip_v6": {
                        "default": false,
                        "type": "boolean"
                      },
                      "slot": {
                        "default": null,
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "id",
                      "network_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -3752,
                        -3729,
                        -3727,
                        -3599,
                        -3577,
                        -3565,
                        -3563,
                        -3562,
                        -3550,
                        -3549,
                        -3548,
                        -3547,
                        -3546,
                        -3545,
                        -3544,
                        -3543,
                        -3542,
                        -3530,
                        -3526,
                        -3525,
                        -3520,
                        -3508,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Add VM NIC"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-3752": "Ошибка БД при снятии блокировки адресов (ippool_blockaddr) при удалении NIC.",
          "-3729": "Ошибка БД при удалении записи NIC.",
          "-3727": "Ошибка БД при установке hold на порт перед удалением.",
          "-3599": "Ошибка БД при получении списка сетей vDC.",
          "-3577": "Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети.",
          "-3565": "Параметр address не является корректным IP-адресом.",
          "-3563": "Отключить ip_guard можно только на сетях типа Isolated.",
          "-3562": "Указанная сеть не назначена на vDC этой ВМ — сначала назначьте сеть на vDC.",
          "-3550": "Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя.",
          "-3549": "Ошибка БД при создании записи NIC.",
          "-3548": "Не удалось получить item ВМ из БД.",
          "-3547": "Не удалось получить карту пулов кластера.",
          "-3546": "Не удалось определить пул, в котором размещена ВМ.",
          "-3545": "Указанный slot уже занят другим сетевым портом.",
          "-3544": "Все слоты сетевых портов ВМ уже заняты.",
          "-3543": "Значение slot меньше 1 — допустимый диапазон 1..5.",
          "-3542": "Значение slot больше 5 — допустимый диапазон 1..5.",
          "-3530": "У ВМ уже занято максимальное число сетевых портов (5).",
          "-3526": "ВМ должна быть остановлена перед добавлением NIC.",
          "-3525": "Не удалось получить данные ВМ и её портов из БД.",
          "-3520": "ВМ с указанным id не существует или недоступна пользователю.",
          "-3508": "Значение ratelimit_mbits вне допустимого диапазона 0..99999.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при добавлении NIC."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-balloon": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set VM Memory Balloon\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-15412` | VM id=={0} has no enabled ballooning | У ВМ не включён ballooning (нет balloon slot). |\n| `-15410` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-15015` | VM ID=={0} is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при операции ballooning. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-balloon",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-balloon",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "bytes": {
                        "format": "int64",
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "bytes",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: узел применил новый целевой объём памяти balloon.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -15412,
                        -15410,
                        -15015,
                        -1611,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Set VM Memory Balloon"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-15412": "У ВМ не включён ballooning (нет balloon slot).",
          "-15410": "ВМ с указанным id не существует или недоступна пользователю.",
          "-15015": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при операции ballooning."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-clone": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create VM\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-3577` | Network port address conflicts with skip or network IP family: {0} | Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети. |\n| `-3550` | *динамическое сообщение* | Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя. |\n| `-3549` | Failed to add nic: {0} | Ошибка БД при создании записи NIC. |\n| `-2610` | clone generation failed: {0} | Параметры клона не собрать: у ВМ-источника нет образа ОС или гостевой конфигурации. |\n| `-2606` | source VM id=={0} is itself a clone; cloning a clone is not allowed | ВМ-источник сама является клоном; клон клона не создаётся. |\n| `-2605` | source VM id=={0} is managed by a service and cannot be cloned | ВМ-источник служебная и не клонируется. |\n| `-2603` | source VM id=={0} must be stopped to be cloned | ВМ-источник не остановлена. |\n| `-2602` | source VM id=={0} is locked | ВМ-источник заблокирована другой операцией. |\n| `-2601` | source VM id=={0} not found | ВМ-источник не найдена или вне зоны доступа вызывающего. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-256` | os_profile == {0} doesn't exist | OS-профиль с указанным id не существует. |\n| `-255` | Can't use pool (guid=={0}) since it's not consuming | Указанный пул не в состоянии consuming — размещать ВМ на нём нельзя. |\n| `-219` | Can't find nodeId of pool {0} | Не удалось определить ноду выбранного пула по карте пулов. |\n| `-217` | Internal error while getting quota usage info | Внутренняя ошибка при получении данных об использовании квот vDC. |\n| `-213` | vDC storage quota depleted | Создание ВМ превысило бы квоту хранилища vDC. |\n| `-210` | VM generation failed: {0} | Ошибка транзакции создания ВМ (вставка ВМ, дисков, NIC или консольных портов). |\n| `-209` | Can't find pool for the VM | Не удалось подобрать пул для размещения ВМ (авто-выбор не дал результата или указанный guid не найден). |\n| `-202` | *динамическое сообщение* | Параметр name отсутствует, пуст или не проходит валидацию. |\n| `-78` | clone db error: {0} | Ошибка обращения к БД при клонировании ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-clone",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-clone",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "description": {
                        "default": null,
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "name": {
                        "type": "string"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "name",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Карточка созданной ВМ.",
                              "properties": {
                                "GI_object": {
                                  "description": "ВМ создана учётной записью федерации: `1` — да, `0` — нет; `null`, если не задано.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "admin_status": {
                                  "description": "Код административного статуса ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "boot_media_id": {
                                  "description": "Идентификатор загрузочного носителя.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "cpu_priority": {
                                  "description": "Приоритет CPU ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "cpus": {
                                  "description": "Число vCPU.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "create_completed": {
                                  "description": "Создание ВМ завершено: `1` — да, `0` — нет; `null`, если не задано.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "created": {
                                  "description": "Время создания ВМ, Unix-время в секундах.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "description": {
                                  "description": "Описание ВМ; `null`, если не задано.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "disks": {
                                  "description": "Диски ВМ.",
                                  "items": {
                                    "properties": {
                                      "guid": {
                                        "description": "GUID диска строкой.",
                                        "type": "string"
                                      },
                                      "iops_limit": {
                                        "description": "Ограничение IOPS; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "label": {
                                        "description": "Метка диска; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "mbps_limit": {
                                        "description": "Ограничение пропускной способности в МБ/с; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "sector_size": {
                                        "description": "Размеры сектора диска в байтах.",
                                        "properties": {
                                          "logical": {
                                            "description": "Логический размер сектора.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "physical": {
                                            "description": "Физический размер сектора.",
                                            "format": "int32",
                                            "type": "integer"
                                          }
                                        },
                                        "required": [
                                          "logical",
                                          "physical"
                                        ],
                                        "type": "object"
                                      },
                                      "size": {
                                        "description": "Размер диска в байтах; `null`, если неизвестен.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "slot": {
                                        "description": "Номер слота диска в ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "guid",
                                      "slot",
                                      "sector_size"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "gc_id": {
                                  "description": "Идентификатор кастомизации гостевой ОС.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "gc_name": {
                                  "description": "Название кастомизации гостевой ОС.",
                                  "type": "string"
                                },
                                "hv_faults": {
                                  "description": "Реакция гипервизора на аварийные завершения.",
                                  "properties": {
                                    "sigabort": {
                                      "description": "Перезапуск при аварийном завершении гипервизора (SIGABRT).",
                                      "properties": {
                                        "interval": {
                                          "description": "Интервал учёта перезапусков; `0`, если не задан.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "restarts": {
                                          "description": "Допустимое число перезапусков за интервал; `0`, если не задано.",
                                          "format": "int32",
                                          "type": "integer"
                                        }
                                      },
                                      "required": [
                                        "interval",
                                        "restarts"
                                      ],
                                      "type": "object"
                                    }
                                  },
                                  "required": [
                                    "sigabort"
                                  ],
                                  "type": "object"
                                },
                                "hw_version": {
                                  "description": "Версия аппаратной платформы ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "id": {
                                  "description": "Идентификатор ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "incarnation": {
                                  "description": "Метка версии ВМ: время последнего изменения в десятых долях секунды.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "locked": {
                                  "description": "ВМ заблокирована выполняющейся операцией: `1` — да, `0` — нет; `null`, если не задано.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "modified": {
                                  "description": "Время последнего изменения ВМ, Unix-время в секундах.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "name": {
                                  "description": "Имя ВМ.",
                                  "type": "string"
                                },
                                "ndmp_address": {
                                  "description": "IP-адрес интерфейса пула хранения; `null`, если не задан.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "network_ports": {
                                  "description": "Сетевые порты ВМ.",
                                  "items": {
                                    "properties": {
                                      "address": {
                                        "description": "IPv4-адрес порта; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "address_v6": {
                                        "description": "IPv6-адреса порта; пустой массив, если их нет.",
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      },
                                      "ip_guard": {
                                        "description": "Защита от подмены IP: `1` — включена, `0` — выключена; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "mac": {
                                        "description": "MAC-адрес порта; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "mac_guard": {
                                        "description": "Защита от подмены MAC: `1` — включена, `0` — выключена; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "network_id": {
                                        "description": "Идентификатор сети.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "port_id": {
                                        "description": "Идентификатор порта.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "ratelimit_mbits": {
                                        "description": "Ограничение полосы порта в Мбит/с; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "slot": {
                                        "description": "Номер слота порта в ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "network_id",
                                      "port_id",
                                      "slot",
                                      "address_v6"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "node": {
                                  "description": "Узел, на котором ВМ исполняется или исполнялась последней; `null`, если неизвестен.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "nvme": {
                                  "description": "Диски ВМ подключаются как NVMe.",
                                  "type": "boolean"
                                },
                                "oper_status": {
                                  "description": "Код текущего (операционного) статуса ВМ; совпадает с `status`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "oper_status_ts": {
                                  "description": "Время последней смены операционного статуса, Unix-время в секундах.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "os_profile": {
                                  "description": "Идентификатор профиля ОС (образа), из которого создана ВМ; `null`, если не задан.",
                                  "format": "uuid",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "os_type": {
                                  "description": "Идентификатор типа ОС.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "pool": {
                                  "description": "GUID пула хранения ВМ строкой.",
                                  "type": "string"
                                },
                                "ram": {
                                  "description": "Объём памяти ВМ в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "root_dataset": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "format": "uint64",
                                          "minimum": 0,
                                          "type": "integer"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ],
                                      "description": "GUID числом; строкой, если значение не помещается в 64-битное целое."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "GUID корневого датасета ВМ; `null`, если не задан."
                                },
                                "root_dataset_name": {
                                  "description": "Имя корневого датасета ВМ; `null`, если не задано.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "rstart": {
                                  "description": "`1`, если ВМ исполняется на узле, отличном от владельца её пула; иначе `0`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "service": {
                                  "description": "Идентификатор сервиса, которому принадлежит ВМ; `0` — обычная ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "status": {
                                  "description": "Код текущего (операционного) статуса ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "uefi": {
                                  "description": "Путь к файлу прошивки UEFI; `null`, если не задан.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "vcpu_class": {
                                  "description": "Класс vCPU ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "vdc": {
                                  "description": "Идентификатор ВЦОД (виртуального центра обработки данных), в котором находится ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id",
                                "hw_version",
                                "name",
                                "cpus",
                                "ram",
                                "os_type",
                                "created",
                                "modified",
                                "incarnation",
                                "pool",
                                "rstart",
                                "cpu_priority",
                                "vcpu_class",
                                "boot_media_id",
                                "gc_id",
                                "gc_name",
                                "service",
                                "vdc",
                                "status",
                                "oper_status",
                                "oper_status_ts",
                                "admin_status",
                                "nvme",
                                "hv_faults",
                                "network_ports",
                                "disks"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -9707,
                        -9706,
                        -3577,
                        -3550,
                        -3549,
                        -2610,
                        -2606,
                        -2605,
                        -2603,
                        -2602,
                        -2601,
                        -1611,
                        -403,
                        -256,
                        -255,
                        -219,
                        -217,
                        -213,
                        -210,
                        -209,
                        -202,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Create VM"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-3577": "Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети.",
          "-3550": "Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя.",
          "-3549": "Ошибка БД при создании записи NIC.",
          "-2610": "Параметры клона не собрать: у ВМ-источника нет образа ОС или гостевой конфигурации.",
          "-2606": "ВМ-источник сама является клоном; клон клона не создаётся.",
          "-2605": "ВМ-источник служебная и не клонируется.",
          "-2603": "ВМ-источник не остановлена.",
          "-2602": "ВМ-источник заблокирована другой операцией.",
          "-2601": "ВМ-источник не найдена или вне зоны доступа вызывающего.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-256": "OS-профиль с указанным id не существует.",
          "-255": "Указанный пул не в состоянии consuming — размещать ВМ на нём нельзя.",
          "-219": "Не удалось определить ноду выбранного пула по карте пулов.",
          "-217": "Внутренняя ошибка при получении данных об использовании квот vDC.",
          "-213": "Создание ВМ превысило бы квоту хранилища vDC.",
          "-210": "Ошибка транзакции создания ВМ (вставка ВМ, дисков, NIC или консольных портов).",
          "-209": "Не удалось подобрать пул для размещения ВМ (авто-выбор не дал результата или указанный guid не найден).",
          "-202": "Параметр name отсутствует, пуст или не проходит валидацию.",
          "-78": "Ошибка обращения к БД при клонировании ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-cpu-priority": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set VM CPU Priority\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-3830` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при установке cpu_priority. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-cpu-priority",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-cpu-priority",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "cpu_priority": {
                        "format": "int32",
                        "maximum": 20,
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "cpu_priority",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "У выключенной ВМ приоритет меняется сразу, и ответ содержит `message`.\nУ запущенной ВМ приоритет применяет узел, и после его подтверждения `data` —\nпустой объект.",
                              "properties": {
                                "message": {
                                  "description": "Сообщение о том, что приоритет изменён без обращения к узлу, так как ВМ\nвыключена. Есть только в ответе для выключенной ВМ.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -3830,
                        -1611,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Set VM CPU Priority"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-3830": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при установке cpu_priority."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-create": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create VM, Set VM Service ID\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-25030` | The edge feature has not been enabled | Вызов метода edge при выключенной опции `feature.edge`. |\n| `-15011` | *динамическое сообщение* | Не удалось отправить запрос vms-create на создание VM edge. |\n| `-15010` | *динамическое сообщение* | Ошибка базы данных при создании edge. |\n| `-15009` | You need vDC admin privilege at vDC id=={0} to create shared edges there | Нет привилегии vDC-администратора в vDC, указанном в vdc_id. |\n| `-15007` | A slot without network_id | В network_ports передан слот без network_id. |\n| `-15006` | You've got no vDC admin privilege at a vDC with network_id=={0} assigned | Указанная сеть не входит ни в один vDC, где у пользователя есть привилегия администратора. |\n| `-15005` | You need vDC admin privilege in order to create edges | У пользователя нет привилегии vDC-администратора ни в одном vDC. |\n| `-15004` | Slot number {0} can't be used within an edge | Номер слота в network_ports больше четырёх. |\n| `-15003` | Network ports amount exceeds 4: {0} | В network_ports передано больше четырёх портов. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-3577` | Network port address conflicts with skip or network IP family: {0} | Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети. |\n| `-3550` | *динамическое сообщение* | Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя. |\n| `-3549` | Failed to add nic: {0} | Ошибка БД при создании записи NIC. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-299` | An error occurred upon retrieving networks of vDC: {0} | Ошибка БД при получении списка сетей vDC. |\n| `-298` | slot {0} has been defined twice in disk slots | Один и тот же slot указан дважды в списке disk. |\n| `-297` | Logical sector size ({0}) should be smaller or equal to physical sector size ({1}) | Логический размер сектора больше физического — так задавать нельзя. |\n| `-296` | disk size value should be multiple of physical sector size value | Размер диска не кратен физическому размеру сектора. |\n| `-295` | disk size value should be multiple of logical sector size value | Размер диска не кратен логическому размеру сектора. |\n| `-294` | physical sector size value neither 512 nor 4096 | Физический размер сектора не равен 512 или 4096. |\n| `-293` | empty value of physical sector size | Физический размер сектора передан пустым (null). |\n| `-292` | logical sector size value neither 512 nor 4096 | Логический размер сектора не равен 512 или 4096. |\n| `-291` | empty value of logical sector size | Логический размер сектора передан пустым (null). |\n| `-290` | Invalid guest section: {0} | Секция guest не прошла валидацию (структура или значения полей). |\n| `-289` | slot {0} has bad ratelimit_mbits value | У network_port в указанном слоте ratelimit_mbits вне диапазона 0..99999. |\n| `-288` | slot {0} has been defined twice in network_port slots | Один и тот же slot указан дважды в списке network_port. |\n| `-284` | slot value in network_port item is out of range 1-5 | В элементе network_port значение slot вне диапазона 1..5. |\n| `-278` | size value in disk item is out of range | В элементе disk значение size вне допустимого диапазона (от 10 MiB до максимума кластера). |\n| `-274` | slot value in disk item is out of range 1-5 | В элементе disk значение slot вне диапазона 1..5. |\n| `-265` | Invalid pool_selector value | Параметр pool_selector имеет недопустимое значение. |\n| `-263` | Disabling ip_guard available on Isolated networks only | Отключить ip_guard можно только на сетях типа Isolated. |\n| `-262` | Network id=={0} isn't assigned to vdc id=={1} | Указанная сеть не назначена на указанный vDC. |\n| `-261` | hostname parameter is mandatory | В секции guest отсутствует обязательный параметр hostname. |\n| `-260` | entire guest section omitted | В запросе отсутствует секция guest. |\n| `-259` | image is not available on the selected pool: {0} | Образ ОС ещё не раздан на выбранный пул. |\n| `-256` | os_profile == {0} doesn't exist | OS-профиль с указанным id не существует. |\n| `-255` | Can't use pool (guid=={0}) since it's not consuming | Указанный пул не в состоянии consuming — размещать ВМ на нём нельзя. |\n| `-254` | Minimal size for the first disk of cloud image profile {0} is {1} bytes | Первый диск меньше минимального размера образа выбранного cloud-image профиля. |\n| `-253` | Bad param os_profile value | Параметр os_profile не удалось разобрать как число. |\n| `-252` | No param os_profile at all | Параметр os_profile не передан. |\n| `-242` | disk slot {0} has bad label length | У диска в указанном слоте label длиннее 127 символов. |\n| `-241` | disk slot {0} has bad iops_limit value | У диска в указанном слоте iops_limit вне диапазона 0..999999999. |\n| `-240` | disk slot {0} has bad mbps_limit value | У диска в указанном слоте mbps_limit вне диапазона 0..99999. |\n| `-236` | cpu_priority param value is out of allowed range | Значение cpu_priority вне диапазона 1..20. |\n| `-235` | Bad cpu_priority param value | Параметр cpu_priority не удалось разобрать как число. |\n| `-234` | cpu_priority param is empty | Параметр cpu_priority передан как null. |\n| `-233` | Setting a password for the Administrator user is mandatory for windows-guests | Для windows-гостей в секции guest.users обязателен пользователь Administrator с паролем. |\n| `-229` | ram param value must be a multiple of 4096 (4 KiB) | Значение ram не кратно 4096 (4 KiB). |\n| `-228` | Bad vdc_id value | Параметр vdc_id не удалось разобрать как число. |\n| `-227` | No param vdc_id | Параметр vdc_id не передан. |\n| `-226` | Bad cpus value | Параметр cpus не удалось разобрать как число. |\n| `-225` | No param cpus at all | Параметр cpus не передан. |\n| `-224` | Empty param vdc_id | Параметр vdc_id передан как null. |\n| `-223` | Bad ram value | Параметр ram не удалось разобрать как число. |\n| `-222` | No param ram at all | Параметр ram не передан. |\n| `-219` | Can't find nodeId of pool {0} | Не удалось определить ноду выбранного пула по карте пулов. |\n| `-217` | Internal error while getting quota usage info | Внутренняя ошибка при получении данных об использовании квот vDC. |\n| `-213` | vDC storage quota depleted | Создание ВМ превысило бы квоту хранилища vDC. |\n| `-211` | vCPU max value {0} exceeded | Значение cpus превышает максимум vCPU кластера. |\n| `-210` | VM generation failed: {0} | Ошибка транзакции создания ВМ (вставка ВМ, дисков, NIC или консольных портов). |\n| `-209` | Can't find pool for the VM | Не удалось подобрать пул для размещения ВМ (авто-выбор не дал результата или указанный guid не найден). |\n| `-206` | ram param value exceeds maximal allowed {0} | Значение ram превышает максимум, настроенный в кластере. |\n| `-205` | Bad service_id value | Параметр service_id не число или вне диапазона 0..99. |\n| `-204` | Bad cpus value | Значение cpus меньше 1. |\n| `-203` | Bad ram value | Значение ram меньше минимальных 536870912 байт (512 MiB). |\n| `-202` | *динамическое сообщение* | Параметр name отсутствует, пуст или не проходит валидацию. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при создании ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-create",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-create",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "cpu_priority": true,
                      "cpus": true,
                      "description": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "disks": {
                        "items": true,
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "guest": true,
                      "name": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "network_ports": {
                        "items": true,
                        "type": [
                          "array",
                          "null"
                        ]
                      },
                      "os_profile": true,
                      "os_type": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "pool_selector": true,
                      "ram": true,
                      "service_id": true,
                      "vdc_id": true
                    },
                    "required": [],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Карточка созданной ВМ.",
                              "properties": {
                                "GI_object": {
                                  "description": "ВМ создана учётной записью федерации: `1` — да, `0` — нет; `null`, если не задано.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "admin_status": {
                                  "description": "Код административного статуса ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "boot_media_id": {
                                  "description": "Идентификатор загрузочного носителя.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "cpu_priority": {
                                  "description": "Приоритет CPU ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "cpus": {
                                  "description": "Число vCPU.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "create_completed": {
                                  "description": "Создание ВМ завершено: `1` — да, `0` — нет; `null`, если не задано.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "created": {
                                  "description": "Время создания ВМ, Unix-время в секундах.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "description": {
                                  "description": "Описание ВМ; `null`, если не задано.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "disks": {
                                  "description": "Диски ВМ.",
                                  "items": {
                                    "properties": {
                                      "guid": {
                                        "description": "GUID диска строкой.",
                                        "type": "string"
                                      },
                                      "iops_limit": {
                                        "description": "Ограничение IOPS; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "label": {
                                        "description": "Метка диска; `null`, если не задана.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "mbps_limit": {
                                        "description": "Ограничение пропускной способности в МБ/с; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "sector_size": {
                                        "description": "Размеры сектора диска в байтах.",
                                        "properties": {
                                          "logical": {
                                            "description": "Логический размер сектора.",
                                            "format": "int32",
                                            "type": "integer"
                                          },
                                          "physical": {
                                            "description": "Физический размер сектора.",
                                            "format": "int32",
                                            "type": "integer"
                                          }
                                        },
                                        "required": [
                                          "logical",
                                          "physical"
                                        ],
                                        "type": "object"
                                      },
                                      "size": {
                                        "description": "Размер диска в байтах; `null`, если неизвестен.",
                                        "format": "int64",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "slot": {
                                        "description": "Номер слота диска в ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "guid",
                                      "slot",
                                      "sector_size"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "gc_id": {
                                  "description": "Идентификатор кастомизации гостевой ОС.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "gc_name": {
                                  "description": "Название кастомизации гостевой ОС.",
                                  "type": "string"
                                },
                                "hv_faults": {
                                  "description": "Реакция гипервизора на аварийные завершения.",
                                  "properties": {
                                    "sigabort": {
                                      "description": "Перезапуск при аварийном завершении гипервизора (SIGABRT).",
                                      "properties": {
                                        "interval": {
                                          "description": "Интервал учёта перезапусков; `0`, если не задан.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "restarts": {
                                          "description": "Допустимое число перезапусков за интервал; `0`, если не задано.",
                                          "format": "int32",
                                          "type": "integer"
                                        }
                                      },
                                      "required": [
                                        "interval",
                                        "restarts"
                                      ],
                                      "type": "object"
                                    }
                                  },
                                  "required": [
                                    "sigabort"
                                  ],
                                  "type": "object"
                                },
                                "hw_version": {
                                  "description": "Версия аппаратной платформы ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "id": {
                                  "description": "Идентификатор ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "incarnation": {
                                  "description": "Метка версии ВМ: время последнего изменения в десятых долях секунды.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "locked": {
                                  "description": "ВМ заблокирована выполняющейся операцией: `1` — да, `0` — нет; `null`, если не задано.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "modified": {
                                  "description": "Время последнего изменения ВМ, Unix-время в секундах.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "name": {
                                  "description": "Имя ВМ.",
                                  "type": "string"
                                },
                                "ndmp_address": {
                                  "description": "IP-адрес интерфейса пула хранения; `null`, если не задан.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "network_ports": {
                                  "description": "Сетевые порты ВМ.",
                                  "items": {
                                    "properties": {
                                      "address": {
                                        "description": "IPv4-адрес порта; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "address_v6": {
                                        "description": "IPv6-адреса порта; пустой массив, если их нет.",
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      },
                                      "ip_guard": {
                                        "description": "Защита от подмены IP: `1` — включена, `0` — выключена; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "mac": {
                                        "description": "MAC-адрес порта; `null`, если не задан.",
                                        "type": [
                                          "string",
                                          "null"
                                        ]
                                      },
                                      "mac_guard": {
                                        "description": "Защита от подмены MAC: `1` — включена, `0` — выключена; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "network_id": {
                                        "description": "Идентификатор сети.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "port_id": {
                                        "description": "Идентификатор порта.",
                                        "format": "int32",
                                        "type": "integer"
                                      },
                                      "ratelimit_mbits": {
                                        "description": "Ограничение полосы порта в Мбит/с; `null`, если не задано.",
                                        "format": "int32",
                                        "type": [
                                          "integer",
                                          "null"
                                        ]
                                      },
                                      "slot": {
                                        "description": "Номер слота порта в ВМ.",
                                        "format": "int32",
                                        "type": "integer"
                                      }
                                    },
                                    "required": [
                                      "network_id",
                                      "port_id",
                                      "slot",
                                      "address_v6"
                                    ],
                                    "type": "object"
                                  },
                                  "type": "array"
                                },
                                "node": {
                                  "description": "Узел, на котором ВМ исполняется или исполнялась последней; `null`, если неизвестен.",
                                  "format": "int32",
                                  "type": [
                                    "integer",
                                    "null"
                                  ]
                                },
                                "nvme": {
                                  "description": "Диски ВМ подключаются как NVMe.",
                                  "type": "boolean"
                                },
                                "oper_status": {
                                  "description": "Код текущего (операционного) статуса ВМ; совпадает с `status`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "oper_status_ts": {
                                  "description": "Время последней смены операционного статуса, Unix-время в секундах.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "os_profile": {
                                  "description": "Идентификатор профиля ОС (образа), из которого создана ВМ; `null`, если не задан.",
                                  "format": "uuid",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "os_type": {
                                  "description": "Идентификатор типа ОС.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "pool": {
                                  "description": "GUID пула хранения ВМ строкой.",
                                  "type": "string"
                                },
                                "ram": {
                                  "description": "Объём памяти ВМ в байтах.",
                                  "format": "int64",
                                  "type": "integer"
                                },
                                "root_dataset": {
                                  "anyOf": [
                                    {
                                      "anyOf": [
                                        {
                                          "format": "uint64",
                                          "minimum": 0,
                                          "type": "integer"
                                        },
                                        {
                                          "type": "string"
                                        }
                                      ],
                                      "description": "GUID числом; строкой, если значение не помещается в 64-битное целое."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ],
                                  "description": "GUID корневого датасета ВМ; `null`, если не задан."
                                },
                                "root_dataset_name": {
                                  "description": "Имя корневого датасета ВМ; `null`, если не задано.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "rstart": {
                                  "description": "`1`, если ВМ исполняется на узле, отличном от владельца её пула; иначе `0`.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "service": {
                                  "description": "Идентификатор сервиса, которому принадлежит ВМ; `0` — обычная ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "status": {
                                  "description": "Код текущего (операционного) статуса ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "uefi": {
                                  "description": "Путь к файлу прошивки UEFI; `null`, если не задан.",
                                  "type": [
                                    "string",
                                    "null"
                                  ]
                                },
                                "vcpu_class": {
                                  "description": "Класс vCPU ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                },
                                "vdc": {
                                  "description": "Идентификатор ВЦОД (виртуального центра обработки данных), в котором находится ВМ.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "required": [
                                "id",
                                "hw_version",
                                "name",
                                "cpus",
                                "ram",
                                "os_type",
                                "created",
                                "modified",
                                "incarnation",
                                "pool",
                                "rstart",
                                "cpu_priority",
                                "vcpu_class",
                                "boot_media_id",
                                "gc_id",
                                "gc_name",
                                "service",
                                "vdc",
                                "status",
                                "oper_status",
                                "oper_status_ts",
                                "admin_status",
                                "nvme",
                                "hv_faults",
                                "network_ports",
                                "disks"
                              ],
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -25030,
                        -15011,
                        -15010,
                        -15009,
                        -15007,
                        -15006,
                        -15005,
                        -15004,
                        -15003,
                        -9707,
                        -9706,
                        -3577,
                        -3550,
                        -3549,
                        -403,
                        -299,
                        -298,
                        -297,
                        -296,
                        -295,
                        -294,
                        -293,
                        -292,
                        -291,
                        -290,
                        -289,
                        -288,
                        -284,
                        -278,
                        -274,
                        -265,
                        -263,
                        -262,
                        -261,
                        -260,
                        -259,
                        -256,
                        -255,
                        -254,
                        -253,
                        -252,
                        -242,
                        -241,
                        -240,
                        -236,
                        -235,
                        -234,
                        -233,
                        -229,
                        -228,
                        -227,
                        -226,
                        -225,
                        -224,
                        -223,
                        -222,
                        -219,
                        -217,
                        -213,
                        -211,
                        -210,
                        -209,
                        -206,
                        -205,
                        -204,
                        -203,
                        -202,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Create VM",
          "Set VM Service ID"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-25030": "Вызов метода edge при выключенной опции `feature.edge`.",
          "-15011": "Не удалось отправить запрос vms-create на создание VM edge.",
          "-15010": "Ошибка базы данных при создании edge.",
          "-15009": "Нет привилегии vDC-администратора в vDC, указанном в vdc_id.",
          "-15007": "В network_ports передан слот без network_id.",
          "-15006": "Указанная сеть не входит ни в один vDC, где у пользователя есть привилегия администратора.",
          "-15005": "У пользователя нет привилегии vDC-администратора ни в одном vDC.",
          "-15004": "Номер слота в network_ports больше четырёх.",
          "-15003": "В network_ports передано больше четырёх портов.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-3577": "Для порта передан адрес семейства, отключённого флагом skip_v4/skip_v6 или отсутствующего в CIDR сети.",
          "-3550": "Достигнут лимит адресов сети в данном vDC — новый адрес выделить нельзя.",
          "-3549": "Ошибка БД при создании записи NIC.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-299": "Ошибка БД при получении списка сетей vDC.",
          "-298": "Один и тот же slot указан дважды в списке disk.",
          "-297": "Логический размер сектора больше физического — так задавать нельзя.",
          "-296": "Размер диска не кратен физическому размеру сектора.",
          "-295": "Размер диска не кратен логическому размеру сектора.",
          "-294": "Физический размер сектора не равен 512 или 4096.",
          "-293": "Физический размер сектора передан пустым (null).",
          "-292": "Логический размер сектора не равен 512 или 4096.",
          "-291": "Логический размер сектора передан пустым (null).",
          "-290": "Секция guest не прошла валидацию (структура или значения полей).",
          "-289": "У network_port в указанном слоте ratelimit_mbits вне диапазона 0..99999.",
          "-288": "Один и тот же slot указан дважды в списке network_port.",
          "-284": "В элементе network_port значение slot вне диапазона 1..5.",
          "-278": "В элементе disk значение size вне допустимого диапазона (от 10 MiB до максимума кластера).",
          "-274": "В элементе disk значение slot вне диапазона 1..5.",
          "-265": "Параметр pool_selector имеет недопустимое значение.",
          "-263": "Отключить ip_guard можно только на сетях типа Isolated.",
          "-262": "Указанная сеть не назначена на указанный vDC.",
          "-261": "В секции guest отсутствует обязательный параметр hostname.",
          "-260": "В запросе отсутствует секция guest.",
          "-259": "Образ ОС ещё не раздан на выбранный пул.",
          "-256": "OS-профиль с указанным id не существует.",
          "-255": "Указанный пул не в состоянии consuming — размещать ВМ на нём нельзя.",
          "-254": "Первый диск меньше минимального размера образа выбранного cloud-image профиля.",
          "-253": "Параметр os_profile не удалось разобрать как число.",
          "-252": "Параметр os_profile не передан.",
          "-242": "У диска в указанном слоте label длиннее 127 символов.",
          "-241": "У диска в указанном слоте iops_limit вне диапазона 0..999999999.",
          "-240": "У диска в указанном слоте mbps_limit вне диапазона 0..99999.",
          "-236": "Значение cpu_priority вне диапазона 1..20.",
          "-235": "Параметр cpu_priority не удалось разобрать как число.",
          "-234": "Параметр cpu_priority передан как null.",
          "-233": "Для windows-гостей в секции guest.users обязателен пользователь Administrator с паролем.",
          "-229": "Значение ram не кратно 4096 (4 KiB).",
          "-228": "Параметр vdc_id не удалось разобрать как число.",
          "-227": "Параметр vdc_id не передан.",
          "-226": "Параметр cpus не удалось разобрать как число.",
          "-225": "Параметр cpus не передан.",
          "-224": "Параметр vdc_id передан как null.",
          "-223": "Параметр ram не удалось разобрать как число.",
          "-222": "Параметр ram не передан.",
          "-219": "Не удалось определить ноду выбранного пула по карте пулов.",
          "-217": "Внутренняя ошибка при получении данных об использовании квот vDC.",
          "-213": "Создание ВМ превысило бы квоту хранилища vDC.",
          "-211": "Значение cpus превышает максимум vCPU кластера.",
          "-210": "Ошибка транзакции создания ВМ (вставка ВМ, дисков, NIC или консольных портов).",
          "-209": "Не удалось подобрать пул для размещения ВМ (авто-выбор не дал результата или указанный guid не найден).",
          "-206": "Значение ram превышает максимум, настроенный в кластере.",
          "-205": "Параметр service_id не число или вне диапазона 0..99.",
          "-204": "Значение cpus меньше 1.",
          "-203": "Значение ram меньше минимальных 536870912 байт (512 MiB).",
          "-202": "Параметр name отсутствует, пуст или не проходит валидацию.",
          "-78": "Ошибка запроса к БД при создании ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-disk-resize": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Resize VM Disk\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-7147` | vDC storage quota depleted | Увеличение диска превысило бы квоту хранилища vDC. |\n| `-7146` | Internal error while getting quota usage info | Внутренняя ошибка при получении данных об использовании квот vDC. |\n| `-7129` | New disk size exceeds the configured maximum | Новый размер диска превышает настроенный в кластере максимум. |\n| `-7128` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-7127` | Disk resize granularity is 1Mb (1048576 bytes) | Новый размер диска не кратен 1 MiB (1048576 байт). |\n| `-7126` | New disk size ({0} bytes) must be greater than current disk size ({1} bytes) | Новый размер диска меньше или равен текущему — уменьшение диска не поддерживается. |\n| `-7125` | disk {0} has no dataset name :( | У диска в БД отсутствует имя dataset — изменить размер невозможно. |\n| `-7124` | vm_id {0} has no disk {1} | У ВМ нет диска с указанным guid. |\n| `-7123` | VM hardware version mesh | ВМ имеет hardware version ниже 4 — изменение размера диска недоступно. |\n| `-7120` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при изменении размера диска. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-disk-resize",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-disk-resize",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "disk_guid": {
                        "minLength": 1,
                        "type": "string"
                      },
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "size": {
                        "format": "int64",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "disk_guid",
                      "id",
                      "size"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "description": "Ключа `data` в ответе нет: успех передаётся только кодом ответа.",
                              "type": "null"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -7147,
                        -7146,
                        -7129,
                        -7128,
                        -7127,
                        -7126,
                        -7125,
                        -7124,
                        -7123,
                        -7120,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Resize VM Disk"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-7147": "Увеличение диска превысило бы квоту хранилища vDC.",
          "-7146": "Внутренняя ошибка при получении данных об использовании квот vDC.",
          "-7129": "Новый размер диска превышает настроенный в кластере максимум.",
          "-7128": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-7127": "Новый размер диска не кратен 1 MiB (1048576 байт).",
          "-7126": "Новый размер диска меньше или равен текущему — уменьшение диска не поддерживается.",
          "-7125": "У диска в БД отсутствует имя dataset — изменить размер невозможно.",
          "-7124": "У ВМ нет диска с указанным guid.",
          "-7123": "ВМ имеет hardware version ниже 4 — изменение размера диска недоступно.",
          "-7120": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при изменении размера диска."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-remove": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove VM\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-2604` | VM id=={0} has dependent clones; remove the clones first | У ВМ есть зависимые клоны; сначала удалите их. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-399` | Unable to obtain VM v4 item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-333` | Unable to obtain version of vm_id=={0} | Не удалось получить hardware version ВМ либо версия ниже v4 — удаление этим методом недоступно. |\n| `-311` | VM doesn't exist | Не удалось определить пул ВМ — ВМ не существует. |\n| `-309` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-305` | No VM id=={0} in users scope; can't remove | ВМ с указанным id не существует или недоступна пользователю. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при удалении ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-remove",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-remove",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "vdc_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "id",
                      "vdc_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "description": "Удаление подтверждено узлом и хранилищем.",
                                  "type": "null"
                                },
                                {
                                  "description": "ВМ удалена как осиротевшая.",
                                  "properties": {
                                    "message": {
                                      "description": "Сообщение вида `vm id==<id> has been removed as orphan`.",
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "message"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "description": "ВМ не нашлась в учёте кластера и удалена при самом запросе.",
                                  "properties": {
                                    "result": {
                                      "description": "Вложенный ответ: код `1` и сообщение об удалении.",
                                      "properties": {
                                        "code": {
                                          "description": "Всегда `1`.",
                                          "format": "int32",
                                          "type": "integer"
                                        },
                                        "data": {
                                          "description": "Сообщение об удалении.",
                                          "properties": {
                                            "message": {
                                              "description": "Сообщение вида `vm id==<id> has been removed as orphan`.",
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "message"
                                          ],
                                          "type": "object"
                                        }
                                      },
                                      "required": [
                                        "code",
                                        "data"
                                      ],
                                      "type": "object"
                                    }
                                  },
                                  "required": [
                                    "result"
                                  ],
                                  "type": "object"
                                }
                              ],
                              "description": "Итог удаления ВМ: `null` при подтверждённом удалении либо сообщение, если ВМ удалена как\nосиротевшая (узел или хранилище её не знают). Если ВМ не нашлась в учёте кластера при самом\nзапросе, сообщение приходит вложенным в объект `result`."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -9707,
                        -9706,
                        -2604,
                        -1611,
                        -403,
                        -399,
                        -333,
                        -311,
                        -309,
                        -305,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Remove VM"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-2604": "У ВМ есть зависимые клоны; сначала удалите их.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-399": "Не удалось получить v4-item ВМ из БД.",
          "-333": "Не удалось получить hardware version ВМ либо версия ниже v4 — удаление этим методом недоступно.",
          "-311": "Не удалось определить пул ВМ — ВМ не существует.",
          "-309": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-305": "ВМ с указанным id не существует или недоступна пользователю.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при удалении ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-restart": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Restart VM\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-455` | VM has suspended status; unable to start | ВМ находится в состоянии suspended — используйте vms-resume. |\n| `-440` | *динамическое сообщение* | Перезапуск ВМ превысил бы допустимый overcommit ресурсов ноды. |\n| `-429` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-419` | Failed to retreive v4 vm item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-418` | VM id=={0} doesn't exists | ВМ с указанным id не существует. |\n| `-417` | Internal error while getting quota usage info | Внутренняя ошибка при получении данных об использовании квот vDC. |\n| `-415` | vDC CPU cores quota depleted | Перезапуск ВМ превысил бы квоту CPU-ядер vDC. |\n| `-414` | vDC RAM quota depleted | Перезапуск ВМ превысил бы квоту RAM vDC. |\n| `-413` | vDC storage quota depleted | Перезапуск ВМ превысил бы квоту хранилища vDC. |\n| `-409` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-408` | Bad noacpi param value | Параметр noacpi имеет значение, отличное от 0 и 1. |\n| `-407` | Bad hard_timeout param value | Параметр hard_timeout больше допустимого максимума 999. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при выполнении vms-start/vms-stop/vms-restart. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-restart",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-restart",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "hard_timeout": {
                        "format": "uint16",
                        "maximum": 65535,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "noacpi": {
                        "format": "uint8",
                        "maximum": 255,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: ВМ перезапущена.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -9707,
                        -9706,
                        -1611,
                        -455,
                        -440,
                        -429,
                        -419,
                        -418,
                        -417,
                        -415,
                        -414,
                        -413,
                        -409,
                        -408,
                        -407,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Restart VM"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-1611": "По ВМ уже идёт миграция.",
          "-455": "ВМ находится в состоянии suspended — используйте vms-resume.",
          "-440": "Перезапуск ВМ превысил бы допустимый overcommit ресурсов ноды.",
          "-429": "ВМ с указанным id не существует или недоступна пользователю.",
          "-419": "Не удалось получить v4-item ВМ из БД.",
          "-418": "ВМ с указанным id не существует.",
          "-417": "Внутренняя ошибка при получении данных об использовании квот vDC.",
          "-415": "Перезапуск ВМ превысил бы квоту CPU-ядер vDC.",
          "-414": "Перезапуск ВМ превысил бы квоту RAM vDC.",
          "-413": "Перезапуск ВМ превысил бы квоту хранилища vDC.",
          "-409": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-408": "Параметр noacpi имеет значение, отличное от 0 и 1.",
          "-407": "Параметр hard_timeout больше допустимого максимума 999.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при выполнении vms-start/vms-stop/vms-restart."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-resume": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Resume VM\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-15152` | virtio-blk VM: resume only on the pool node | ВМ на virtio-blk возобновляется только на ноде своего пула — уберите node_id или укажите ноду пула. |\n| `-15151` | Windows: finish setup on the pool node before remote resume | Установка Windows-гостя не завершена — до её окончания resume возможен только на ноде пула. |\n| `-15110` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-15105` | Suspend-resume feature was not enabled | Вызов vms-resume при выключенном флаге suspend_resume в конфигурации кластера. |\n| `-15043` | node_id param has bad value | Параметр node_id вне диапазона 1..99. |\n| `-15042` | node_id param value exceeds cluster nodes quantity | Параметр node_id больше числа нод в кластере. |\n| `-15015` | VM ID=={0} is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-458` | All nodes are offline or unavailable for auto placement | Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами. |\n| `-440` | *динамическое сообщение* | На узле не хватает памяти для возобновления ВМ. |\n| `-417` | Internal error while getting quota usage info | Не удалось получить сведения о квотах VDC или о памяти узла. |\n| `-415` | vDC CPU cores quota depleted | Возобновление ВМ превысило бы квоту vCPU VDC. |\n| `-414` | vDC RAM quota depleted | Возобновление ВМ превысило бы квоту памяти VDC. |\n| `-413` | vDC storage quota depleted | Диски ВМ превышают квоту хранилища VDC. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при resume ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-resume",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-resume",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "node_id": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: работа ВМ возобновлена.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -15152,
                        -15151,
                        -15110,
                        -15105,
                        -15043,
                        -15042,
                        -15015,
                        -9707,
                        -9706,
                        -1611,
                        -458,
                        -440,
                        -417,
                        -415,
                        -414,
                        -413,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Resume VM"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-15152": "ВМ на virtio-blk возобновляется только на ноде своего пула — уберите node_id или укажите ноду пула.",
          "-15151": "Установка Windows-гостя не завершена — до её окончания resume возможен только на ноде пула.",
          "-15110": "ВМ с указанным id не существует или недоступна пользователю.",
          "-15105": "Вызов vms-resume при выключенном флаге suspend_resume в конфигурации кластера.",
          "-15043": "Параметр node_id вне диапазона 1..99.",
          "-15042": "Параметр node_id больше числа нод в кластере.",
          "-15015": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-1611": "По ВМ уже идёт миграция.",
          "-458": "Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами.",
          "-440": "На узле не хватает памяти для возобновления ВМ.",
          "-417": "Не удалось получить сведения о квотах VDC или о памяти узла.",
          "-415": "Возобновление ВМ превысило бы квоту vCPU VDC.",
          "-414": "Возобновление ВМ превысило бы квоту памяти VDC.",
          "-413": "Диски ВМ превышают квоту хранилища VDC.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при resume ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-resume-pool": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Resume VM Pool\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-15305` | Suspend-resume feature was not enabled | Вызов resume по пулу при выключенном флаге suspend_resume в конфигурации кластера. |\n| `-15303` | Bad pool_name param value | Параметр pool_name не соответствует формату имени пула (z + 2-3 цифры). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-resume-pool",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-resume-pool",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "pool_name": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "pool_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: узел выполнил возобновление ВМ пула.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -15305,
                        -15303,
                        -403,
                        -219
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Resume VM Pool"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-15305": "Вызов resume по пулу при выключенном флаге suspend_resume в конфигурации кластера.",
          "-15303": "Параметр pool_name не соответствует формату имени пула (z + 2-3 цифры).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-rollback": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Rollback VM Snapshot\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-4233` | Pool of VM isn't in consuming state | Пул ВМ не в состоянии consuming — rollback недоступен. |\n| `-4230` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-4225` | In order to perform VM rollback vm id=={0} must be stopped | ВМ должна быть остановлена перед выполнением rollback. |\n| `-4224` | VM v3 has no snapshots thus can't perform rollback | ВМ версии v3 не поддерживает snapshot'ы — rollback невозможен. |\n| `-4223` | Unable to retreive v4 item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-4221` | Snapshot {0} doesn't exist | Snapshot с указанным именем не существует у этой ВМ. |\n| `-4220` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при rollback. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-rollback",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-rollback",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "snapshot_name": {
                        "minLength": 1,
                        "pattern": "^[0-9A-Za-z_.]+$",
                        "type": "string"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "snapshot_name",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -4233,
                        -4230,
                        -4225,
                        -4224,
                        -4223,
                        -4221,
                        -4220,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Rollback VM Snapshot"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-4233": "Пул ВМ не в состоянии consuming — rollback недоступен.",
          "-4230": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-4225": "ВМ должна быть остановлена перед выполнением rollback.",
          "-4224": "ВМ версии v3 не поддерживает snapshot'ы — rollback невозможен.",
          "-4223": "Не удалось получить v4-item ВМ из БД.",
          "-4221": "Snapshot с указанным именем не существует у этой ВМ.",
          "-4220": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при rollback."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-snapshot": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Create VM Snapshot\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-3630` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-3625` | Pool of VM isn't in consuming state | Пул ВМ не в состоянии consuming — создание snapshot недоступно. |\n| `-3623` | Unable to retreive v4 item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-3622` | VM v3 has no snapshots | ВМ версии v3 не поддерживает snapshot'ы. |\n| `-3620` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при создании snapshot. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-snapshot",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-snapshot",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "snapshot_name": {
                        "minLength": 1,
                        "pattern": "^[0-9A-Za-z_]+$",
                        "type": "string"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "snapshot_name",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {}
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -3630,
                        -3625,
                        -3623,
                        -3622,
                        -3620,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Create VM Snapshot"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-3630": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-3625": "Пул ВМ не в состоянии consuming — создание snapshot недоступно.",
          "-3623": "Не удалось получить v4-item ВМ из БД.",
          "-3622": "ВМ версии v3 не поддерживает snapshot'ы.",
          "-3620": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при создании snapshot."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-snapshot-remove": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Remove VM Snapshot\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-4333` | Pool of VM isn't in consuming state | Пул ВМ не в состоянии consuming — удаление snapshot недоступно. |\n| `-4330` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-4324` | VM v3 has no snapshots | ВМ версии v3 не поддерживает snapshot'ы. |\n| `-4323` | Unable to retreive v4 item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-4321` | Snapshot {0} doesn't exist | Snapshot с указанным именем не существует у этой ВМ. |\n| `-4320` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при удалении snapshot. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-snapshot-remove",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-snapshot-remove",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "snapshot_name": {
                        "minLength": 1,
                        "pattern": "^[0-9A-Za-z_.]+$",
                        "type": "string"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "snapshot_name",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": true,
                              "description": "Ответ агента хранилища без GUID снимка; если снимка на хранилище уже не было — сообщение.",
                              "properties": {
                                "message": {
                                  "description": "Только если снимка уже не было: `Snapshot has been removed`.",
                                  "type": "string"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -4333,
                        -4330,
                        -4324,
                        -4323,
                        -4321,
                        -4320,
                        -1611,
                        -403,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Remove VM Snapshot"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-4333": "Пул ВМ не в состоянии consuming — удаление snapshot недоступно.",
          "-4330": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-4324": "ВМ версии v3 не поддерживает snapshot'ы.",
          "-4323": "Не удалось получить v4-item ВМ из БД.",
          "-4321": "Snapshot с указанным именем не существует у этой ВМ.",
          "-4320": "ВМ с указанным id не существует или недоступна пользователю.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-78": "Ошибка запроса к БД при удалении snapshot."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-start": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Start VM\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-461` | VM is running on another cluster node; unable to start | Опрос узлов нашёл живой процесс ВМ на узле, отличном от целевого. Номер узла в сообщение НЕ подставляется: арендатор не должен узнавать топологию кластера из текста ошибки — узел уходит в журнал службы. |\n| `-460` | virtio-blk VM: start only on the pool node | ВМ на virtio-blk запускается только на ноде своего пула — уберите node_id или укажите ноду пула. |\n| `-459` | Windows: finish setup on the pool node before remote start | Установка Windows-гостя не завершена — до её окончания ВМ запускается только на ноде пула. |\n| `-458` | All nodes are offline or unavailable for auto placement | Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами. |\n| `-457` | Unable to start VM having admin_status=={0} already | ВМ уже запущена. |\n| `-456` | Unable to start VM with admin_status=={0} | Текущий admin_status ВМ не допускает запуск. |\n| `-455` | VM has suspended status; unable to start | ВМ находится в состоянии suspended — используйте vms-resume вместо запуска. |\n| `-443` | node_id param has bad value | Параметр node_id вне диапазона 1..99. |\n| `-442` | node_id param value exceeds cluster nodes quantity | Параметр node_id больше числа нод в кластере. |\n| `-440` | *динамическое сообщение* | Запуск ВМ превысил бы допустимый overcommit ресурсов ноды. |\n| `-429` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-419` | Failed to retreive v4 vm item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-418` | VM id=={0} doesn't exists | ВМ с указанным id не существует. |\n| `-417` | Internal error while getting quota usage info | Внутренняя ошибка при получении данных об использовании квот vDC. |\n| `-415` | vDC CPU cores quota depleted | Запуск ВМ превысил бы квоту CPU-ядер vDC. |\n| `-414` | vDC RAM quota depleted | Запуск ВМ превысил бы квоту RAM vDC. |\n| `-413` | vDC storage quota depleted | Запуск ВМ превысил бы квоту хранилища vDC. |\n| `-409` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-408` | Bad noacpi param value | Параметр noacpi имеет значение, отличное от 0 и 1. |\n| `-407` | Bad hard_timeout param value | Параметр hard_timeout больше допустимого максимума 999. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при выполнении vms-start/vms-stop/vms-restart. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-start",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-start",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "hard_timeout": {
                        "format": "uint16",
                        "maximum": 65535,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "noacpi": {
                        "format": "uint8",
                        "maximum": 255,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "node_id": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Итог запуска ВМ. Пустой объект — ВМ запущена, узел в ответе не указан.",
                              "properties": {
                                "node_id": {
                                  "description": "Узел, на котором запущена ВМ, если это не узел её пула. Может отсутствовать и в этом\nслучае — например, когда узел ответил, что ВМ уже запущена.",
                                  "format": "int32",
                                  "type": "integer"
                                }
                              },
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -9707,
                        -9706,
                        -1611,
                        -461,
                        -460,
                        -459,
                        -458,
                        -457,
                        -456,
                        -455,
                        -443,
                        -442,
                        -440,
                        -429,
                        -419,
                        -418,
                        -417,
                        -415,
                        -414,
                        -413,
                        -409,
                        -408,
                        -407,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Start VM"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-1611": "По ВМ уже идёт миграция.",
          "-461": "Опрос узлов нашёл живой процесс ВМ на узле, отличном от целевого. Номер узла в сообщение НЕ подставляется: арендатор не должен узнавать топологию кластера из текста ошибки — узел уходит в журнал службы.",
          "-460": "ВМ на virtio-blk запускается только на ноде своего пула — уберите node_id или укажите ноду пула.",
          "-459": "Установка Windows-гостя не завершена — до её окончания ВМ запускается только на ноде пула.",
          "-458": "Для авторазмещения нет ни одной онлайн-ноды с достаточными ресурсами.",
          "-457": "ВМ уже запущена.",
          "-456": "Текущий admin_status ВМ не допускает запуск.",
          "-455": "ВМ находится в состоянии suspended — используйте vms-resume вместо запуска.",
          "-443": "Параметр node_id вне диапазона 1..99.",
          "-442": "Параметр node_id больше числа нод в кластере.",
          "-440": "Запуск ВМ превысил бы допустимый overcommit ресурсов ноды.",
          "-429": "ВМ с указанным id не существует или недоступна пользователю.",
          "-419": "Не удалось получить v4-item ВМ из БД.",
          "-418": "ВМ с указанным id не существует.",
          "-417": "Внутренняя ошибка при получении данных об использовании квот vDC.",
          "-415": "Запуск ВМ превысил бы квоту CPU-ядер vDC.",
          "-414": "Запуск ВМ превысил бы квоту RAM vDC.",
          "-413": "Запуск ВМ превысил бы квоту хранилища vDC.",
          "-409": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-408": "Параметр noacpi имеет значение, отличное от 0 и 1.",
          "-407": "Параметр hard_timeout больше допустимого максимума 999.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при выполнении vms-start/vms-stop/vms-restart."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-stop": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Stop VM\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-451` | Unable to stop VM having admin_status=={0} | ВМ находится в состоянии suspended — остановка невозможна. |\n| `-429` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-419` | Failed to retreive v4 vm item: {0} | Не удалось получить v4-item ВМ из БД. |\n| `-418` | VM id=={0} doesn't exists | ВМ с указанным id не существует. |\n| `-409` | VM is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-408` | Bad noacpi param value | Параметр noacpi имеет значение, отличное от 0 и 1. |\n| `-407` | Bad hard_timeout param value | Параметр hard_timeout больше допустимого максимума 999. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при выполнении vms-start/vms-stop/vms-restart. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-stop",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-stop",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "hard_timeout": {
                        "format": "uint16",
                        "maximum": 65535,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      },
                      "id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      },
                      "noacpi": {
                        "format": "uint8",
                        "maximum": 255,
                        "minimum": 0,
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: ВМ остановлена.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -9707,
                        -9706,
                        -1611,
                        -451,
                        -429,
                        -419,
                        -418,
                        -409,
                        -408,
                        -407,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Stop VM"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-1611": "По ВМ уже идёт миграция.",
          "-451": "ВМ находится в состоянии suspended — остановка невозможна.",
          "-429": "ВМ с указанным id не существует или недоступна пользователю.",
          "-419": "Не удалось получить v4-item ВМ из БД.",
          "-418": "ВМ с указанным id не существует.",
          "-409": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-408": "Параметр noacpi имеет значение, отличное от 0 и 1.",
          "-407": "Параметр hard_timeout больше допустимого максимума 999.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при выполнении vms-start/vms-stop/vms-restart."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-suspend": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Suspend VM\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-15050` | Unable to suspend VM having admin_status=={0} | ВМ не запущена — suspend доступен только для работающей ВМ. |\n| `-15015` | VM ID=={0} is locked | ВМ заблокирована (lock) — дождитесь завершения текущей операции. |\n| `-15010` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-15005` | Suspend-resume feature was not enabled | Вызов vms-suspend при выключенном флаге suspend_resume в конфигурации кластера. |\n| `-9707` | Agent reply arrived without a tracked request | Ответ агента пришёл, когда запрос уже закрыт или не отслеживается. |\n| `-9706` | Async operation timed out: no agent reply | Агент не ответил на асинхронную операцию за отведённое время. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при suspend ВМ. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-suspend",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-suspend",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: ВМ приостановлена.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -15050,
                        -15015,
                        -15010,
                        -15005,
                        -9707,
                        -9706,
                        -1611,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Suspend VM"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-15050": "ВМ не запущена — suspend доступен только для работающей ВМ.",
          "-15015": "ВМ заблокирована (lock) — дождитесь завершения текущей операции.",
          "-15010": "ВМ с указанным id не существует или недоступна пользователю.",
          "-15005": "Вызов vms-suspend при выключенном флаге suspend_resume в конфигурации кластера.",
          "-9707": "Ответ агента пришёл, когда запрос уже закрыт или не отслеживается.",
          "-9706": "Агент не ответил на асинхронную операцию за отведённое время.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при suspend ВМ."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-suspend-pool": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Suspend VM Pool\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-15205` | Suspend-resume feature was not enabled | Вызов suspend по пулу при выключенном флаге suspend_resume в конфигурации кластера. |\n| `-15203` | Bad pool_name param value | Параметр pool_name не соответствует формату имени пула (z + 2-3 цифры). |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-suspend-pool",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-suspend-pool",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "pool_name": {
                        "type": "string"
                      },
                      "takeback-on-fail": {
                        "format": "int32",
                        "type": [
                          "integer",
                          "null"
                        ]
                      }
                    },
                    "required": [
                      "pool_name"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "additionalProperties": false,
                              "description": "Пустой объект: узел выполнил приостановку ВМ пула.",
                              "type": "object"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -15205,
                        -15203,
                        -403,
                        -219
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Suspend VM Pool"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-15205": "Вызов suspend по пулу при выключенном флаге suspend_resume в конфигурации кластера.",
          "-15203": "Параметр pool_name не соответствует формату имени пула (z + 2-3 цифры).",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager."
        },
        "x-visibility": "internal"
      }
    },
    "/.api/.req/#vms-vcpu-class": {
      "post": {
        "deprecated": false,
        "description": "**Доступ (любая из привилегий):** Set VM vCPU Class, Set VM Reserved vCPU Class\n\n**Асинхронный:** ответ может прийти немедленно либо после завершения операции.\n\n**Ошибки метода** (из кода обработчика и вызываемых цепочек):\n\n| Код | Сообщение | Причина |\n|---|---|---|\n| `-5130` | No VM with ID=={0} in users scope | ВМ с указанным id не существует или недоступна пользователю. |\n| `-5110` | vcpu_class value below {0} | Значение vcpu_class ниже минимально допустимого для кластера. |\n| `-1611` | Another migration is already in progress for this VM | По ВМ уже идёт миграция. |\n| `-403` | Access denied | У пользователя нет привилегии на вызов метода в запрошенном scope. |\n| `-219` | Node for pool '{0}' not found via cluster manager | Нода указанного пула не найдена через cluster manager. |\n| `-78` | DB error: {0} | Ошибка запроса к БД при установке vcpu_class. |\n\nПлюс общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.",
        "operationId": "vms-vcpu-class",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "id": {
                    "format": "uuid",
                    "type": "string"
                  },
                  "jsonrpc": {
                    "const": "2.0",
                    "type": "string"
                  },
                  "method": {
                    "const": "vms-vcpu-class",
                    "type": "string"
                  },
                  "params": {
                    "properties": {
                      "vcpu_class": {
                        "format": "int32",
                        "maximum": 5,
                        "minimum": 0,
                        "type": "integer"
                      },
                      "vm_id": {
                        "format": "int32",
                        "minimum": 1,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "vcpu_class",
                      "vm_id"
                    ],
                    "type": "object"
                  }
                },
                "required": [
                  "jsonrpc",
                  "id",
                  "method"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 1,
                              "type": "integer"
                            },
                            "data": {
                              "anyOf": [
                                {
                                  "additionalProperties": false,
                                  "description": "Узел применил новый класс vCPU к запущенной ВМ: пустой объект.",
                                  "type": "object"
                                },
                                {
                                  "description": "ВМ не запущена: класс сохранён и применится при следующем запуске.",
                                  "properties": {
                                    "message": {
                                      "description": "Текстовое сообщение об изменении класса на незапущенной ВМ.",
                                      "type": "string"
                                    }
                                  },
                                  "required": [
                                    "message"
                                  ],
                                  "type": "object"
                                }
                              ],
                              "description": "Итог смены класса vCPU."
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Synchronous success",
                      "type": "object"
                    },
                    {
                      "properties": {
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        },
                        "result": {
                          "properties": {
                            "code": {
                              "const": 999,
                              "type": "integer"
                            },
                            "data": {
                              "const": "request queued",
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "data"
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "result"
                      ],
                      "title": "Queued for async processing",
                      "type": "object"
                    },
                    {
                      "description": "Ошибка метода. Общие коды: `-32602` невалидные параметры, `-32601` метод не найден, `-403` доступ запрещён, `-32603` внутренняя ошибка; ошибки контроллеров пробрасываются как есть.\n\nПолная таблица ошибок этого метода — в описании метода выше (машинный список кодов: `x-error-codes`).",
                      "properties": {
                        "error": {
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "data": {},
                            "message": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "code",
                            "message"
                          ],
                          "type": "object"
                        },
                        "id": {
                          "format": "uuid",
                          "type": "string"
                        },
                        "jsonrpc": {
                          "const": "2.0",
                          "type": "string"
                        }
                      },
                      "required": [
                        "jsonrpc",
                        "id",
                        "error"
                      ],
                      "title": "Error",
                      "type": "object",
                      "x-error-codes": [
                        -5130,
                        -5110,
                        -1611,
                        -403,
                        -219,
                        -78
                      ]
                    }
                  ]
                }
              }
            },
            "description": "JSON-RPC response envelope"
          }
        },
        "tags": [
          "vms"
        ],
        "x-access": [
          "Set VM vCPU Class",
          "Set VM Reserved vCPU Class"
        ],
        "x-async": true,
        "x-error-reasons": {
          "-5130": "ВМ с указанным id не существует или недоступна пользователю.",
          "-5110": "Значение vcpu_class ниже минимально допустимого для кластера.",
          "-1611": "По ВМ уже идёт миграция.",
          "-403": "У пользователя нет привилегии на вызов метода в запрошенном scope.",
          "-219": "Нода указанного пула не найдена через cluster manager.",
          "-78": "Ошибка запроса к БД при установке vcpu_class."
        },
        "x-visibility": "internal"
      }
    }
  },
  "security": [
    {
      "sessionCookie": []
    }
  ],
  "servers": [
    {
      "description": "Кластер vStack (cluster-endpoint). Единственная точка входа JSON-RPC — POST на entrypoint.",
      "url": "https://{host}",
      "variables": {
        "host": {
          "default": "cluster.example.com",
          "description": "Cluster endpoint host"
        }
      }
    }
  ],
  "tags": [
    {
      "name": "auth"
    },
    {
      "name": "backup"
    },
    {
      "name": "cluster"
    },
    {
      "name": "direct"
    },
    {
      "name": "edge"
    },
    {
      "name": "filesystems"
    },
    {
      "name": "get"
    },
    {
      "name": "golden"
    },
    {
      "name": "host"
    },
    {
      "name": "iscsi"
    },
    {
      "name": "net"
    },
    {
      "name": "nets"
    },
    {
      "name": "node"
    },
    {
      "name": "os"
    },
    {
      "name": "pd"
    },
    {
      "name": "pool"
    },
    {
      "name": "pools"
    },
    {
      "name": "portgroup"
    },
    {
      "name": "privilege"
    },
    {
      "name": "role"
    },
    {
      "name": "rpc.discover"
    },
    {
      "name": "security"
    },
    {
      "name": "snapshot"
    },
    {
      "name": "task"
    },
    {
      "name": "user"
    },
    {
      "name": "vdc"
    },
    {
      "name": "vm"
    },
    {
      "name": "vms"
    }
  ]
}
