{
  "openapi": "3.1.0",
  "info": {
    "title": "OVE Messenger API",
    "version": "1.0.0",
    "description": "OVE Messenger user, bot, OAuth, files, calls and realtime updates API."
  },
  "servers": [
    {
      "url": "https://ms.ove.rs"
    }
  ],
  "paths": {
    "/register": {
      "post": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Регистрация аккаунта",
        "description": "Регистрация аккаунта. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_register",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "email": "you@example.com",
                "password": "correct horse battery staple"
              }
            }
          }
        }
      }
    },
    "/login": {
      "post": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Вход по паролю",
        "description": "Вход по паролю. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_login",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "email": "you@example.com",
                "password": "correct horse battery staple"
              }
            }
          }
        }
      }
    },
    "/auth/email/start": {
      "post": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Запрос email-кода",
        "description": "Запрос email-кода. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_auth_email_start",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "email": "you@example.com"
              }
            }
          }
        }
      }
    },
    "/auth/email/verify": {
      "post": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Подтверждение email-кода",
        "description": "Подтверждение email-кода. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_auth_email_verify",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "email": "you@example.com",
                "code": "123456"
              }
            }
          }
        }
      }
    },
    "/.well-known/openid-configuration": {
      "get": {
        "tags": [
          "OAuth"
        ],
        "summary": "OIDC Discovery",
        "description": "OIDC Discovery. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get__well_known_openid_configuration",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        }
      }
    },
    "/.well-known/oauth-authorization-server": {
      "get": {
        "tags": [
          "OAuth"
        ],
        "summary": "OAuth Server Metadata",
        "description": "OAuth Server Metadata. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get__well_known_oauth_authorization_server",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        }
      }
    },
    "/oauth/jwks.json": {
      "get": {
        "tags": [
          "OAuth"
        ],
        "summary": "Публичные ключи OIDC",
        "description": "Публичные ключи OIDC. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_oauth_jwks_json",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        }
      }
    },
    "/oauth/device_authorization": {
      "post": {
        "tags": [
          "OAuth"
        ],
        "summary": "Запуск Device Flow",
        "description": "Создает device_code, user_code и verification URI для универсального входа через Messenger.",
        "operationId": "post_oauth_device_authorization",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "oauthClient": []
          }
        ]
      }
    },
    "/oauth/device": {
      "get": {
        "tags": [
          "OAuth"
        ],
        "summary": "Страница подтверждения Device Flow",
        "description": "Страница подтверждения Device Flow. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_oauth_device",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        }
      }
    },
    "/oauth/token": {
      "post": {
        "tags": [
          "OAuth"
        ],
        "summary": "Обмен device code на токены",
        "description": "Обменивает подтвержденный device_code на OIDC access/id token. Во время ожидания возвращает authorization_pending.",
        "operationId": "post_oauth_token",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "oauthClient": []
          }
        ]
      }
    },
    "/oauth/userinfo": {
      "get": {
        "tags": [
          "OAuth"
        ],
        "summary": "Профиль OIDC",
        "description": "Профиль OIDC. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_oauth_userinfo",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/oauth/device/request": {
      "get": {
        "tags": [
          "OAuth"
        ],
        "summary": "Данные запроса входа",
        "description": "Данные запроса входа. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_oauth_device_request",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/oauth/device/decision": {
      "post": {
        "tags": [
          "OAuth"
        ],
        "summary": "Решение пользователя",
        "description": "Решение пользователя. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_oauth_device_decision",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/me": {
      "get": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Текущий пользователь",
        "description": "Текущий пользователь. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_me",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/account/delete": {
      "post": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Удаление аккаунта",
        "description": "Удаление аккаунта. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_account_delete",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/username": {
      "post": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Установка username",
        "description": "Установка username. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_username",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/name": {
      "post": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Изменение отображаемого имени",
        "description": "Изменение отображаемого имени. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_name",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/privacy": {
      "post": {
        "tags": [
          "Аккаунт"
        ],
        "summary": "Настройки приватности",
        "description": "Настройки приватности. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_privacy",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/contacts": {
      "get": {
        "tags": [
          "Контакты"
        ],
        "summary": "Список контактов",
        "description": "Список контактов. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_contacts",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/contacts/add": {
      "post": {
        "tags": [
          "Контакты"
        ],
        "summary": "Добавление контакта",
        "description": "Добавление контакта. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_contacts_add",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/contacts/delete": {
      "post": {
        "tags": [
          "Контакты"
        ],
        "summary": "Удаление контакта",
        "description": "Удаление контакта. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_contacts_delete",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/groups": {
      "post": {
        "tags": [
          "Чаты"
        ],
        "summary": "Создание группы",
        "description": "Создание группы. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_groups",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/channels": {
      "post": {
        "tags": [
          "Чаты"
        ],
        "summary": "Создание канала",
        "description": "Создание канала. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_channels",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/chats/title": {
      "post": {
        "tags": [
          "Чаты"
        ],
        "summary": "Изменение названия чата",
        "description": "Изменение названия чата. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_chats_title",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/channels/username": {
      "post": {
        "tags": [
          "Чаты"
        ],
        "summary": "Username канала",
        "description": "Username канала. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_channels_username",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/chats/members/add": {
      "post": {
        "tags": [
          "Чаты"
        ],
        "summary": "Добавление участника",
        "description": "Добавление участника. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_chats_members_add",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/chats/members/remove": {
      "post": {
        "tags": [
          "Чаты"
        ],
        "summary": "Удаление участника",
        "description": "Удаление участника. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_chats_members_remove",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/cloud-password": {
      "post": {
        "tags": [
          "Безопасность"
        ],
        "summary": "Облачный пароль",
        "description": "Облачный пароль. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_cloud_password",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/cloud-password/reset": {
      "post": {
        "tags": [
          "Безопасность"
        ],
        "summary": "Сброс облачного пароля",
        "description": "Сброс облачного пароля. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_cloud_password_reset",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/sessions": {
      "get": {
        "tags": [
          "Безопасность"
        ],
        "summary": "Активные сессии",
        "description": "Активные сессии. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_sessions",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/sessions/revoke": {
      "post": {
        "tags": [
          "Безопасность"
        ],
        "summary": "Завершение сессии",
        "description": "Завершение сессии. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_sessions_revoke",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/sessions/revoke-others": {
      "post": {
        "tags": [
          "Безопасность"
        ],
        "summary": "Завершение других сессий",
        "description": "Завершение других сессий. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_sessions_revoke_others",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/bots": {
      "post": {
        "tags": [
          "Боты"
        ],
        "summary": "Создание бота",
        "description": "Создание бота. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_bots",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "username": "shop_helper_bot",
                "name": "Shop helper"
              }
            }
          }
        }
      }
    },
    "/bots/token/reset": {
      "post": {
        "tags": [
          "Боты"
        ],
        "summary": "Перевыпуск bot token",
        "description": "Перевыпуск bot token. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_bots_token_reset",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/e2e/key": {
      "post": {
        "tags": [
          "E2E"
        ],
        "summary": "Публикация E2E-ключа",
        "description": "Публикация E2E-ключа. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_e2e_key",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "E2E"
        ],
        "summary": "Публичный E2E-ключ",
        "description": "Публичный E2E-ключ. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_e2e_key",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/e2e/backup": {
      "post": {
        "tags": [
          "E2E"
        ],
        "summary": "Сохранение E2E-копии",
        "description": "Сохранение E2E-копии. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_e2e_backup",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      },
      "get": {
        "tags": [
          "E2E"
        ],
        "summary": "Резервная копия E2E",
        "description": "Резервная копия E2E. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_e2e_backup",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/e2e/reset": {
      "post": {
        "tags": [
          "E2E"
        ],
        "summary": "Сброс E2E-ключей",
        "description": "Сброс E2E-ключей. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_e2e_reset",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/wallet": {
      "get": {
        "tags": [
          "Dastars"
        ],
        "summary": "Баланс Dastars",
        "description": "Баланс Dastars. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_wallet",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/wallet/send": {
      "post": {
        "tags": [
          "Dastars"
        ],
        "summary": "Перевод Dastars",
        "description": "Перевод Dastars. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_wallet_send",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/wallet/history": {
      "get": {
        "tags": [
          "Dastars"
        ],
        "summary": "История Dastars",
        "description": "История Dastars. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_wallet_history",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/call": {
      "post": {
        "tags": [
          "Звонки"
        ],
        "summary": "Создание звонка",
        "description": "Создание звонка. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_call",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/voice-ticket": {
      "post": {
        "tags": [
          "Звонки"
        ],
        "summary": "Билет голосовой сессии",
        "description": "Билет голосовой сессии. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_voice_ticket",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/voice/participants": {
      "get": {
        "tags": [
          "Звонки"
        ],
        "summary": "Участники голосовой сессии",
        "description": "Участники голосовой сессии. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_voice_participants",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/voice": {
      "get": {
        "tags": [
          "Звонки"
        ],
        "summary": "Голосовой WebSocket",
        "description": "Переключает соединение на WebSocket после получения voice ticket.",
        "operationId": "get_voice",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/send": {
      "post": {
        "tags": [
          "Сообщения"
        ],
        "summary": "Отправка сообщения",
        "description": "Отправляет текст, вложение и inline-кнопки. Для клиентской очереди используйте стабильный client_id.",
        "operationId": "post_send",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "to": 42,
                "text": "Привет!",
                "client_id": "0190f6d4-example"
              }
            }
          }
        }
      }
    },
    "/edit": {
      "post": {
        "tags": [
          "Сообщения"
        ],
        "summary": "Редактирование сообщения",
        "description": "Редактирование сообщения. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_edit",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "chat_id": 42,
                "message_id": 1001,
                "text": "Исправленный текст"
              }
            }
          }
        }
      }
    },
    "/callback": {
      "post": {
        "tags": [
          "Боты"
        ],
        "summary": "Callback кнопки",
        "description": "Callback кнопки. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_callback",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/reactions": {
      "post": {
        "tags": [
          "Реакции"
        ],
        "summary": "Emoji-реакция",
        "description": "Emoji-реакция. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_reactions",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "chat_id": 42,
                "message_id": 1001,
                "emoji": "🔥"
              }
            }
          }
        }
      }
    },
    "/reactions/paid": {
      "post": {
        "tags": [
          "Реакции"
        ],
        "summary": "Платная реакция Dastars",
        "description": "Переводит указанное количество Dastars автору сообщения; для бота — его владельцу. amount может быть больше 1.",
        "operationId": "post_reactions_paid",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "chat_id": 42,
                "message_id": 1001,
                "amount": 5
              }
            }
          }
        }
      }
    },
    "/read": {
      "post": {
        "tags": [
          "Сообщения"
        ],
        "summary": "Отметка о прочтении",
        "description": "Отметка о прочтении. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_read",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/delete": {
      "post": {
        "tags": [
          "Сообщения"
        ],
        "summary": "Удаление сообщения",
        "description": "Удаление сообщения. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_delete",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/favorite": {
      "post": {
        "tags": [
          "Сообщения"
        ],
        "summary": "Избранное сообщение",
        "description": "Избранное сообщение. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_favorite",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/upload": {
      "post": {
        "tags": [
          "Файлы"
        ],
        "summary": "Загрузка файла",
        "description": "Загрузка файла. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_upload",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/nodes/status": {
      "get": {
        "tags": [
          "Сервис"
        ],
        "summary": "Статус сервисных узлов",
        "description": "Статус сервисных узлов. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_nodes_status",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/chats": {
      "get": {
        "tags": [
          "Чаты"
        ],
        "summary": "Список чатов",
        "description": "Список чатов. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_chats",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/chats/delete": {
      "post": {
        "tags": [
          "Чаты"
        ],
        "summary": "Удаление чата",
        "description": "Удаление чата. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_chats_delete",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/users/ban": {
      "post": {
        "tags": [
          "Модерация"
        ],
        "summary": "Блокировка пользователя",
        "description": "Блокировка пользователя. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_users_ban",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/users/unban": {
      "post": {
        "tags": [
          "Модерация"
        ],
        "summary": "Разблокировка пользователя",
        "description": "Разблокировка пользователя. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_users_unban",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/history": {
      "get": {
        "tags": [
          "Сообщения"
        ],
        "summary": "История сообщений",
        "description": "История сообщений. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_history",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/updates": {
      "get": {
        "tags": [
          "Updates"
        ],
        "summary": "Очередь обновлений",
        "description": "Long polling событий клиента или бота. Bot updates долговечны и остаются до явного ACK.",
        "operationId": "get_updates",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/updates/ack": {
      "post": {
        "tags": [
          "Updates"
        ],
        "summary": "Подтверждение обновлений",
        "description": "Подтверждение обновлений. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "post_updates_ack",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object"
              },
              "example": {
                "update_id": 2048
              }
            }
          }
        }
      }
    },
    "/file/{id}": {
      "get": {
        "tags": [
          "Файлы"
        ],
        "summary": "Скачивание файла",
        "description": "Скачивание файла. Возвращает JSON-ответ или стандартную JSON-ошибку.",
        "operationId": "get_file_id",
        "responses": {
          "200": {
            "description": "Успешный ответ"
          },
          "400": {
            "description": "Ошибка запроса"
          },
          "401": {
            "description": "Ошибка авторизации"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      },
      "oauthClient": {
        "type": "http",
        "scheme": "basic",
        "description": "OAuth client_id/client_secret. Device Authorization Grant не имеет отдельного стандартного flow в OpenAPI 3.1; discovery доступен в /.well-known/oauth-authorization-server."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          }
        },
        "required": [
          "error"
        ]
      }
    }
  }
}
