openapi: 3.0.0
info:
  version: 0.0.33
  title: Max Bot API
  license:
    name: Apache 2.0
  description: |-
    # About
    Bot API allows bots to interact with Max. Methods are called by sending HTTPS requests to [platform-api2.max.ru](https://platform-api2.max.ru) domain.
    Bots are third-party applications that use Max features. A bot can legitimately take part in a conversation. It can be achieved through HTTP requests to the Max Bot API.

    ## Features
    Max bots of the current version are able to:
    - Communicate with users and respond to requests
    - Recommend users complete actions via programmed buttons
    - Request personal data from users (name, short reference, phone number)
    We'll keep working on expanding bot capabilities in the future.

    ## Examples
    Bots can be used for the following purposes:
    - Providing support, answering frequently asked questions
    - Sending typical information
    - Voting
    - Likes/dislikes
    - Following external links
    - Forwarding a user to a chat/channel

    ## HTTP verbs
    `GET` &mdash; getting resources, parameters are transmitted via URL

    `POST` &mdash; creation of resources (for example, sending new messages)

    `PUT` &mdash; editing resources

    `DELETE` &mdash; deleting resources

    `PATCH` &mdash; patching resources

    ## HTTP response codes
    `200` &mdash; successful operation

    `400` &mdash; invalid request

    `401` &mdash; authentication error

    `404` &mdash; resource not found

    `405` &mdash; method is not allowed

    `429` &mdash; the number of requests is exceeded

    `503` &mdash; service unavailable

    ## Resources format
    For content requests (PUT and POST) and responses, the API uses the JSON format.
    All strings are UTF-8 encoded.
    Date/time fields are represented as the number of milliseconds that have elapsed since 00:00 January 1, 1970 in the long format. To get it, you can simply multiply the UNIX timestamp by 1000. All date/time fields have a UTC timezone.
    ## Error responses
    In case of an error, the API returns a response with the corresponding HTTP code and JSON with the following fields:

    `code` - the string with the error key

    `message` - a string describing the error </br>

    For example:
    ```bash
    > http https://platform-api2.max.ru/chats?access_token={EXAMPLE_TOKEN}
    HTTP / 1.1 403 Forbidden
    Cache-Control: no-cache
    Connection: Keep-Alive
    Content-Length: 57
    Content-Type: application / json; charset = utf-8
    Set-Cookie: web_ui_lang = ru; Path = /; Domain = .max.ru; Expires = 2019-03-24T11: 45: 36.500Z
    {
       "code": "verify.token",
       "message": "Invalid access_token"
    }
    ```
    ## Receiving notifications
    Max Bot API supports 2 options of receiving notifications on new events for bots:
    - Push notifications via WebHook. To receive data via WebHook, you'll have to [add subscription](/docs-api/methods/POST/subscriptions);
    - Notifications upon request via [long polling](/docs-api/methods/GET/updates) API. All data can be received via long polling **by default** after creating the bot.

    Both methods **cannot** be used simultaneously.
    Refer to the response schema of [GET:/updates](/docs-api/methods/GET/updates) method to check all available types of updates.

    ### Webhook
    There is some notes about how we handle webhook subscription:
    1. Sometimes webhook notification cannot be delivered in case when bot server or network is down.

      In such case we well retry delivery in a short period of time (from 30 to 60 seconds) and will do this until get
      `200 OK` status code from your server, but not longer than **8 hours** (*may change over time*) since update happened.

      We also consider any non `200`-response from server as failed delivery.

    2. To protect your bot from unexpected high load we send **no more than 100** notifications per second by default.
      If you want increase this limit, contact us at [@support](https://max.ru/support).


    It should be from one of the following subnets:
    ```
    185.16.150.0/30
    185.16.150.84/30
    185.16.150.152/30
    185.16.150.192/30
    ```


    ## Message buttons
    You can program buttons for users answering a bot.
    Max supports the following types of buttons:

    `callback` &mdash; sends a notification with payload to a bot (via WebHook or long polling)

    `link` &mdash; makes a user to follow a link

    `request_contact` &mdash; requests the user permission to access contact information (phone number, short link, email)

    `request_geo_location` &mdash; asks user to provide current geo location

    `chat` &mdash; creates chat associated with message

    To start create buttons [send message](/docs-api/methods/POST/messages) with `InlineKeyboardAttachment`:
    ```json
    {
      "text": "It is message with inline keyboard",
      "attachments": [
        {
          "type": "inline_keyboard",
          "payload": {
            "buttons": [
              [
                {
                  "type": "callback",
                  "text": "Press me!",
                  "payload": "button1 pressed"
                }
              ],
              [
                {
                  "type": "chat",
                  "text": "Discuss",
                  "chat_title": "Message discussion"
                }
              ]
            ]
          }
        }
      ]
    }
    ```
    ### Chat button
    Chat button is a button that starts chat assosiated with the current message. It will be **private** chat with a link, bot will be added as administrator by default.

    Chat will be created as soon as the first user taps on button. Bot will receive `message_chat_created` update.

    Bot can set title and description of new chat by setting `chat_title` and `chat_description` properties.

    Whereas keyboard can contain several `chat`-buttons there is `uuid` property to distinct them between each other.
    In case you do not pass `uuid` we will generate it. If you edit message, pass `uuid` so we know that this button starts the same chat as before.

    Chat button also can contain `start_payload` that will be sent to bot as part of `message_chat_created` update.

    ## Deep linking
    Max supports deep linking mechanism for bots. It allows passing additional payload to the bot on startup.
    Deep link can contain any data encoded into string up to **512** characters long. Longer strings will be omitted and **not** passed to the bot.

    Each bot has start link that looks like:
    ```
    https://max.ru/<botName>?start=<payload>
    ```
    As soon as user clicks on such link we open dialog with bot and send this payload to bot as part of `bot_started` update:
    ```json
    {
        "update_type": "bot_started",
        "timestamp": 1573226679188,
        "chat_id": 1234567890,
        "user": {
            "user_id": 1234567890,
            "name": "Boris",
            "username": "borisd84"
        },
        "payload": "any data meaningful to bot"
    }
    ```

    Deep linking mechanism is supported for iOS version 2.7.0 and Android 2.9.0 and higher.

    ## Text formatting

    Message text can be improved with basic formatting such as: **strong**, *emphasis*, ~strikethough~, 
    <ins>underline</ins>, `code` or link. You can use either markdown-like or HTML formatting.

    To enable text formatting set the `format` property of [NewMessageBody](#tag/new_message_model).

    ### Max flavored Markdown
    To enable [Markdown](https://spec.commonmark.org/0.29/) parsing, set the `format` property of [NewMessageBody](#tag/new_message_model) to `markdown`.

    We currently support only the following syntax:

    `*empasized*` or `_empasized_` for *italic* text

    `**strong**` or `__strong__` for __bold__ text

    `~~strikethough~~`  for ~strikethough~ text

    `++underline++`  for <ins>underlined</ins> text

    ``` `code` ``` or ` ```code``` ` for `monospaced` text

    `^^important^^` for highlighted text (colored in red, by default)

    `[Inline URL](https://dev.max.ru/)` for inline URLs

    `[User mention](max://user/%user_id%)` for user mentions without username

    `# Header` for header

    ### HTML support

    To enable HTML parsing, set the `format` property of [NewMessageBody](#tag/new_message_model) to `html`.
     
    Only the following HTML tags are supported. All others will be stripped:

    Emphasized: `<i>` or `<em>`

    Strong: `<b>` or `<strong>`

    Strikethrough: `<del>` or `<s>`

    Underlined: `<ins>` or `<u>`

    Link: `<a href="https://dev.max.ru">Docs</a>`

    Monospaced text: `<pre>` or `<code>`

    Highlighted text: `<mark>`

    Header: `<h1>`

    Text formatting is supported for iOS since version 3.1 and Android since 2.20.0.

    # Versioning
    API models and interface may change over time. To make sure your bot will get the right info, we strongly recommend adding API version number to each request. You can add it as `v` parameter to each HTTP-request. For instance, `v=0.1.2`.
    To specify the data model version you are getting through WebHook subscription, use the `version` property in the request body of the [subscribe](/docs-api/methods/POST/subscriptions) request.

    # Libraries
    We have developed the official [Java client](https://github.com/tamtam-chat/tamtam-bot-api) and [SDK](https://github.com/tamtam-chat/tamtam-bot-sdk).

    # Changelog
    To see changelog for older versions visit our [GitHub](https://github.com/tamtam-chat/tamtam-bot-api-schema/releases).
servers:
  - url: https://platform-api2.max.ru
security:
  - access_token: []
tags:
  - name: user_model
    x-displayName: User
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/User"/>
  - name: user_with_photo_model
    x-displayName: UserWithPhoto
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/UserWithPhoto"/>
  - name: bot_info
    x-displayName: BotInfo
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/BotInfo"/>
  - name: chat_member
    x-displayName: ChatMember
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/ChatMember"/>
  - name: chat_model
    x-displayName: Chat
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/Chat"/>
  - name: message_model
    x-displayName: Message
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/Message"/>
  - name: comment_message_model
    x-displayName: CommentMessage
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/CommentMessage"/>
  - name: new_message_model
    x-displayName: NewMessageBody
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/NewMessageBody"/>
  - name: new_comment_message_model
    x-displayName: NewCommentBody
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/NewCommentBody"/>
  - name: update_model
    x-displayName: Update
    description: |
      <SchemaDefinition schemaRef="#/components/schemas/Update"/>
x-tagGroups:
  - name: Methods
    tags:
      - bots
      - chats
      - messages
      - comments
      - subscriptions
      - upload
  - name: Objects
    tags:
      - user_model
      - user_with_photo_model
      - bot_info
      - chat_member
      - chat_model
      - message_model
      - new_message_model
      - new_comment_message_model
      - update_model
paths:
  /me:
    get:
      tags:
        - bots
      summary: Получение информации о боте
      operationId: getMyInfo
      description: |-
        Метод возвращает информацию о боте, который идентифицируется с помощью токена доступа `access_token`. В ответе приходит [объект User с вариантом наследования BotInfo](/docs-api/objects/User), который содержит идентификатор бота, его название, никнейм, время последней активности, описание и аватар (при наличии)

        #### Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/me" \
          -H "Authorization: {access_token}"
        ```
      responses:
        "200":
          description: Информация о боте
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BotInfo"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
  /me/commands:
    patch:
      tags:
        - bots
      summary: Добавление, изменение и удаление команд бота
      operationId: editMyCommands
      description: |
        Метод добавляет, изменяет или удаляет команды бота, отображаемые пользователю в качестве подсказок в диалогах и групповых чатах: <br/>• При вводе «/» — на платформах iOS, Android, десктоп<br/>• При нажатии кнопки с символом « / » в правом нижнем углу диалога с ботом — на платформе iOS 

         Отображение команд **в каналах не поддерживается**. Функциональность доступна на платформах: <br/>• **Для диалогов** с ботом — iOS, Android, десктоп<br/>• **Для групповых чатов** с ботом — iOS, Android 

        Чтобы удалить все команды, передайте пустой массив `commands`

        Подробнее о работе метода — [в разделе «Команды для чат-бота»](/docs-api/use-cases/chatbot-commands) 

        #### Пример запроса:
        ```bash
        curl -X PATCH "https://platform-api2.max.ru/me/commands" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
                "commands": [
                  {
                    "name": "string",
                    "description": "string"
                  },
                  {
                    "name": "string",
                    "description": "string"
                  }
                ]
              }'
      requestBody:
        description: Команды бота на выбор
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/BotCommandsPatch"
      responses:
        "200":
          description: Информация о командах бота
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BotCommandsInfo"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
  /chats/{chatId}:
    get:
      tags:
        - chats
      x-opGroup: chat
      operationId: getChat
      description: |-
        Возвращает информацию о групповом чате или канале по его ID

        Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/chats/{chatId}" \
          -H "Authorization: {access_token}"
        ```
      summary: Получение информации о групповом чате или канале
      parameters:
        - name: chatId
          description: ID запрашиваемого группового чата или канала. Как получить ID — [на
            странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      responses:
        "200":
          description: Информация о групповом чате или канале
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Chat"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
    patch:
      tags:
        - chats
      x-opGroup: chat
      operationId: editChat
      description: |-
        Позволяет редактировать информацию о групповом чате или канале, включая название, описание, иконку и закреплённое сообщение или пост

        Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала 

        Пример запроса:
        ```bash
        curl -X PATCH "https://platform-api2.max.ru/chats/{chatId}" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
          "icon": { "url": "https://example.com/image.jpg" },
          "title": "Название чата или канала",
          "description": "Описание чата или канала — от 0 до 16000 символов",
          "pin": "ID сообщения для закрепления в чате или канале",
          "notify": true
        }'
        ```
      summary: Изменение информации о групповом чате или канале
      parameters:
        - name: chatId
          description: ID чата или канала. Как получить ID — [на странице «Получение ID
            чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ChatPatch"
      responses:
        "200":
          description: Возвращается обновлённый объект чата или канала
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Chat"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "500":
          $ref: "#/components/responses/InternalError"
  /chats/{chatId}/actions:
    post:
      tags:
        - chats
      operationId: sendAction
      description: |-
        Позволяет отправлять в групповой чат такие действия бота, как например: «набор текста» или «отправка фото»

        #### Пример запроса:
        ```bash
        curl -X POST "https://platform-api2.max.ru/chats/{chatId}/actions" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
          "action": "typing_on"
        }'
        ```
      summary: Отправка действия бота в групповой чат
      parameters:
        - name: chatId
          description: ID чата. Как получить ID — [на странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ActionRequestBody"
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
  /chats/{chatId}/pin:
    get:
      tags:
        - chats
      operationId: getPinnedMessage
      description: |-
        Возвращает закреплённое сообщение в групповом чате или пост в канале 

        Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала 

        Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/chats/{chatId}/pin" \
          -H "Authorization: {access_token}"
        ```
      summary: Получение закреплённого сообщения в групповом чате или канале
      parameters:
        - name: chatId
          description: ID чата. Как получить ID — [на странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      responses:
        "200":
          description: Закреплённое сообщение
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetPinnedMessageResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"
    put:
      tags:
        - chats
      operationId: pinMessage
      description: |-
        Закрепляет сообщение в групповом чате или пост в канале 

        Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала 

        Пример запроса:
        ```bash
        curl -X PUT "https://platform-api2.max.ru/chats/{chatId}/pin" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
          "message_id": "{message_id}",
          "notify": true
        }'
        ```
      summary: Закрепление сообщения в групповом чате или канале
      parameters:
        - name: chatId
          description: ID группового чата или канала, где нужно закрепить сообщение. Как
            получить ID — [на странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PinMessageBody"
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"
    delete:
      tags:
        - chats
      operationId: unpinMessage
      description: |-
        Открепляет сообщение в групповом чате или пост в канале 

        Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала 

        Пример запроса:
        ```bash
        curl -X DELETE "https://platform-api2.max.ru/chats/{chatId}/pin" \
          -H "Authorization: {access_token}"
        ```
      summary: Открепление сообщения в групповом чате или канале
      parameters:
        - name: chatId
          description: ID группового чата или канала, в котором нужно открепить сообщение
            или пост. Как получить ID — [на странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      responses:
        "200":
          description: Объект удалён или запрос завершился ошибкой (причина ошибки описана
            в `message`)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SimpleQueryResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"
  /chats/{chatId}/members/me:
    get:
      tags:
        - chats
      x-opGroup: myMembership
      operationId: getMembership
      summary: Получение информации о членстве бота в групповом чате или канале
      description: |-
        Возвращает информацию о членстве бота в групповом чате или канале, общую информацию о нём, а также список [доступных прав доступа](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администраторов). Бот идентифицируется с помощью токена доступа

        Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/chats/{chatId}/members/me" \
          -H "Authorization: {access_token}"
        ```
      parameters:
        - name: chatId
          description: ID группового чата или канала. Как получить ID — [на странице
            «Получение ID чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      responses:
        "200":
          description: Информация о членстве бота
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChatMember"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"
    delete:
      tags:
        - chats
      operationId: leaveChat
      x-opGroup: myMembership
      summary: Удаление бота из группового чата или канала
      description: |-
        Удаляет бота из участников группового чата или канала

        Пример запроса:
        ```bash
        curl -X DELETE "https://platform-api2.max.ru/chats/{chatId}/members/me" \
          -H "Authorization: {access_token}"
        ```
      parameters:
        - name: chatId
          description: ID группового чата или канала. Как получить ID — [на странице
            «Получение ID чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      responses:
        "200":
          description: Объект удалён или запрос завершился ошибкой (причина ошибки описана
            в `message`)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SimpleQueryResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"
  /chats/{chatId}/members/admins:
    get:
      tags:
        - chats
      operationId: getAdmins
      summary: Получение списка администраторов группового чата или канала
      description: |-
        Возвращает список всех администраторов группового чата и канала (пользователей и ботов) и их данные, например: идентификатор, имя, никнейм, время последней активности, URL аватара, флаги администратора, владельца и бота, а также права на управление каналом или групповым чатом для пользователей-администраторов

        Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала. Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора)

        Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/chats/{chatId}/members/admins" \
          -H "Authorization: {access_token}"
        ``
      parameters:
        - name: chatId
          description: ID группового чата или канала. Как получить ID — [на странице
            «Получение ID чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      responses:
        "200":
          description: Список администраторов в групповом чате или канале
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChatMembersList"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"
    post:
      tags:
        - chats
      operationId: postAdmins
      description: |-
        Выдаёт пользователям и ботам, которые являются участникам чата или подписчикам канала, права администратора 

        Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала с соответствующим правом `add_admins`. Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins) 

        Права, которые можно назначить, зависят от того, где (канал или чат) и кому (пользователь или бот) выданы

         Список прав передаётся в теле запроса в массиве `admins.permissions`. Если вы хотите изменить назначенные права, вызовите повторно текущий метод: в теле запроса передайте обновлённый список прав. При повторном вызове логика работы метода соответствует `PUT`: права администратора будут обновлены полностью в соответствии с переданными в запросе

         Чтобы узнавать об изменении прав бота-администратора канала или группового чата, вы можете подписаться на событие `bot_admin_permissions_changed`. Для этого обновите подписку через Webhook с помощью [`POST /subscriptions`](/docs-api/methods/POST/subscriptions). Получение события через Long Polling пока недоступно. Подробнее о других событиях — [в описании объекта `Update`](/docs-api/objects/Update) 

        Пример запроса:
        ```bash
        curl -X POST "https://platform-api2.max.ru/chats/{chatId}/members/admins" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
          "admins": [
            {
              "user_id": "{user_id}",
              "permissions": [
                "read_all_messages",
                "add_remove_members",
                "add_admins",
                "change_chat_info",
                "pin_message",
                "write"
              ],
              "alias": "администраторам"
            }
          ]
        }'
        ``` 

        ## Доступные права администратора 
        - `read_all_messages` — читать все сообщения в групповом чате или посты в канале. Право можно назначить пользователям и ботам. Без этого права не получится управлять сообщениями: закреплять (`pin_message`), редактировать и удалять посты в каналах (`edit` и `delete`) и групповых чатах (`write`). Также это право важно при назначении ботов: без него тот не будет получать обновления через [Webhook](/docs-api/methods/POST/subscriptions). Управление `read_all_messages` в интерфейсе мессенджера доступно только для ботов в групповых чатах 
        - `edit` — редактировать посты и комментарии в каналах (для групповых чатов недоступно). Право можно назначить пользователям и ботам, только если уже есть право `read_all_messages` или вместе с ним — иначе вернётся ошибка. Ранее вместо `edit` в API использовалось `edit_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторов используйте `edit`. Управление `edit` также дублируется в интерфейсе мессенджера 
        - `delete` — удалять посты и комментарии в каналах (для групповых чатов недоступно). Право можно назначить пользователям и ботам, только если уже есть право `read_all_messages` или вместе с ним — иначе вернётся ошибка. Ранее вместо `delete` в API использовалось `delete_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторов используйте `delete`. Управление `delete` также дублируется в интерфейсе мессенджера 
        - `write` — редактировать и удалять сообщения в групповых чатах, а также писать посты и комментарии в каналах. Право можно назначить пользователям и ботам, только если уже есть право `read_all_messages` или вместе с ним — иначе вернётся ошибка. Ранее вместо `write` в API использовалось `post_edit_delete_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторам используйте `write`. Управление `write` также дублируется в интерфейсе мессенджера 
        - `pin_message` — закреплять сообщение. Право можно назначить пользователям и ботам, только если уже есть право `read_all_messages` или вместе с ним — иначе вернётся ошибка 
        - `change_chat_info` — изменять информацию о канале или групповом чате. Право доступно для пользователей и ботов
        - `add_remove_members` — добавлять и удалять участников группового чата или подписчиков канала. Право доступно для пользователей и в чатах, и в каналах, для ботов — **только в чатах**. Управление `add_remove_members` также дублируется в интерфейсе мессенджера 
        - `add_admins` — добавлять и удалять администраторов группового чата или канала. Право доступно для пользователей и ботов. Управление `add_admins` дублируется в интерфейсе мессенджера
        - `edit_link` — изменять ссылку на групповой чат (для каналов недоступно). Право есть для пользователей и ботов. Управление `edit_link` также дублируется в интерфейсе мессенджера
        - `can_call` — звонить в групповом чате (для каналов недоступно). Право есть у пользователей и ботов — проставляется автоматически при назначении администратором. Управление `can_call` в интерфейсе мессенджера не дублируется 
        - `view_stats` — право на просмотр статистики каналов (для групповых чатов недоступно). Назначается по умолчанию владельцам каналов. Для других пользователей-администраторов канала и ботов недоступно. Управление `view_stats` в интерфейсе мессенджера не дублируется
      summary: Назначить администратора группового чата или канала
      parameters:
        - name: chatId
          description: ID группового чата или канала. Как получить ID — [на странице
            «Получение ID чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ChatAdminsList"
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
  /chats/{chatId}/members/admins/{userId}:
    delete:
      tags:
        - chats
      operationId: deleteAdmins
      description: |-
        Лишает пользователя или бота прав администратора в групповом чате или канале. При этом из чата и канала они не исключаются 

        Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала с соответствующим правом `add_admins`. Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins). Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора) 

        Пример запроса:
        ```bash
        curl -X DELETE "https://platform-api2.max.ru/chats/{chatId}/members/admins/{userId}" \
          -H "Authorization: {access_token}"
        ```
      summary: Отменить права администратора в групповом чате или канале
      parameters:
        - name: chatId
          description: ID группового чата или канала. Как получить ID — [на странице
            «Получение ID чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
        - name: userId
          description: Идентификатор пользователя или бота, которого надо лишить прав
            администратора
          required: true
          in: path
          schema:
            type: integer
            format: int64
      responses:
        "200":
          description: Права администратора отменены или запрос завершился ошибкой
            (причина ошибки описана в `message`)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SimpleQueryResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
  /chats/{chatId}/members:
    get:
      tags:
        - chats
      operationId: getMembers
      summary: Получение участников группового чата или канала
      description: |-
        Возвращает список участников группового чата и их данные, например: идентификатор, имя, никнейм, время последней активности, URL аватара, флаги администратора, владельца и бота, а также права на управление каналом или групповым чатом для пользователей-администраторов. Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора)

        Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала 

        Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/chats/{chatId}/members" \
          -H "Authorization: {access_token}"
        ``` 
      parameters:
        - name: chatId
          description: ID группового чата или канала. Как получить ID — [на странице
            «Получение ID чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
        - name: user_ids
          description: Список ID пользователей, чьё членство нужно получить. Когда этот
            параметр передан, параметры `count` и `marker` игнорируются
          required: false
          in: query
          schema:
            type: array
            uniqueItems: true
            items:
              type: integer
              format: int64
            nullable: true
          style: simple
        - name: marker
          description: Указатель на следующую страницу данных
          in: query
          schema:
            type: integer
            format: int64
        - name: count
          description: Количество участников, которых нужно вернуть в ответе
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: "20"
      responses:
        "200":
          description: Возвращает список участников и указатель на следующую страницу данных
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ChatMembersList"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"
    post:
      tags:
        - chats
      disable-notification: '<p style="margin: 8px 0 0 0;"><strong>С 9 сентября
        2026</strong> работа метода <code>POST /chats/{chatId}/members</code>
        ограничена</p>'
      operationId: addMembers
      description: |-
        Добавляет участников в групповой чат

         Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата с соответствующим правом `add_remove_members`. Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins). Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора)

         >Добавить подписчиков в канал с помощью этого метода нельзя 

        **Пример запроса**:
        ```bash
        curl -X POST "https://platform-api2.max.ru/chats/{chatId}/members" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
          "user_ids": ["{user_id_1}", "{user_id_2}"]
        }'
        ```
      summary: Добавление участников в групповой чат
      parameters:
        - name: chatId
          description: ID группового чата. Как получить ID — [на странице «Получение ID
            чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UserIdsList"
      responses:
        "200":
          description: Успешный или неуспешный результат
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ModifyMembersResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "500":
          $ref: "#/components/responses/InternalError"
    delete:
      tags:
        - chats
      operationId: removeMember
      description: |-
        Удаляет участника из группового чата или канала

         Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого чата или канала с соответствующим правом `add_remove_members`. Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins). Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора) 

        Пример запроса:
        ```bash
        curl -X DELETE "https://platform-api2.max.ru/chats/{chatId}/members?user_id={user_id}&block=true" \
          -H "Authorization: {access_token}"
        ```
      summary: Удаление участников из группового чата или канала
      parameters:
        - name: chatId
          description: ID группового чата или канала. Как получить ID — [на странице
            «Получение ID чата или канала»](/docs-api/use-cases/getting-chat-id)
          required: true
          in: path
          schema:
            type: integer
            format: int64
            pattern: \-?\d+
        - name: user_id
          description: " ID пользователя, которого нужно удалить из группового чата или
            канала"
          required: true
          in: query
          schema:
            type: integer
            format: int64
        - name: block
          description: Если передать `true`, пользователь будет заблокирован в чате.
            Применяется только для чатов с публичной или приватной ссылкой.
            Игнорируется в остальных случаях
          required: false
          in: query
          schema:
            type: boolean
            default: false
      responses:
        "200":
          description: Объект удалён или запрос завершился ошибкой (причина ошибки описана
            в `message`)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SimpleQueryResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "500":
          $ref: "#/components/responses/InternalError"
  /subscriptions:
    get:
      tags:
        - subscriptions
      operationId: getSubscriptions
      description: |-
        Если ваш бот получает данные через Webhook, этот метод возвращает список всех подписок 

        > ! 
        > - Для повышения безопасности **с 25 мая** прекращается поддержка получения вебхуков по HTTP, а также самоподписных сертификатов. Рекомендуем заранее перейти на HTTPS и сертификаты от доверенных центров, в том числе сертификаты Минцифры. Чтобы обновить подписку на события, используйте [POST /subscriptions](/docs-api/methods/POST/subscriptions)
        > - Получение обновлений с помощью [Long Polling](/docs-api/methods/GET/updates) ограничено по скорости и сроку хранения событий — этот способ не подходит для production-окружения. Рекомендуем на всех этапах работы использовать [Webhook](/docs-api/methods/POST/subscriptions)

        #### Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/subscriptions" \
          -H "Authorization: {access_token}"
        ```
      summary: Получение всех подписок через Webhook
      responses:
        "200":
          description: Список текущих подписок
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GetSubscriptionsResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
    post:
      tags:
        - subscriptions
      operationId: subscribe
      description: |-
        Метод настраивает доставку событий бота через Webhook  — основной механизм получения событий в продуктовых интеграциях. При активной подписке Long Polling не работает 

        > ! 
        > - Для повышения безопасности **с 25 мая** прекращается поддержка получения вебхуков по HTTP, а также самоподписных сертификатов. Рекомендуем заранее перейти на HTTPS и сертификаты от доверенных центров, в том числе сертификаты Минцифры. Чтобы обновить подписку на события, используйте текущий метод
        > - Получение обновлений с помощью [Long Polling](/docs-api/methods/GET/updates) ограничено по скорости и сроку хранения событий — этот способ не подходит для production-окружения. Рекомендуем на всех этапах работы использовать [Webhook](/docs-api/methods/POST/subscriptions)

         ## Модель доставки событий

        После вызова метода `POST /subscriptions` события отправляются на указанный Webhook-endpoint в виде HTTPS POST-запросов с объектом [`Update`](/docs-api/objects/Update)

        Как обрабатывается событие:

        1. При наступлении события выполняется вызов Webhook-endpoint
        2. Выполняется TLS-валидация целевого endpoint для безопасной передачи данных
        3. На endpoint отправляется HTTPS-запрос
        4. Если при создании подписки указан `secret`, проверяется заголовок `X-Max-Bot-Api-Secret` 
        5. При успешной валидации возвращается HTTP `200 OK`
        6. Выполняется обработка события
        7. Инициируются вызовы MAX API


        ## Требования к Webhook-endpoint

        ### URL и порт

        Webhook-endpoint должен быть доступен по HTTPS на порту 443. Ваш сервер должен прослушивать этот порт. Порт в URL не указывается:

        ```
        https://your-domain.com/webhook
        ```

        > Поддерживается только порт 443. Если endpoint недоступен, события не доставляются

        ### Безопасность соединения (TLS)

        Перед отправкой событий устанавливается HTTPS-соединение, и Webhook-endpoint проверяется на соответствие следующим требованиям безопасности соединения:
        - Webhook-endpoint удостоверен TLS-сертификатом, выданным доверенным центром сертификации, или TLS-сертификатом Минцифры. Самоподписанные сертификаты не поддерживаются 
        - Доменное имя в URL Webhook-endpoint совпадает с CN или SAN сертификата
        - Сервер предоставляет полную цепочку сертификатов

        > Если проверка не пройдена, события не доставляются

        ### Обработка запросов

        Webhook-endpoint должен возвращать **HTTP 200** в течение 30 секунд. Любой другой код ответа или превышение тайм-аута считается ошибкой доставки

        #### Пример запроса:
        ```bash
        curl -X POST "https://platform-api2.max.ru/subscriptions" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
          "url": "https://your-domain.com/webhook",
          "update_types": ["message_created", "bot_started"],
          "secret": "your_secret"
        }'
        ```

        ### Политика повторных попыток

        Если доставка не удалась, выполняется до 10 повторных попыток с экспоненциально растущим интервалом:

        - 1-я попытка: через 60 секунд
        - 2-я попытка: через 150 секунд (60 × 2,5)
        - 3-я попытка: через 375 секунд (150 × 2,5)
        - и так далее

        > Если в течение 8 часов от Webhook-endpoint не получен успешный ответ, бот автоматически от него отписывается

        ## Безопасность Webhook-запросов

         Параметр `secret` позволяет убедиться, что Webhook-запросы приходят от MAX, а не от третьей стороны. Это необязательный параметр, но мы настоятельно рекомендуем указывать его. Проверяйте значение заголовка `X-Max-Bot-Api-Secret` на Webhook-сервере и отклоняйте запросы при несоответствии 

        Если `secret` указан при создании подписки, он передаётся в заголовке `X-Max-Bot-Api-Secret` каждого Webhook-запроса

          

        ---

        ## Формат и типы событий

        Webhook-запрос содержит объект [`Update`](/docs-api/objects/Update)

        Полный список типов событий и структура объекта описаны в разделе [Update](/docs-api/objects/Update)
      summary: Подписка на обновления о новых событиях через Webhook
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SubscriptionRequestBody"
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
    delete:
      tags:
        - subscriptions
      operationId: unsubscribe
      description: |-
        Отписывает бота от получения обновлений о новых событиях через Webhook. После вызова этого метода бот перестаёт получать уведомления о новых событиях на Webhook-endpoint, и становится доступна доставка уведомлений через Long Polling 

         > ! 
        > - Для повышения безопасности **с 25 мая** прекращается поддержка получения вебхуков по HTTP, а также самоподписных сертификатов. Рекомендуем заранее перейти на HTTPS и сертификаты от доверенных центров, в том числе сертификаты Минцифры. Чтобы обновить подписку на события, используйте [POST /subscriptions](/docs-api/methods/POST/subscriptions)
        > - Получение обновлений с помощью [Long Polling](/docs-api/methods/GET/updates) ограничено по скорости и сроку хранения событий — этот способ не подходит для production-окружения. Рекомендуем на всех этапах работы использовать [Webhook](/docs-api/methods/POST/subscriptions)

        #### Пример запроса:
        ```bash
        curl -X DELETE "https://platform-api2.max.ru/subscriptions?url=https://your-domain.com/webhook" \
          -H "Authorization: {access_token}"
        ```
      summary: Отписка от обновлений о новых событиях через Webhook
      parameters:
        - name: url
          in: query
          description: URL, который нужно удалить из подписок на WebHook
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Бот отписан от обновлений или запрос завершился ошибкой (причина
            ошибки описана в `message`)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SimpleQueryResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
  /uploads:
    post:
      tags:
        - upload
      operationId: getUploadUrl
      description: |+
        Метод возвращает URL для загрузки медиафайла и последующей отправки его во вложении к сообщению в чате или канале. После загрузки файлу присваивается токен, который нужно передать в запросе [POST /messages](/docs-api/methods/POST/messages) или [PUT /messages](/docs-api/methods/PUT/messages) в параметре `attachments.payload.token`

          По URL-ссылке, которая вернётся в ответ на запрос, можно загрузить только один файл. Если вы хотите загрузить ещё, отправьте повторно запрос `POST /uploads` и используйте новую URL-ссылку 

         Подробные сценарии и примеры загрузки разных типов медиа смотрите [в разделе «Отправка сообщений с медиафайлами»](/docs-api/use-cases/sending-messages/media) 

         #### Пример запроса для загрузки медиафайла 

        ```bash
        curl -X POST "https://platform-api2.max.ru/uploads?type={type}" \
          -H "Authorization: {access_token}"
        ```

        ### Способы загрузки медиафайлов

        В ответ на текущий запрос `POST /uploads` в поле `url` вернётся URL для загрузки медиафайла — загрузить можно одним из двух способов: 

        - **Resumable upload** — надёжный способ, если заголовок `Content-Type` не равен `multipart/form-data`. Этот способ позволяет загружать файл частями и возобновлять загрузку с последней успешно загруженной части в случае ошибок 

         **Пример загрузки файла по URL**:

        ```bash
        curl -X POST "%UPLOAD_URL%" \
          -H "Authorization: {access_token}" \
          -F "data=@example.mp4"
        ```

        где `%UPLOAD_URL%` — это значение поля `url`, которое вернулось [в ответе](/docs-api/methods/POST/uploads#Результат) на запрос `POST /uploads`

        - **Multipart upload** — более простой, но менее надёжный способ. В этом случае используется заголовок `Content-Type: multipart/form-data`. Файл отправляется целиком одним запросом. Если загрузка прервётся, невозможно её возобновить — придётся начать заново

         **Пример использования cURL для загрузки файла**:

        ```shell
        curl -i -X POST \
          -H "Content-Type: multipart/form-data" \
          -F "data=@movie.pdf" "%UPLOAD_URL%"
        ```

        где `%UPLOAD_URL%` — это значение поля `url`, которое вернулось [в ответе](/docs-api/methods/POST/uploads#Результат) на запрос `POST /uploads`

        ## Обработка медиафайлов

        После успешной загрузки сервер обрабатывает файл. Файлы от нескольких мегабайт обрабатываются дольше

        > Для стабильной работы сервисов MAX убедитесь, что максимальное количество запросов в секунду на platform-api2.max.ru — 30 rps 

        Если отправить сообщение с вложением сразу после загрузки, может возникнуть ошибка:

        ```json
        {
          "code": "attachment.not.ready",
          "message": "Key: errors.process.attachment.file.not.processed"
        }
        ```

        **Как избежать ошибки:**
        - После загрузки файла сделайте паузу перед отправкой сообщения
        - Если отправка не удалась, повторите попытку через некоторое время. Увеличивайте интервал с каждой попыткой
        - Загружайте часто используемые файлы заранее и переиспользуйте токен

      summary: Загрузка медиафайлов
      parameters:
        - description: 'Тип загружаемого файла. Возможные значения: `"image"`, `"video"`,
            `"audio"`, `"file"`'
          name: type
          required: true
          in: query
          schema:
            $ref: "#/components/schemas/UploadType"
      responses:
        "200":
          description: Возвращает URL для загрузки вложения и токен для загрузки медиафайла
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UploadEndpoint"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
  /messages:
    get:
      tags:
        - messages
      operationId: getMessages
      description: |-
        Возвращает информацию о сообщении или массив сообщений из чата или посты из каналов. Для выполнения запроса нужно указать один из параметров — `chat_id` или `message_ids`:

        - `chat_id` — метод возвращает массив сообщений или постов из указанного чата или канала, только если чат-бот в них является администратором. Сообщения возвращаются в обратном порядке: последние сообщения будут первыми в массиве. Как получить ID — [на странице «Получение ID чата или канала»](/docs-api/use-cases/getting-chat-id)

        - `message_ids` — метод возвращает информацию о запрошенных сообщениях или постах. Можно указать один идентификатор или несколько

        #### Пример запроса с использованием `chat_id`:
        ```bash
        curl -X GET "https://platform-api2.max.ru/messages?chat_id={chat_id}" \
          -H "Authorization: {access_token}"
        ```

        #### Пример запроса с использованием `message_ids`:
        ```bash
        curl -X GET "https://platform-api2.max.ru/messages?message_ids={message_id1},{message_id2}" \
          -H "Authorization: {access_token}"
        ```
      summary: Получение информации о сообщениях или постах
      parameters:
        - description: ID чата или канала, чтобы получить из него сообщения или посты.
            Обязательный параметр, если не указан `message_ids`. Как получить
            ID — [на странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          name: chat_id
          in: query
          schema:
            $ref: "#/components/schemas/bigint"
        - description: Список ID сообщений или постов, которые нужно получить (через
            запятую). Обязательный параметр, если не указан `chat_id`
          name: message_ids
          in: query
          style: simple
          schema:
            type: array
            format: string
        - name: from
          description: "Время, до которого будут запрошены все сообщения или посты,
            начиная с первого опубликованного. Формат времени: Unix timestamp в
            миллисекундах"
          in: query
          schema:
            $ref: "#/components/schemas/bigint"
        - name: to
          description: "Время, начиная с которого будут запрошены все сообщения или посты,
            — вплоть до последнего опубликованного. Формат времени:
            Unix timestamp в миллисекундах"
          in: query
          schema:
            $ref: "#/components/schemas/bigint"
        - name: count
          description: Максимальное количество сообщений или постов в ответе
          in: query
          schema:
            type: integer
            format: int32
            default: 50
            minimum: 1
            maximum: 100
      responses:
        "200":
          description: Информация о сообщении или массиве сообщений из чата
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MessageList"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          description: Это исключение возникает, когда пользователь приостановил бота или
            у него нет доступа к чату
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "500":
          $ref: "#/components/responses/InternalError"
    post:
      tags:
        - messages
      operationId: sendMessage
      description: |
        Отправляет сообщение в диалог, групповой чат или канал

        Кроме текста сообщения или посты могут содержать следующие типы вложений:

        - `image` — изображение (JPG, JPEG, PNG, GIF, TIFF, BMP, HEIC)

        - `video` — видео (MP4, MOV, MKV, WEBM, MATROSKA)

        - `audio` — аудио (MP3, M4A и другие)

        - `file` — файл для загрузки в (TXT, DOC и другие)

        - `sticker` — стикер

        - `contact` — контакт (данные контакта из телефонного справочника)

        - `inline_keyboard` — сообщение или пост с кнопкой

        - `share` — контент, прикрепленный по внешнему URL

        - `location` — локация

        #### Ограничения

        Можно отправлять не более двух сообщений в секунду в один диалог, групповой чат или канал. При превышении этого лимита сообщения следует ставить в очередь или делать задержку перед отправкой

        #### Пример запроса с одной кнопкой-ссылкой

        Больше примеров запросов с кнопками — [в разделе «Клавиатура»](/docs-api/use-cases/sending-messages/keyboard#Как%20добавить%20кнопки)
        ````bash
        curl -X POST "https://platform-api2.max.ru/messages?user_id={user_id}" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
          "text": "Это сообщение с кнопкой-ссылкой",
          "attachments": [
            {
              "type": "inline_keyboard",
              "payload": {
                "buttons": [
                  [
                    {
                      "type": "link",
                      "text": "Откройте сайт",
                      "url": "https://example.com"
                    }
                  ]
                ]
              }
            }
          ]
         }'
      summary: Отправка сообщений
      parameters:
        - name: user_id
          description: Если вы хотите отправить сообщение пользователю, укажите ID этого
            пользователя
          in: query
          required: false
          schema:
            type: integer
            format: int64
        - name: chat_id
          description: Если сообщение отправляется в чат или канал, укажите ID этого чата
            или канала. Как получить ID — [на странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          schema:
            type: integer
            format: int64
          in: query
          required: false
        - name: disable_link_preview
          description: " Если `true`, сервер не будет генерировать превью для ссылок в
            тексте сообщения или поста"
          in: query
          required: false
          schema:
            type: boolean
            default: false
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NewMessageBody"
      responses:
        "200":
          description: Информация о созданном сообщении или опубликованном посте
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SendMessageResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
    put:
      tags:
        - messages
      operationId: editMessage
      description: |-
        Редактирует сообщения и посты, отправленные ботом

          #### Ограничения

        - Есть особенности редактирования сообщений в диалогах с ботом, связанные со сроком давности:

            - сообщения с кнопками [`inline_keyboard`](/docs-api/use-cases/sending-messages/keyboard#Как%20добавить%20кнопки) редактируются независимо от срока давности

            - остальные сообщения редактируются, если они отправлены менее 7 суток назад

        - В групповых чатах и каналах любые сообщения редактируются независимо от срока давности

        - Можно редактировать не более двух сообщений в секунду в одном диалоге, групповом чате или канале. При превышении этого лимита сообщения следует ставить в очередь или делать задержку перед редактированием

        #### Пример запроса:
        ```bash
        curl -X PUT "https://platform-api2.max.ru/messages?message_id=message_id" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
         -d '{
          "text": "**Новый текст**",
          "attachments": [
            {
              "type": "inline_keyboard",
              "payload": {
                "buttons": [
                  [
                    {
                     "type": "link",
                     "text": "Откройте сайт",
                     "url": "https://example.com"
                    }
                  ]
                ]
              }
            }
          ],
           "link": {
                  "type": "reply",
                  "mid": "mid.message_id"
            },
           "notify": false, 
           "format": "markdown"    
           }
         }'
        ```
      summary: Редактирование сообщений
      parameters:
        - name: message_id
          description: ID редактируемого сообщения
          required: true
          in: query
          schema:
            type: string
            minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NewMessageBody"
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
    delete:
      tags:
        - messages
      operationId: deleteMessage
      summary: Удаление сообщений
      description: |-
        Удаляет сообщения в диалоге, групповом чате или канале

         #### Ограничения 

        - Бот должен быть администратором и иметь право на удаление сообщений

        - Бот может удалять сообщения:

          - в диалоге — только сообщения, отправленные самим ботом

          - в групповом чате — любые сообщения

          - в канале — любые сообщения

        - Можно удалять не более двух сообщений в секунду в одном диалоге, групповом чате или канале. При превышении этого лимита сообщения следует ставить в очередь или делать задержку перед удалением

        #### Пример запроса:
        ```bash
        curl -X DELETE "https://platform-api2.max.ru/messages?message_id={message_id}" \
          -H "Authorization: {access_token}"
        ```
      parameters:
        - name: message_id
          description: ID удаляемого сообщения
          required: true
          in: query
          schema:
            type: string
            minLength: 1
      responses:
        "200":
          description: Объект удалён или запрос завершился ошибкой (причина ошибки описана
            в `message`)
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SimpleQueryResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "500":
          $ref: "#/components/responses/InternalError"
  /messages/{messageId}:
    get:
      tags:
        - messages
      operationId: getMessageById
      description: |-
        Возвращает сообщение из канала или чата по его ID

        #### Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/messages/{messageId}" \
          -H "Authorization: {access_token}"
        ```
      summary: Получение сообщений
      parameters:
        - description: ID сообщения (`mid`), чтобы получить одно сообщение в чате или канале
          in: path
          name: messageId
          required: true
          schema:
            type: string
            pattern: "[a-zA-Z0-9_\\-]+"
      responses:
        "200":
          description: Информация о сообщении с ID, указанным в запросе
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Message"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          description: В случае, если сообщение не найдено или бот не имеет доступа к нему
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "500":
          $ref: "#/components/responses/InternalError"
  /messages/{messageId}/comments:
    get:
      tags:
        - comments
      operationId: getComments
      description: |-
        Возвращает все комментарии к посту в канале по его ID: страницу результата и маркер на следующую страницу. Вы можете отфильтровать комментарии: указать промежуток времени, за который хотите их получить, и/или запросить N последних

        Для получения комментариев к посту бот, чей токен `access_token` используется для авторизации, должен быть администратором этого канала с правом `read_all_messages`

         Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins). Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора) 

        **Пример запроса с фильтрацией по времени и количеству последних комментариев за этот промежуток**:
        ```bash
        curl -X GET "https://platform-api2.max.ru/messages/{messageId}/comments?after={after}&before={before}&count={count}" \
          -H "Authorization: {access_token}"
        ```

        **Пример запроса конкретных комментариев к посту по их ID**:
        ```bash
        curl -X GET "https://platform-api2.max.ru/messages/{messageId}/comment_ids={comment_ids1},{comment_ids2},{comment_ids3}" \
          -H "Authorization: {access_token}"
        ```
      summary: Получение всех комментариев к посту
      parameters:
        - description: Идентификатор поста (`mid`), к которому относится комментарий
          in: path
          name: messageId
          required: true
          schema:
            type: string
            pattern: (mid.)?[a-zA-Z0-9_\-]+
        - description: |-
            Список идентификаторов комментариев, которые вы хотите получить, — укажите через запятую

            Если параметр указан, возвращаются только запрошенные комментарии: пагинация игнорируется
          name: comment_ids
          in: query
          style: form
          schema:
            uniqueItems: true
            items:
              type: string
            nullable: true
        - name: before
          description: |-
            Время, до которого будут запрошены все комментарии с начала чата (в формате Unix timestamp в миллисекундах)

            Минимум: `0`
          in: query
          schema:
            type: integer
            format: int64
            minimum: 0
        - name: after
          description: |-
            Время, начиная с которого будут запрошены все комментарии до конца чата (в формате Unix timestamp в миллисекундах)

             Минимум: `0`
          in: query
          schema:
            type: integer
            format: int64
            minimum: 0
        - name: count
          description: " Количество комментариев, которое вы хотите получить в ответе: от
            `1` до `100`"
          in: query
          schema:
            type: integer
            format: int32
            default: 50
            minimum: 1
            maximum: 100
      responses:
        "200":
          description: Список запрошенных комментариев
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CommentMessageList"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
    post:
      tags:
        - comments
      operationId: sendComment
      description: |-
        Отправляет комментарий к посту в канале

         Для этого: 

        • В настройках канала должны быть [включены комментарии](/docs/channels/manage#Как%20включить%20комментарии%20в%20канале)<br/>• Бот, чей токен `access_token` используется для авторизации, должен быть администратором этого канала c правами `read_all_messages` и `write`<br/>

         Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins). Подробнее о правах — в описании [`GET /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора) 

        **Пример запроса**:
        ```bash
        curl -X POST "https://platform-api2.max.ru/messages/{messageId}/comments" \
          -H "Authorization: {access_token}"
        ```
      summary: Отправка комментария
      parameters:
        - description: Идентификатор сообщения (`mid`), к которому относится комментарий
          in: path
          name: messageId
          required: true
          schema:
            type: string
            pattern: (mid.)?[a-zA-Z0-9_\-]+
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NewCommentBody"
      responses:
        "200":
          description: Возвращает информацию о созданном комментарии
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SendCommentResult"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
    put:
      tags:
        - comments
      operationId: editComment
      description: |-
        Редактирует комментарий бота к посту в канале

        Для этого бот, чей токен `access_token` используется для авторизации, должен быть участником этого канала 

         Отредактировать комментарий можно только **в течение 26 ч** с момента публикации. Если отправить запрос позже, вернётся HTTP-ответ `422` с кодом `"code": "comments.timeout_exceeded"` и описанием ошибки 

         Какие комментарии можно отредактировать, зависит от прав бота: <br/>• Боту назначено право администратора `edit` — может редактировать комментарии, опубликованные от имени канала<br/>• У бота нет права администратора `edit` — может редактировать только свои комментарии

        Если канал архивирован или в нём [отключены комментарии](/docs/channels/manage#Как%20отключить%20комментарии%20в%20канале), бот может редактировать старые комментарии, но не позднее 26 ч с момента публикации

         Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins). Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора)

        #### Пример запроса:
        ```bash
        curl -X PUT "https://platform-api2.max.ru/messages/{messageId}/comments?comment_id={comment_id}" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
          "text": "Изменённый текст"
        }'
        ```
      summary: Редактирование комментария
      parameters:
        - description: Идентификатор поста (`mid`), комментарий к которому вы хотите
            отредактировать
          in: path
          name: messageId
          required: true
          schema:
            type: string
            pattern: (mid.)?[a-zA-Z0-9_\-]+
        - name: comment_id
          description: Идентификатор редактируемого комментария
          required: true
          in: query
          schema:
            type: string
            minLength: 1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NewCommentBody"
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "500":
          $ref: "#/components/responses/InternalError"
    delete:
      tags:
        - comments
      operationId: deleteComment
      summary: Удаление комментария
      description: |-
        Удаляет комментарий пользователя или бота к посту в канале 

        • С помощью метода можно удалять как чужие комментарии, так и свои<br/>• Если канал архивирован или в нём [отключены комментарии](/docs/channels/manage#Как%20отключить%20комментарии%20в%20канале), по-прежнему можно удалять старые комментарии<br/>• Если комментарий удалён ошибочно, восстановить его нельзя 

         Для удаления комментария бот, чей токен `access_token` используется для авторизации, должен быть администратором этого канала с правами `read_all_messages` и `delete`

        Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins). Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора) 

        **Пример запроса**:
        ```bash
        curl -X DELETE "https://platform-api2.max.ru/messages/{messageId}/comments?comment_id={comment_id}" \
          -H "Authorization: {access_token}"
        ```
      parameters:
        - description: Идентификатор поста (`mid`), комментарий к которому надо удалить
          in: path
          name: messageId
          required: true
          schema:
            type: string
            pattern: (mid.)?[a-zA-Z0-9_\-]+
        - name: comment_id
          description: Идентификатор удаляемого комментария
          required: true
          in: query
          schema:
            type: string
            minLength: 1
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "500":
          $ref: "#/components/responses/InternalError"
  /messages/{messageId}/comments/{commentId}:
    get:
      tags:
        - comments
      operationId: getCommentById
      summary: Получение комментария по его ID
      description: |-
        Возвращает информацию о комментарии к посту в канале по его идентификатору (`mid`)

        Для этого бот, чей токен `access_token` используется для авторизации, должен быть администратором этого канала с правом `read_all_messages`

         Чтобы получить информацию о правах бота, используйте [`GET /chats/-chatId-/members/admins`](/docs-api/methods/GET/chats/-chatId-/members/admins). Подробнее о правах — в описании [`POST /chats/{chatId}/members/admins`](/docs-api/methods/POST/chats/-chatId-/members/admins#Доступные%20права%20администратора) 

        **Пример запроса**:
        ```bash
        curl -X GET "https://platform-api2.max.ru/messages/{messageId}/comments/{commentId}" \
          -H "Authorization: {access_token}"
        ```
      parameters:
        - description: Идентификатор поста (`mid`), к которому относится комментарий
          in: path
          name: messageId
          required: true
          schema:
            type: string
            pattern: (mid.)?[a-zA-Z0-9_\-]+
        - description: Идентификатор комментария (`mid`)
          in: path
          name: commentId
          required: true
          schema:
            type: string
            pattern: (mid.)?[a-zA-Z0-9_\-]+
      responses:
        "200":
          description: Информация о комментарии, идентификатор которого был передан в
            запросе
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CommentMessage"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "404":
          description: Комментарий или пост не найдены, либо у бота нет к ним доступа.
            Проверьте, что бот назначен администратором канала с правом
            `read_all_messages`
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "500":
          $ref: "#/components/responses/InternalError"
  /videos/{videoToken}:
    get:
      tags:
        - messages
      operationId: getVideoAttachmentDetails
      description: |-
        Возвращает подробную информацию о видео, прикреплённом к сообщению в чате или канале, URL-адреса воспроизведения и дополнительные метаданные

        #### Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/videos/{video_token}" \
          -H "Authorization: {access_token}"
      summary: Получение информации о видео, прикреплённом к сообщению
      parameters:
        - description: Токен видео-вложения
          in: path
          name: videoToken
          required: true
          schema:
            type: string
            pattern: "[a-zA-Z0-9_\\-]+"
      responses:
        "200":
          description: Подробная информация о прикреплённом видео
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoAttachmentDetails"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: В случае, если сообщение не найдено или бот не имеет доступа к нему
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "500":
          $ref: "#/components/responses/InternalError"
  /answers:
    post:
      tags:
        - messages
      operationId: answerOnCallback
      description: |-
        Отправляет ответ после того, как пользователь нажал на кнопку. Ответом может быть обновленное сообщение и/или одноразовое уведомление для пользователя

        #### Ограничения

        Можно отправлять не более двух ответов в секунду в один диалог, групповой чат или канал. При превышении этого лимита сообщения следует ставить в очередь или делать задержку перед отправкой

        #### Пример запроса:
        ```bash
        curl -X POST "https://platform-api2.max.ru/answers?callback_id=callback_id" \
          -H "Authorization: {access_token}" \
          -H "Content-Type: application/json" \
          -d '{
            "message": {
              "text": "Это сообщение с кнопкой-ссылкой",
              "attachments": [
                {
                  "type": "inline_keyboard",
                  "payload": {
                    "buttons": [
                      [
                        {
                          "type": "link",
                          "text": "Откройте сайт",
                          "url": "https://example.com"
                        }
                      ]
                    ]
                  }
                }
              ]
            }
          }'
        ```
      summary: Отправка ответа на callback
      parameters:
        - name: callback_id
          description: |-
            Идентификатор кнопки, на которую нажал пользователь

             Идентификатор можно получить в обновлениях о событиях через [Webhook](/docs-api/methods/POST/subscriptions) или [Long Polling](/docs-api/methods/GET/updates)

             Получение обновлений с помощью [Long Polling](/docs-api/methods/GET/updates) ограничено по скорости и сроку хранения событий — этот способ не подходит для production-окружения. Рекомендуем на всех этапах работы использовать [Webhook](/docs-api/methods/POST/subscriptions)

             Когда пользователь нажмёт на кнопку, MAX отправит событие, содержащее объект [Update](/docs-api/objects/Update) с типом `message_callback` и идентификатором кнопки в поле `updates[i].callback.callback_id`
          required: true
          in: query
          schema:
            type: string
            minLength: 1
            pattern: ^(?!\s*$).+
        - name: disable_link_preview
          description: " Если `true`, сервер не будет генерировать превью для ссылок в
            тексте сообщения или поста"
          in: query
          required: false
          schema:
            type: boolean
            default: false
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CallbackAnswer"
      responses:
        "200":
          $ref: "#/components/responses/SuccessResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "405":
          $ref: "#/components/responses/NotAllowed"
        "500":
          $ref: "#/components/responses/InternalError"
  /updates:
    get:
      operationId: getUpdates
      tags:
        - subscriptions
      description: |2-
         > ! Получение обновлений с помощью [Long Polling](/docs-api/methods/GET/updates) ограничено по скорости и сроку хранения событий — этот способ не подходит для production-окружения. Рекомендуем на всех этапах работы использовать [Webhook](/docs-api/methods/POST/subscriptions)

        Метод `GET /updates` можно использовать для получения обновлений при разработке и тестировании, если ваш бот не подписан на Webhook. **Для production-окружения используйте только Webhook**

          Каждое обновление со списком событий имеет свой порядковый номер. Свойство `marker` в ответе указывает на следующее ожидаемое обновление. После того, как вы передали `marker` с указателем на конкретное обновление, все предыдущие считаются прочитанными 

         Если параметр `marker` **не передан** или передано значение `null`, вы получите только последнее обновление 

        #### Пример запроса:
        ```bash
        curl -X GET "https://platform-api2.max.ru/updates" \
          -H "Authorization: {access_token}"
        ```
      summary: Получение обновлений о событиях через Long Polling
      parameters:
        - name: limit
          description: Максимальное количество обновлений о событиях, которое может
            вернуться в ответе на запрос
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
        - name: timeout
          description: Тайм-аут в секундах для долгого опроса
          in: query
          schema:
            type: integer
            minimum: 0
            maximum: 90
            default: 30
        - name: marker
          description: Чтобы получить последнее обновление событий, передайте `null` или
            оставьте поле пустым. Чтобы получить все обновления по событиям с
            момента предыдущего запроса, передайте значение `marker`, которое
            получили в ответ на предыдущий запрос
          in: query
          schema:
            type: integer
            format: int64
            nullable: true
        - name: types
          description: Список типов событий, которые вы хотите получать. Полный список
            возможных событий смотрите в описании [объекта
            `Update`](/docs-api/objects/Update)
          in: query
          example: types=message_created,message_callback
          schema:
            type: array
            uniqueItems: true
            items:
              type: string
            nullable: true
          style: simple
      responses:
        "200":
          description: Список обновлений событий с указателем на следующую страницу данных
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UpdateList"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "405":
          $ref: "#/components/responses/NotAllowed"
        "500":
          $ref: "#/components/responses/InternalError"
components:
  securitySchemes:
    access_token:
      type: apiKey
      name: access_token
      description: |-
        A token is given to you by [MasterBot](https://tt.me/MasterBot) after you have created a bot.
        In all subsequent requests to the Bot API, you **must** pass the received token as an `access_token` parameter to the HTTP request.


        If [Terms and Conditions of Max usage](https://team.max.ru/en/terms/) have been violated, the Max administration may withdraw tokens by aborting user sessions.
        If your token has been compromised, you can request a new one by sending a `/revoke` command to **[MasterBot](https://tt.me/MasterBot)**.
      in: query
  responses:
    SuccessResponse:
      description: Успешный или неуспешный результат
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SimpleQueryResult"
    InternalError:
      description: Внутренняя ошибка сервера
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    Unauthorized:
      description: Ошибка авторизации. Токен `access_token` указан некорректно или
        недействителен
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    Forbidden:
      description: Ошибка доступа. У вас нет прав на доступ к этому ресурсу
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    NotFound:
      description: Запрашиваемый ресурс не найден
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    NotAllowed:
      description: Метод не разрешен
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
  schemas:
    bigint:
      type: integer
      format: int64
    UserId:
      description: Идентификатор пользователя или бота
      type: integer
      format: int64
    ChatId:
      description: ID чата или канала — в зависимости от ограничений метода и от того,
        с чем вы работаете. Как получить ID — [на странице «Получение ID чата
        или канала»](/docs-api/use-cases/getting-chat-id)
      type: integer
      format: int64
    MessageId:
      description: Идентификатор сообщения
      type: string
      minLength: 1
    Url:
      description: URL string
      type: string
    SubscriptionUrl:
      description: URL HTTPS-endpoint вашего бота. Должен начинаться с `https://`
      type: string
    User:
      description: |-
        Объект, описывающий один из вариантов наследования:

        - [`User`](/docs-api/objects/User) — объект содержит общую информацию о пользователе или боте без аватара
        - [`UserWithPhoto`](/docs-api/objects/UserWithPhoto) — объект с общей информацией о пользователе или боте, дополнительно содержит URL аватара и описание
        - [`BotInfo`](/docs-api/objects/BotInfo) — объект включает общую информацию о боте, URL аватара и описание. Дополнительно содержит список команд, поддерживаемых ботом. Возвращается только при вызове метода [`GET /me`](/docs-api/methods/GET/me)
        - [`ChatMember`](/docs-api/objects/ChatMember) — объект включает общую информацию о пользователе или боте, URL аватара и описание при его наличии. Дополнительно содержит данные для пользователей-участников чата. Возвращается только при вызове некоторых методов группы `/chats`, например [`GET /chats/{chatId}/members`](/docs-api/methods/GET/chats/-chatId-/members)
      properties:
        user_id:
          description: Идентификатор пользователя или бота
          type: integer
          format: int64
        first_name:
          description: Отображаемое имя пользователя или бота
          type: string
        last_name:
          description: Отображаемая фамилия пользователя. Для ботов это поле не возвращается
          type: string
          nullable: true
        username:
          description: Никнейм бота или уникальное публичное имя пользователя. В случае с
            пользователем может быть `null`, если тот недоступен или имя не
            задано
          type: string
          nullable: true
        is_bot:
          description: "`true`, если это бот"
          type: boolean
        last_activity_time:
          description: Время последней активности пользователя или бота в MAX
            (Unix timestamp в миллисекундах). Если пользователь отключил в
            настройках профиля мессенджера MAX возможность видеть, что он в сети
            онлайн, поле может не возвращаться
          type: integer
          format: int64
        name:
          description: _Устаревшее поле, скоро будет удалено_
          type: string
          readOnly: true
          nullable: true
      required:
        - user_id
        - first_name
        - username
        - is_bot
        - last_activity_time
        - name
    UserWithPhoto:
      description: Объект с общей информацией о пользователе или боте. Является
        наследником [схемы User](/docs-api/objects/User) — дополнительно к ней
        содержит URL аватара и описание
      allOf:
        - $ref: "#/components/schemas/User"
        - properties:
            description:
              description: Описание пользователя или бота. В случае с пользователем может
                принимать значение `null`, если описание не заполнено
              maxLength: 16000
              type: string
              nullable: true
              readOnly: false
            avatar_url:
              description: URL аватара пользователя или бота в уменьшенном размере
              type: string
              readOnly: false
            full_avatar_url:
              description: URL аватара пользователя или бота в полном размере
              type: string
              readOnly: false
    BotInfo:
      description: Объект включает общую информацию о боте, URL аватара и описание.
        Является наследником [схемы
        UserWithPhoto](/docs-api/objects/UserWithPhoto). Дополнительно к ней
        содержит список команд, поддерживаемых ботом. Возвращается только при
        вызове метода `GET /me`
      allOf:
        - $ref: "#/components/schemas/UserWithPhoto"
        - properties:
            commands:
              description: Команды, поддерживаемые ботом
              type: array
              items:
                $ref: "#/components/schemas/BotCommand"
              maxItems: 32
              readOnly: false
              nullable: true
    BotPatch:
      properties:
        first_name:
          description: Отображаемое имя пользователя или название бота
          type: string
          maxLength: 64
          minLength: 1
          readOnly: false
          nullable: true
        last_name:
          description: Отображаемое второе имя бота
          type: string
          maxLength: 64
          minLength: 1
          readOnly: false
          nullable: true
        name:
          description: _Поле устарело, скоро будет удалено. Используйте_ `first_name`
          type: string
          readOnly: false
          nullable: true
        description:
          description: Описание бота
          type: string
          minLength: 1
          maxLength: 16000
          readOnly: false
          nullable: true
        commands:
          description: Команды, поддерживаемые ботом. Чтобы удалить все команды, передайте
            пустой список
          type: array
          items:
            $ref: "#/components/schemas/BotCommand"
          maxItems: 32
          readOnly: false
          nullable: true
        photo:
          description: Запрос на установку фото бота
          allOf:
            - $ref: "#/components/schemas/PhotoAttachmentRequestPayload"
          readOnly: false
          nullable: true
    BotCommand:
      description: до 32 элементов<br/>Команды, поддерживаемые ботом
      properties:
        name:
          description: Название команды
          type: string
          maxLength: 64
          minLength: 1
        description:
          description: Описание команды
          type: string
          minLength: 1
          maxLength: 128
          readOnly: false
          nullable: true
      required:
        - name
    BotCommandsPatch:
      type: object
      description: Объект PATCH для обновления команд бота
      properties:
        commands:
          description: Список команд и их описаний, отображаемых пользователю в подсказках
            при вводе « `/` »
          type: array
          items:
            $ref: "#/components/schemas/BotCommand"
          maxItems: 32
          readOnly: false
    BotCommandsInfo:
      type: object
      description: Информация о командах бота
      properties:
        commands:
          description: Команды, которые поддерживает бот
          type: array
          items:
            $ref: "#/components/schemas/BotCommand"
          maxItems: 32
          readOnly: false
    Chat:
      description: "Объект содержит общую информацию о групповом чате или канале: его
        тип, настройки отображения (название, аватар, описание, ссылка),
        публичную доступность, а также информацию об участниках (владельце, боте
        и других пользователях), времени их последней активности и событиях"
      properties:
        chat_id:
          description: ID чата или канала — в зависимости от ограничений метода и от того,
            с чем вы работаете. Как получить ID — [на странице «Получение ID
            чата или канала»](/docs-api/use-cases/getting-chat-id)
          type: integer
          format: int64
        type:
          description: |-
            Тип чата:
             - `"chat"` — Групповой чат
             - `"channel"` — Канал
             - `"dialog"` — Диалог
          allOf:
            - $ref: "#/components/schemas/ChatType"
        status:
          description: |-
            Статус чата:
            - `"active"` — Бот является активным участником чата
            - `"removed"` — Бот был удалён из чата
            - `"left"` — Бот покинул чат
            - `"closed"` — Чат был закрыт
          allOf:
            - $ref: "#/components/schemas/ChatStatus"
        title:
          description: Отображаемое название чата или канала. Может быть `null` для диалогов
          type: string
          nullable: true
        icon:
          description: Аватар группового чата или канала
          nullable: true
          allOf:
            - $ref: "#/components/schemas/Image"
        last_event_time:
          description: Время последнего события в чате или канале в формате Unix timestamp
            в миллисекундах
          type: integer
          format: int64
        participants_count:
          description: Количество участников чата или канала. Для диалогов всегда `2`
          type: integer
          format: int32
        owner_id:
          description: ID владельца чата или канала
          nullable: true
          type: integer
          format: int64
          readOnly: false
        participants:
          description: Список участников в формате ключ-значение, где ключ — идентификатор
            участника `user_id`, а значение — время его последней активности в
            чате или канале `last_event_time`. Может быть `null`, если
            запрашивается список чатов
          nullable: true
          readOnly: false
          type: object
          additionalProperties:
            type: integer
            format: int64
        is_public:
          description: Параметр показывает, доступен ли групповой чат или канал публично.
            Для диалогов и приватных каналов — всегда `false`
          type: boolean
        link:
          description: Ссылка на чат
          type: string
          readOnly: false
          nullable: true
        description:
          description: Описание чата или канала
          type: string
          nullable: true
        dialog_with_user:
          description: Данные о пользователе в диалоге (только для чатов типа `"dialog"`)
          allOf:
            - $ref: "#/components/schemas/UserWithPhoto"
          nullable: true
          readOnly: false
        messages_count:
          description: Количество сообщений в групповом чате или постов канале
          nullable: true
          readOnly: false
          type: integer
        pinned_message:
          description: Закреплённое сообщение в чате (возвращается только при запросе
            конкретного чата или канала)
          nullable: true
          readOnly: false
          allOf:
            - $ref: "#/components/schemas/Message"
      required:
        - chat_id
        - type
        - status
        - title
        - last_event_time
        - participants_count
        - icon
        - is_public
        - description
    ChatType:
      enum:
        - chat
        - channel
        - dialog
    ChatStatus:
      description: Статус чата для текущего бота
      enum:
        - active
        - removed
        - left
        - closed
    ChatList:
      properties:
        chats:
          description: Список запрашиваемых чатов
          type: array
          items:
            $ref: "#/components/schemas/Chat"
        marker:
          description: Указатель на следующую страницу запрашиваемых чатов
          nullable: true
          type: integer
          format: int64
      required:
        - chats
        - marker
    ChatPatch:
      properties:
        icon:
          description: Данные для прикрепления изображения в качестве аватара чата или
            канала
          readOnly: false
          nullable: true
          allOf:
            - $ref: "#/components/schemas/PhotoAttachmentRequestPayload"
        title:
          type: string
          minLength: 1
          maxLength: 200
          readOnly: false
          nullable: true
        description:
          description: Новое описание чата или канала. Чтобы удалить описание, передайте
            пустую строку
          type: string
          minLength: 0
          maxLength: 16000
          readOnly: false
          nullable: true
        pin:
          description: ID сообщения для закрепления в чате или канале. Чтобы удалить
            закреплённое сообщение, используйте метод [`DELETE
            /chats/{chatId}/pin`](/docs-api/methods/DELETE/chats/-chatId-/pin)
          type: string
          readOnly: false
          nullable: true
        notify:
          description: Если `true`, участники получат системное уведомление об изменении
          type: boolean
          default: true
          readOnly: false
          nullable: true
    ChatMember:
      description: Объект включает общую информацию о пользователе или боте, URL
        аватара и описание (при наличии). Является наследником [схемы
        UserWithPhoto](/docs-api/objects/UserWithPhoto). Дополнительно к ней
        содержит данные для пользователей-участников чата или канала.
        Возвращается только при вызове некоторых методов группы `/chats`,
        например
        [`GET /chats/{chatId}/members`](/docs-api/methods/GET/chats/-chatId-/members)
      allOf:
        - $ref: "#/components/schemas/UserWithPhoto"
        - properties:
            last_access_time:
              description: Время последней активности пользователя в чате. Может быть
                устаревшим для суперчатов (равно времени вступления)
              type: integer
              format: int64
            is_owner:
              type: boolean
              description: Является ли пользователь владельцем группового чата или канала
            is_admin:
              type: boolean
              description: Является ли пользователь администратором группового чата или канала
            join_time:
              type: integer
              format: int64
              description: Дата присоединения к чату в формате Unix timestamp в миллисекундах
            permissions:
              description: |-
                Перечень прав доступа пользователя или бота, если тот является администратором группового чата или канала. Для обычных участников чата или канала поле не возвращается

                 Ниже приведено краткое описание всех прав — подробнее читайте [в разделе «Доступные права администратора»](/docs-api/methods/POST/chats/-chatId-/members/admins) 

                 **Краткое описание доступных прав администратора**: 
                - `read_all_messages` — читать все сообщения в канале или групповом чате 
                - `edit` — редактировать посты и комментарии в каналах (для групповых чатов недоступно). Ранее вместо `edit` в API использовалось `edit_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторам используется `edit` 
                - `delete` — удалять посты и комментарии в каналах (для групповых чатов недоступно). Ранее вместо `delete` в API использовалось `delete_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторам используется `delete` 
                - `write` — редактировать и удалять сообщения в групповых чатах, а также писать посты и комментарии в каналах. Ранее вместо `write` в API использовалось `post_edit_delete_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторам используется `write` 
                - `pin_message` — закреплять сообщение 
                - `change_chat_info` — изменять информацию о канале или групповом чате
                - `add_remove_members` — добавлять и удалять участников группового чата (доступно пользователям и ботам) или подписчиков канала (доступно только пользователям) 
                - `add_admins` — добавлять и удалять администраторов группового чата или канала
                - `edit_link` — изменять ссылку на групповой чат (для каналов недоступно)
                - `can_call` — звонить в групповом чате (для каналов недоступно) 
                - `view_stats` — право на просмотр статистики каналов (для групповых чатов недоступно). Назначается по умолчанию владельцам каналов. Для других пользователей-администраторов канала и ботов недоступно
              type: array
              uniqueItems: true
              nullable: true
              items:
                allOf:
                  - $ref: "#/components/schemas/ChatAdminPermission"
            alias:
              description: |-
                Описание роли, которое будет отображаться на клиентском устройстве в настройках чата или канала рядом с именем пользователя 

                Если пользователь администратор или владелец и ему не установлено это название, то поле не передаётся, клиентское устройство на своей стороне подменит значение на соответствующее: "владелец" или "админ"
              type: string
          required:
            - last_access_time
            - permissions
            - is_owner
            - is_admin
            - join_time
    ChatAdmin:
      properties:
        user_id:
          description: |-
            Идентификатор пользователя-участника группового чата или канала, который назначается администратором

            Максимум — 50 администраторов в чате
          type: integer
          format: int64
        permissions:
          description: |-
            Перечень прав доступа пользователя или бота, который назначен администратором группового чата или канала. Ниже приведено краткое описание всех прав — подробнее читайте [в разделе «Доступные права администратора»](/docs-api/methods/POST/chats/-chatId-/members/admins) 

             **Краткое описание доступных прав администратора**: 
            - `read_all_messages` — читать все сообщения в канале или групповом чате 
            - `edit` — редактировать посты и комментарии в каналах (для групповых чатов недоступно). Ранее вместо `edit` в API использовалось `edit_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторам используется `edit` 
            - `delete` — удалять посты и комментарии в каналах (для групповых чатов недоступно). Ранее вместо `delete` в API использовалось `delete_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторам используется `delete` 
            - `write` — редактировать и удалять сообщения в групповых чатах, а также писать посты и комментарии в каналах. Ранее вместо `write` в API использовалось `post_edit_delete_message` — в ответе могут возвращаться оба значения, однако при назначении новых прав администраторам используется `write` 
            - `pin_message` — закреплять сообщение 
            - `change_chat_info` — изменять информацию о канале или групповом чате
            - `add_remove_members` — добавлять и удалять участников группового чата (доступно пользователям и ботам) или подписчиков канала (доступно только пользователям) 
            - `add_admins` — добавлять и удалять администраторов группового чата или канала
            - `edit_link` — изменять ссылку на групповой чат (для каналов недоступно)
            - `can_call` — звонить в групповом чате (для каналов недоступно) 
            - `view_stats` — право на просмотр статистики каналов (для групповых чатов недоступно). Назначается по умолчанию владельцам каналов. Для других пользователей-администраторов канала и ботов недоступно
          summary: Назначить администратора группового чата или канала
          type: array
          uniqueItems: true
          items:
            allOf:
              - $ref: "#/components/schemas/ChatAdminPermission"
        alias:
          description: |-
            Описание роли, которое будет отображаться на клиентском устройстве в настройках чата или канала рядом с именем пользователя 

            Если пользователь администратор или владелец и ему не установлено это название, то поле не передаётся, клиентское устройство на своей стороне подменит значение на соответствующее: "владелец" или "админ"
          type: string
      required:
        - user_id
        - permissions
    ChatAdminPermission:
      description: Права администратора группового чата или канала
      type: string
      enum:
        - read_all_messages
        - add_remove_members
        - add_admins
        - change_chat_info
        - pin_message
        - write
        - can_call
        - edit_link
        - post_edit_delete_message
        - edit_message
        - delete_message
        - edit
        - delete
    ChatMembersList:
      properties:
        members:
          description: Список участников группового чата или канала с общей информацией о
            них, а также временем последней активности и списком прав доступа
            для пользователей и ботов, которые являются администраторами
          type: array
          items:
            $ref: "#/components/schemas/ChatMember"
        marker:
          description: Указатель на следующую страницу данных
          type: integer
          format: int64
          nullable: true
          readOnly: false
      required:
        - members
    ChatAdminsList:
      properties:
        admins:
          description: Список пользователей и ботов, которые получат права администратора
            группового чата или канала
          type: array
          items:
            $ref: "#/components/schemas/ChatAdmin"
        marker:
          description: Указатель на следующую страницу данных
          type: integer
          format: int64
          nullable: true
          readOnly: false
      required:
        - admins
    Image:
      description: Общая схема, описывающая объект изображения
      properties:
        url:
          description: URL изображения
          type: string
      required:
        - url
    Subscription:
      description: Схема для описания подписки на WebHook
      properties:
        url:
          description: URL вебхука
          type: string
        time:
          description: Unix timestamp в миллисекундах, когда была создана подписка
          type: integer
          format: int64
        update_types:
          description: Типы событий, на которые подписан бот
          example: '["message_created", "bot_started"]'
          type: array
          nullable: true
          uniqueItems: true
          items:
            type: string
            minLength: 1
      required:
        - url
        - time
        - update_types
    Recipient:
      description: Новый получатель сообщения. Может быть пользователем, чатом или каналом
      properties:
        chat_id:
          description: ID чата или канала — в зависимости от ограничений метода и от того,
            с чем вы работаете. Как получить ID — [на странице «Получение ID
            чата или канала»](/docs-api/use-cases/getting-chat-id)
          type: integer
          format: int64
          nullable: true
        chat_type:
          description: |-
            Тип чата:
             - `chat` — групповой чат
             - `channel` — канал или комментарий к посту (для вызовов методов группы `/comments`)
             - `dialog` — диалог
          allOf:
            - $ref: "#/components/schemas/ChatType"
        user_id:
          description: ID получателя сообщения в диалоге (пользователя или бота). Если
            сообщение отправлено в групповой чат или канал, то параметр
            отсутствует
          type: integer
          format: int64
          nullable: true
        post_id:
          description: Идентификатор поста в канале, к которому оставлен комментарий
          type: string
          nullable: true
      required:
        - chat_id
        - chat_type
        - user_id
        - post_id
    Message:
      description: |-
        Содержит общую информацию о сообщении в чате или посте в канале: данные об отправителе и получателе, время создания сообщения, содержимое (текст и вложения), контекст связи с другими сообщениями (ответ или пересылка), а также публичную ссылку и статистику для постов в каналах

        Возвращается в ответ на вызовы методов группы [`/messages`](/docs-api/methods/GET/messages) и [`/chats/{chatId}/pin`](/docs-api/methods/PUT/chats/-chatId-/pin)
      properties:
        sender:
          description: |-
            Отправитель сообщения: пользователь или бот

            **Обратите внимание**:<br/>- Все параметры в объекте относятся к отправителю сообщения<br/>- Объект отсутствует, если сообщение отправлено в канал
          allOf:
            - $ref: "#/components/schemas/User"
          readOnly: false
        recipient:
          description: |-
            Получатель сообщения: пользователь или бот (для диалога), канал или чат

             **Обратите внимание**: все параметры в объекте относятся к получателю сообщения
          allOf:
            - $ref: "#/components/schemas/Recipient"
        timestamp:
          description: Время создания сообщения в формате Unix timestamp в миллисекундах
          type: integer
          format: int64
        link:
          description: Пересланное или ответное сообщение
          nullable: true
          readOnly: false
          allOf:
            - $ref: "#/components/schemas/LinkedMessage"
        body:
          description: Содержимое сообщения. Текст + вложения. Может быть `null`, если
            сообщение содержит только пересланное сообщение
          allOf:
            - $ref: "#/components/schemas/MessageBody"
        stat:
          description: Статистика просмотров постов и репостов — возвращается только для
            каналов
          allOf:
            - $ref: "#/components/schemas/MessageStat"
          nullable: true
          readOnly: false
        url:
          description: Публичная ссылка на пост в канале. Отсутствует для диалогов и
            групповых чатов
          type: string
          nullable: true
          readOnly: false
      required:
        - recipient
        - body
        - timestamp
    CommentMessage:
      type: object
      description: Комментарий в чате. Возвращается в ответ на запросы группы
        [`/comments`](/docs-api/methods/GET/messages/-messageId-/comments). В
        отличие от обычного сообщения в чате или канале не содержит вложений
        `attachments` и не поддерживает пересылку комментариев (поле `link.type
        = forward`)
      properties:
        sender:
          description: Пользователь, отправивший комментарий. Может быть `null`, если
            сообщение было опубликовано от имени канала
          allOf:
            - $ref: "#/components/schemas/User"
          readOnly: false
        recipient:
          description: "Получатель сообщения: для комментариев — канал"
          allOf:
            - $ref: "#/components/schemas/Recipient"
        timestamp:
          description: Время создания сообщения в формате Unix timestamp в миллисекундах
          type: integer
          format: int64
        link:
          description: Комментарий, на который получен ответ
          nullable: true
          readOnly: false
          allOf:
            - $ref: "#/components/schemas/CommentLinkedMessage"
        body:
          description: Информация о комментарии
          allOf:
            - $ref: "#/components/schemas/CommentMessageBody"
      required:
        - recipient
        - body
        - timestamp
    MessageStat:
      description: Статистика сообщения. Возвращается только для постов в каналах
      properties:
        views:
          description: Количество пользователей, которые увидели пост или репост в канале.
            Просмотр засчитывается, когда пост или репост попадает в область
            видимости экрана<br/>Если это репост, то будет показано количество
            именно его просмотров
          type: integer
      required:
        - views
    MessageBody:
      description: Информация о сообщении
      type: object
      properties:
        mid:
          description: Уникальный ID сообщения
          type: string
        seq:
          description: ID расположения сообщения в чате по порядку
          type: integer
          format: int64
        text:
          description: Текст сообщения
          type: string
          nullable: true
        attachments:
          description: Вложения сообщения. Могут быть одним из типов `attachment`,
            описанных в схеме ниже<br/>Если поле пустое или равно `null`,
            изменений не произойдет. Если массив пуст, все вложения будут
            удалены
          type: array
          nullable: true
          required: false
          items:
            $ref: "#/components/schemas/Attachment"
        markup:
          description: Разметка текста сообщения. Подробнее — в разделе
            [Форматирование](/docs-api/use-cases/sending-messages/text-formatting)
          type: array
          nullable: true
          readOnly: false
          items:
            $ref: "#/components/schemas/MarkupElement"
      required:
        - mid
        - seq
        - text
        - attachments
        - link
    CommentMessageBody:
      description: Информация о комментарии
      type: object
      properties:
        mid:
          description: Уникальный ID комментария
          allOf:
            - $ref: "#/components/schemas/MessageId"
        seq:
          description: Порядковый номер расположения комментария в посте
          type: integer
          format: int64
        text:
          description: Текст комментария
          type: string
          nullable: true
        markup:
          description: |-
            Разметка текста комментария. Подробнее — в разделе [Форматирование](/docs-api/use-cases/sending-messages/text-formatting)

            **Обратите внимание**: в тексте комментариев не поддерживаются гиперссылки и упоминание пользователя
          type: array
          nullable: true
          readOnly: false
          items:
            $ref: "#/components/schemas/MarkupElement"
      required:
        - mid
        - seq
        - text
    MessageList:
      description: Массив сообщений. Может быть как с пагинацией, так и без — если
        запрошены конкретные сообщения по их идентификаторам
      properties:
        messages:
          description: Массив сообщений
          type: array
          items:
            $ref: "#/components/schemas/Message"
      required:
        - messages
    TextFormat:
      description: Формат текста сообщения
      type: string
      enum:
        - markdown
        - html
    CommentMessageList:
      type: object
      description: Постраничный список комментариев к посту в канале
      properties:
        messages:
          description: Список комментариев к посту в канале
          type: array
          items:
            $ref: "#/components/schemas/CommentMessage"
      required:
        - messages
    NewMessageBody:
      description: |-
        Объект используется при отправке нового сообщения в чат или канал[`POST /messages`](/docs-api/methods/POST/messages), редактировании существующего сообщения или поста [`PUT /messages`](/docs-api/methods/PUT/messages), а также callback-отправке сообщения пользователю при нажатии им кнопки в чате или канале [`POST /answers`](/docs-api/methods/POST/answers) 

        Параметры объекта содержат: текст и способ его форматирования, вложения, ссылку на связанное сообщение (ответ или пересылка), настройку PUSH-уведомлений для участников чата
      properties:
        text:
          type: string
          maxLength: 4000
          nullable: true
        attachments:
          description: Вложения сообщения. Если поле пустое или равно `null`, изменений не
            произойдет. Если массив пуст, все вложения будут удалены
          type: array
          nullable: true
          items:
            $ref: "#/components/schemas/AttachmentRequest"
        link:
          description: Ссылка на сообщение в чате или пост в канале. Ссылки на комментарии
            к постам в каналах не поддержаны
          type: object
          nullable: true
          allOf:
            - $ref: "#/components/schemas/NewMessageLink"
        notify:
          description: Если `false`, участники чата не получат push-уведомления. Для
            каналов необходимо отправлять запрос с `notify = true` или без этого
            поля, т.к. каналы не подразумевают отправку постов без
            push-уведомлений
          type: boolean
          default: true
          readOnly: false
        format:
          description: Разметка текста сообщения. Подробнее — в разделе
            [Форматирование](/docs-api/use-cases/sending-messages/text-formatting)
          readOnly: false
          nullable: true
          allOf:
            - $ref: "#/components/schemas/TextFormat"
      required:
        - text
        - attachments
        - link
    NewCommentBody:
      type: object
      description: Объект используется при отправке нового комментария к посту в
        канале [`POST
        messages/-messageId-/comments`](/docs-api/methods/POST/messages/-messageId-/comments)
        или редактировании старого [`PUT
        messages/-messageId-/comments`](/docs-api/methods/PUT/messages/-messageId-/comments).
        В отличие от обычных сообщений в чатах и постов в каналах (объект
        [`NewMessageBody`](/docs-api/objects/NewMessageBody)), в комментариях не
        поддерживаются вложения `attachments` и пересылка сообщения (тип
        `forward`)
      properties:
        text:
          description: Текст комментария
          type: string
          maxLength: 4000
          nullable: true
        link:
          description: Ссылка на комментарий
          type: object
          nullable: true
          allOf:
            - $ref: "#/components/schemas/NewMessageLink"
        format:
          description: Разметка текста комментария. Для комментариев не поддерживается
            упоминание других пользователей и гиперссылки. Подробнее — в разделе
            [Форматирование](/docs-api/use-cases/sending-messages/text-formatting)
          readOnly: false
          nullable: true
          allOf:
            - $ref: "#/components/schemas/TextFormat"
      required:
        - text
        - link
    NewMessageLink:
      properties:
        type:
          description: |
            Тип связанного сообщения:
              - `"reply"` — ответ на сообщение или комментарий в чате или канале
            - `"forward"` — пересланное сообщение в чате или канале

             **Для комментариев поддерживается только тип `reply`**
          nullable: false
          allOf:
            - $ref: "#/components/schemas/MessageLinkType"
        mid:
          description: ID исходного сообщения
          type: string
          nullable: false
      required:
        - type
        - mid
    LinkedMessage:
      properties:
        type:
          description: |+
            Тип связанного сообщения:
              - `"reply"` — ответ на сообщение в чате 
            - `"forward"` — пересланное сообщение в чате 

          allOf:
            - $ref: "#/components/schemas/MessageLinkType"
        sender:
          description: Пользователь или бот, отправивший сообщение
          allOf:
            - $ref: "#/components/schemas/User"
          readOnly: false
        chat_id:
          description: Чат или канал, в котором сообщение было изначально опубликовано.
            Только для пересланных сообщений с `type = forward`. Как получить
            ID — [на странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          type: integer
          format: int64
          readOnly: false
        message:
          allOf:
            - $ref: "#/components/schemas/MessageBody"
      required:
        - type
        - message
    CommentLinkedMessage:
      properties:
        type:
          description: |-
            Тип связанного сообщения:
              - `"reply"` — ответ на сообщение или комментарий в чате или канале
            - `"forward"` — пересланное сообщение в чате или канале

             **Для комментариев поддерживается только тип `reply`**
          allOf:
            - $ref: "#/components/schemas/MessageLinkType"
        sender:
          description: Пользователь или бот, отправивший комментарий
          allOf:
            - $ref: "#/components/schemas/User"
          readOnly: false
        chat_id:
          description: Чат или канал, в котором сообщение было изначально опубликовано.
            Только для пересланных сообщений с `type = forward`. Как получить
            ID — [на странице «Получение ID чата или
            канала»](/docs-api/use-cases/getting-chat-id)
          type: integer
          format: int64
          readOnly: false
        message:
          allOf:
            - $ref: "#/components/schemas/CommentMessageBody"
      required:
        - type
        - message
    SendMessageResult:
      properties:
        message:
          $ref: "#/components/schemas/Message"
      required:
        - message
    SendCommentResult:
      type: object
      description: Результат отправки комментария
      properties:
        message:
          $ref: "#/components/schemas/CommentMessage"
      required:
        - message
    Attachment:
      description: Общая схема, представляющая вложение сообщения
      discriminator:
        propertyName: type
        mapping:
          image: "#/components/schemas/PhotoAttachment"
          video: "#/components/schemas/VideoAttachment"
          audio: "#/components/schemas/AudioAttachment"
          file: "#/components/schemas/FileAttachment"
          sticker: "#/components/schemas/StickerAttachment"
          contact: "#/components/schemas/ContactAttachment"
          inline_keyboard: "#/components/schemas/InlineKeyboardAttachment"
          share: "#/components/schemas/ShareAttachment"
          location: "#/components/schemas/LocationAttachment"
      properties:
        type:
          type: string
      required:
        - type
    PhotoAttachment:
      description: Вложение изображения
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            payload:
              type: object
              allOf:
                - $ref: "#/components/schemas/PhotoAttachmentPayload"
          required:
            - payload
    PhotoAttachmentPayload:
      description: Данные, использованные для отправки изображения
      properties:
        photo_id:
          description: Уникальный ID этого изображения
          type: integer
          format: int64
        token:
          description: "Токен вложения — уникальный ID загруженного медиа: изображения,
            аудио, видео или файла. Возвращается в ответ на вызов [POST
            /uploads](/docs-api/methods/POST/uploads)"
          type: string
        url:
          description: URL изображения. Время жизни ссылки ограниченно. Срок истечения
            указан в параметре `expires` — если он истёк, ссылку необходимо
            запросить повторно. Доступно в веб-клиентe и на Android
          type: string
      required:
        - photo_id
        - url
        - token
    VideoAttachment:
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            payload:
              type: object
              allOf:
                - $ref: "#/components/schemas/MediaAttachmentPayload"
            thumbnail:
              description: Миниатюра видео
              type: string
              nullable: true
              readOnly: false
              allOf:
                - $ref: "#/components/schemas/VideoThumbnail"
            width:
              description: Ширина видео
              type: integer
              nullable: true
              readOnly: false
            height:
              description: Высота видео
              type: integer
              nullable: true
              readOnly: false
            duration:
              description: Длина видео в секундах
              type: integer
              nullable: true
              readOnly: false
          required:
            - payload
    VideoThumbnail:
      properties:
        url:
          description: URL изображения
          type: string
      required:
        - url
    VideoUrls:
      properties:
        mp4_1080:
          description: URL видео в разрешении 1080p, если доступно
          type: string
          nullable: true
          readOnly: false
        mp4_720:
          description: URL видео в разрешении 720p, если доступно
          type: string
          nullable: true
          readOnly: false
        mp4_480:
          description: URL видео в разрешении 480p, если доступно
          type: string
          nullable: true
          readOnly: false
        mp4_360:
          description: URL видео в разрешении 360p, если доступно
          type: string
          nullable: true
          readOnly: false
        mp4_240:
          description: URL видео в разрешении 240p, если доступно
          type: string
          nullable: true
          readOnly: false
        mp4_144:
          description: URL видео в разрешении 144p, если доступно
          type: string
          nullable: true
          readOnly: false
        hls:
          description: URL трансляции, если доступна
          type: string
          nullable: true
          readOnly: false
    VideoAttachmentDetails:
      properties:
        token:
          description: Токен видео-вложения
          type: string
        urls:
          description: URL-ы для скачивания или воспроизведения видео. Может быть null,
            если видео недоступно
          nullable: true
          readOnly: false
          allOf:
            - $ref: "#/components/schemas/VideoUrls"
        thumbnail:
          description: Миниатюра видео
          nullable: true
          readOnly: false
          allOf:
            - $ref: "#/components/schemas/PhotoAttachmentPayload"
        width:
          description: Ширина видео
          type: integer
        height:
          description: Высота видео
          type: integer
        duration:
          description: Длина видео в секундах
          type: integer
      required:
        - width
        - height
        - duration
        - token
    AudioAttachment:
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            payload:
              type: object
              allOf:
                - $ref: "#/components/schemas/MediaAttachmentPayload"
            transcription:
              description: Аудио транскрипция
              type: string
              nullable: true
              readOnly: false
          required:
            - payload
    FileAttachment:
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            payload:
              type: object
              allOf:
                - $ref: "#/components/schemas/FileAttachmentPayload"
            filename:
              description: Имя загруженного файла
              type: string
            size:
              description: Размер файла в байтах
              type: integer
              format: int64
          required:
            - payload
            - filename
            - size
    AttachmentPayload:
      properties:
        url:
          description: |-
            URL вложения, который возвращается в объекте [Update](/docs-api/objects/Update) после отправки сообщения в чат или канал

             В случае с вложенным видео прямую ссылку также можно получить с помощью метода [`GET /videos/{-videoToken-}`](/docs-api/methods/GET/videos/-videoToken-)
          type: string
      required:
        - url
    MediaAttachmentPayload:
      description: Результат загрузки аудио/видео
      allOf:
        - $ref: "#/components/schemas/AttachmentPayload"
        - properties:
            token:
              description: Используйте `token`, если вы пытаетесь повторно использовать одно и
                то же вложение в другом сообщении
              type: string
          required:
            - token
    FileAttachmentPayload:
      description: Результат загрузки файла
      allOf:
        - $ref: "#/components/schemas/AttachmentPayload"
        - properties:
            token:
              description: Используйте `token`, если вы пытаетесь повторно использовать одно и
                то же вложение в другом сообщении.
              type: string
          required:
            - token
    ContactAttachment:
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            payload:
              description: Результат загрузки данных контакта в сообщение
              type: object
              allOf:
                - $ref: "#/components/schemas/ContactAttachmentPayload"
          required:
            - payload
    ContactAttachmentPayload:
      properties:
        vcf_info:
          description: Информация о пользователе в формате VCF
          nullable: true
          readOnly: false
          type: string
        hash:
          description: Хеш информации о пользователе в формате VCF. Используется для
            проверки того, что пользователь поделился номером телефона,
            привязанным к его аккаунту в MAX<br/> Подробнее — [в разделе «Типы
            кнопок»](/docs-api/use-cases/sending-messages/keyboard#Типы%20кнопок)
          nullable: true
          readOnly: false
          type: string
        max_info:
          description: Информация о пользователе
          nullable: true
          readOnly: false
          allOf:
            - $ref: "#/components/schemas/User"
    StickerAttachmentPayload:
      description: Результат загрузки стикера
      allOf:
        - $ref: "#/components/schemas/AttachmentPayload"
        - properties:
            code:
              description: ID стикера
              type: string
          required:
            - code
    StickerAttachment:
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            payload:
              description: Результат отправки стикера
              type: object
              allOf:
                - $ref: "#/components/schemas/StickerAttachmentPayload"
            width:
              description: Ширина стикера
              type: integer
            height:
              description: Высота стикера
              type: integer
          required:
            - payload
            - width
            - height
    ShareAttachmentPayload:
      description: Данные прикреплённого к сообщению предпросмотра медиавложения
      properties:
        url:
          description: URL, прикреплённый к сообщению для предпросмотра медиавложения
          minLength: 1
          type: string
          nullable: true
          readOnly: false
        token:
          description: Токен вложения
          type: string
          nullable: true
          readOnly: false
    ShareAttachment:
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            payload:
              description: Данные, использованные для прикрепления к сообщению предпросмотра
                контента по внешнему URL
              type: object
              allOf:
                - $ref: "#/components/schemas/ShareAttachmentPayload"
            title:
              description: Заголовок предпросмотра ссылки.
              type: string
              readOnly: false
              nullable: true
            description:
              description: Описание предпросмотра ссылки
              type: string
              readOnly: false
              nullable: true
            image_url:
              description: Изображение предпросмотра ссылки
              type: string
              nullable: true
              readOnly: false
          required:
            - payload
    LocationAttachment:
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            latitude:
              type: number
              format: double
              description: Широта, до 15 символов
            longitude:
              type: number
              format: double
              description: Долгота, до 15 символов
          required:
            - latitude
            - longitude
    InlineKeyboardAttachment:
      description: Кнопки в сообщении
      allOf:
        - $ref: "#/components/schemas/Attachment"
        - properties:
            payload:
              type: object
              allOf:
                - $ref: "#/components/schemas/Keyboard"
          required:
            - payload
    Keyboard:
      description: Клавиатура — это двумерный массив кнопок. Подробнее о типах кнопок
        и клавиатуре в ботах — [в разделе «Клавиатура для
        чат-бота»](/docs-api/use-cases/sending-messages/keyboard)
      properties:
        buttons:
          type: array
          items:
            type: array
            items:
              $ref: "#/components/schemas/Button"
      required:
        - buttons
    Button:
      properties:
        type:
          type: string
        text:
          description: "Видимый текст кнопки. Чтобы он отображался полностью, рекомендуем
            не превышать заданное количество символов в зависимости от
            размещения текста: `20` символов — при 1 кнопке в ряду, `10` — при
            2, `5` — при 3, `3` — при 4"
          type: string
          minLength: 1
          maxLength: 128
      discriminator:
        propertyName: type
        mapping:
          callback: "#/components/schemas/CallbackButton"
          link: "#/components/schemas/LinkButton"
          request_geo_location: "#/components/schemas/RequestGeoLocationButton"
          request_contact: "#/components/schemas/RequestContactButton"
          open_app: "#/components/schemas/OpenAppButton"
          message: "#/components/schemas/MessageButton"
          clipboard: "#/components/schemas/ClipboardButton"
      required:
        - type
        - text
    CallbackButton:
      description: После нажатия на такую кнопку клиент отправляет на сервер полезную
        нагрузку, которая содержит
      allOf:
        - $ref: "#/components/schemas/Button"
        - properties:
            payload:
              description: Токен кнопки
              type: string
              maxLength: 1024
          required:
            - payload
    LinkButton:
      description: После нажатия на такую кнопку пользователь переходит по ссылке,
        которую она содержит
      allOf:
        - $ref: "#/components/schemas/Button"
        - properties:
            url:
              type: string
              maxLength: 2048
          required:
            - url
    RequestContactButton:
      description: После нажатия на такую кнопку клиент отправляет новое сообщение с
        вложением текущего контакта пользователя
      allOf:
        - $ref: "#/components/schemas/Button"
    RequestGeoLocationButton:
      description: После нажатия на такую кнопку клиент отправляет новое сообщение с
        вложением текущего географического положения пользователя
      allOf:
        - $ref: "#/components/schemas/Button"
        - properties:
            quick:
              description: Если `true`, отправляет местоположение без запроса подтверждения
                пользователя<br/>Если `false`, возвращает модальное окно с
                дополнительным уточнением об отправке местоположения
              readOnly: false
              type: boolean
              default: false
    ChatButton:
      description: |-
        Кнопка, которая создает новый чат, как только первый пользователь на нее нажмёт.
        BБот будет добавлен в участники чата как администратор.
        MАвтор сообщения станет владельцем чата.
      allOf:
        - $ref: "#/components/schemas/Button"
        - properties:
            chat_title:
              description: Название чата, который будет создан
              type: string
              maxLength: 200
            chat_description:
              description: Описание чата
              readOnly: false
              nullable: true
              type: string
              maxLength: 400
            start_payload:
              description: Стартовая полезная нагрузка будет отправлена боту, как только чат
                будет создан
              readOnly: false
              nullable: true
              type: string
              maxLength: 512
            uuid:
              description: |-
                Уникальный ID кнопки среди всех кнопок чата на клавиатуре.
                Если `uuid` изменён, новый чат будет создан при следующем нажатии.
                Сервер сгенерирует его в момент, когда кнопка будет впервые размещена.
                Используйте его при редактировании сообщения.'
              readOnly: false
              nullable: true
              type: integer
          required:
            - chat_title
    OpenAppButton:
      description: Кнопка для запуска мини-приложения
      allOf:
        - $ref: "#/components/schemas/Button"
        - properties:
            web_app:
              description: Публичное имя (username) бота или ссылка на него, чьё
                мини-приложение надо запустить
              readOnly: false
              type: string
            contact_id:
              description: Идентификатор бота, чьё мини-приложение надо запустить
              readOnly: false
              type: integer
              format: int64
            payload:
              description: Параметр запуска, который будет передан в
                [initData](/docs/webapps/bridge#WebAppData) мини-приложения
              readOnly: false
              type: string
    ClipboardButton:
      description: При нажатии на кнопку с типом `clipboard` текст, указанный в
        свойстве `payload`, копируется в буфер обмена
      allOf:
        - $ref: "#/components/schemas/Button"
        - properties:
            payload:
              description: Текст, который будет скопирован
              type: string
              maxLength: 1024
          required:
            - payload
    MessageButton:
      description: Кнопка для запуска мини-приложения
      allOf:
        - $ref: "#/components/schemas/Button"
        - properties:
            text:
              minLength: 1
              maxLength: 128
              description: Текст кнопки, который будет отправлен в чат от лица пользователя
              readOnly: false
              type: string
    MessageLinkType:
      description: Тип связанного сообщения
      type: string
      enum:
        - forward
        - reply
    AttachmentRequest:
      description: Запрос на прикрепление данных к сообщению
      discriminator:
        propertyName: type
        mapping:
          image: "#/components/schemas/PhotoAttachmentRequest"
          video: "#/components/schemas/VideoAttachmentRequest"
          audio: "#/components/schemas/AudioAttachmentRequest"
          file: "#/components/schemas/FileAttachmentRequest"
          sticker: "#/components/schemas/StickerAttachmentRequest"
          contact: "#/components/schemas/ContactAttachmentRequest"
          inline_keyboard: "#/components/schemas/InlineKeyboardAttachmentRequest"
          location: "#/components/schemas/LocationAttachmentRequest"
          share: "#/components/schemas/ShareAttachmentRequest"
      properties:
        type:
          type: string
      required:
        - type
    PhotoAttachmentRequest:
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            payload:
              allOf:
                - $ref: "#/components/schemas/PhotoAttachmentRequestPayload"
          required:
            - payload
    PhotoAttachmentRequestPayload:
      description: "Данные для прикрепления изображения (все поля являются
        взаимоисключающими). Вместе с изображениями можно прикрепить видеофайлы
        (`type: video`) и одно вложение с кнопками (`type: inline_keyboard`).
        Общее количество вложений не должно превышать общее ограничение — 12.
        Подробнее — [в
        примерах](/docs-api/use-cases/sending-messages/media#Как%20отправить%20\
        аудио)"
      properties:
        url:
          description: Любой внешний URL изображения, которое вы хотите прикрепить
          minLength: 1
          nullable: true
          readOnly: false
          type: string
        token:
          description: Токен существующего вложения
          nullable: true
          readOnly: false
          type: string
        photos:
          description: Токены, полученные после загрузки изображений
          nullable: true
          readOnly: false
          type: object
          additionalProperties:
            $ref: "#/components/schemas/PhotoToken"
    PhotoToken:
      properties:
        token:
          description: Закодированная информация загруженного изображения
          type: string
      required:
        - token
    PhotoTokens:
      description: Это информация, которую вы получите, как только изображение будет
        загружено
      properties:
        photos:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/PhotoToken"
      required:
        - photos
    VideoAttachmentRequest:
      description: "Данные для прикрепления видео к сообщению. Вместе с видео можно
        прикрепить изображения (`type: image`) и одно вложение с кнопками
        (`type: inline_keyboard`). Общее количество вложений не должно превышать
        общее ограничение — 12. Подробнее — [в
        примерах](/docs-api/use-cases/sending-messages/media#Как%20отправить%20\
        аудио)"
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            payload:
              allOf:
                - $ref: "#/components/schemas/UploadedInfo"
          required:
            - payload
    AudioAttachmentRequest:
      description: Запрос на прикрепление аудио к сообщению. Должен быть единственным
        вложением в сообщении
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            payload:
              allOf:
                - $ref: "#/components/schemas/UploadedInfo"
          required:
            - payload
    UploadedInfo:
      description: Данные, которые вы получили в ответ на запрос [POST
        /uploads](/docs-api/methods/POST/uploads). Можно передавать после того,
        как вы загрузили аудио, видео или файл и получили в ответ от сервера
        `retval`. Подробнее — в описании [POST
        /uploads](/docs-api/methods/POST/uploads)
      properties:
        token:
          description: "Токен вложения — уникальный ID загруженного медиа: изображения,
            аудио, видео или файла. Возвращается в ответ на вызов [POST
            /uploads](/docs-api/methods/POST/uploads)"
          type: string
          readOnly: false
    FileAttachmentRequest:
      description: Данные для прикрепления файла к сообщению, которые вы получили в
        ответ на запрос [POST /uploads](/docs-api/methods/POST/uploads). Файл
        можно отправить только в комбинации с вложением с кнопками — отправка
        совместно с изображением или видео не поддерживается. При этом к
        сообщению можно прикрепить только один файл и одно вложение с кнопками.
        Подробнее — в описании [POST /uploads](/docs-api/methods/POST/uploads)
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            payload:
              description: Данные для прикрепления файла к сообщению, которые вы получили в
                ответ на запрос [POST /uploads](/docs-api/methods/POST/uploads).
                К сообщению можно прикрепить только один файл вместе с одним
                вложением с кнопками. Отправка файла совместно с другими
                вложениями не поддерживается
              allOf:
                - $ref: "#/components/schemas/UploadedInfo"
          required:
            - payload
    UploadType:
      description: |
        Тип загружаемого медиафайла. Возможные значения и поддерживаемые форматы:
        - `image` — изображение (JPG, JPEG, PNG, GIF, TIFF, BMP, HEIC)<br/> **Максимальный размер** одного изображения: до 50 МБ или не более 7680 x 7680 px — должны выполняться оба критерия. Например, отправить изображение 55 МБ и 7600 x 7600 px нельзя
        - `video` — видеофайл (MP4, MOV, MKV, WEBM)<br/> **Максимальный размер** одного видео: до 250 МБ  
        - `audio` — аудиофайл (MP3, M4A и другие)<br/>**Максимальный размер** одного аудио: до 256 МБ или длительностью не более 60 мин — должны выполняться оба критерия. Например, отправить аудио размером 250 МБ и длительностью 70 минут нельзя
        - `file` — файл, поддерживаются распространённые форматы (например, TXT, DOC и другие) <br/>**Максимальный размер** одного файла: до 4 ГБ 

        При передаче неподдерживаемого типа файла вернётся ошибка  `File extension is forbidden`

         > Значение `photo` больше не поддерживается. Если вы использовали `type=photo` в ранее созданных интеграциях — замените его на `type=image`
      enum:
        - image
        - video
        - audio
        - file
    ContactAttachmentRequest:
      description: "Запрос на прикрепление карточки контакта к сообщению. К сообщению
        можно прикрепить один контакт. Совместно с ним можно прикрепить
        дополнительно одно вложение с кнопкой (`type: inline_keyboard`).
        Передача других типов вложений совместно с контактом не поддерживается"
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            payload:
              description: "Данные для прикрепления карточки контакта к сообщению. К сообщению
                можно прикрепить один контакт. Совместно с ним можно прикрепить
                дополнительно одно вложение с кнопкой (`type: inline_keyboard`).
                Передача других типов вложений совместно с контактом не
                поддерживается"
              allOf:
                - $ref: "#/components/schemas/ContactAttachmentRequestPayload"
          required:
            - payload
    ContactAttachmentRequestPayload:
      properties:
        name:
          description: Имя контакта
          nullable: true
          type: string
        contact_id:
          description: ID контакта, если он зарегистрирован в MAX
          nullable: true
          readOnly: false
          type: integer
          format: int64
        vcf_info:
          description: Полная информация о контакте в формате VCF
          nullable: true
          readOnly: false
          type: string
        vcf_phone:
          description: Телефон контакта в формате VCF
          readOnly: false
          nullable: true
          type: string
      required:
        - name
    StickerAttachmentRequest:
      description: Запрос на прикрепление стикера. Должен быть единственным вложением
        в сообщении
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            payload:
              allOf:
                - $ref: "#/components/schemas/StickerAttachmentRequestPayload"
          required:
            - payload
    StickerAttachmentRequestPayload:
      description: Данные для при прикрепления стикера к сообщению. Должен быть
        единственным вложением в сообщении. В одном запросе можно отправить
        только один стикер
      properties:
        code:
          description: Код стикера
          type: string
      required:
        - code
    InlineKeyboardAttachmentRequest:
      description: Запрос на прикрепление клавиатуры к сообщению
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            payload:
              description: "Данные для прикрепления кнопок к сообщению<br/>Ограничения:<br/>-
                Максимальное количество кнопок в ряду — 7<br/>- Максимальное
                количество строк с кнопками — 30<br/>- Если в ряду кнопки с
                типами: `link`, `open_app`, `request_geo_location`,
                `request_contact`, то максимальное количество кнопок в ряду — 3"
              type: object
              allOf:
                - $ref: "#/components/schemas/InlineKeyboardAttachmentRequestPayload"
          required:
            - payload
    InlineKeyboardAttachmentRequestPayload:
      properties:
        buttons:
          description: Двумерный массив кнопок. Подробнее о типах кнопок и клавиатуре в
            ботах — [в разделе «Клавиатура для
            чат-бота»](/docs-api/use-cases/sending-messages/keyboard)
          type: array
          minLength: 1
          items:
            type: array
            items:
              $ref: "#/components/schemas/Button"
      required:
        - buttons
    LocationAttachmentRequest:
      description: Запрос на прикрепление геолокации к сообщению
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            latitude:
              type: number
              format: double
              description: Широта, до 15 символов
            longitude:
              type: number
              format: double
              description: Долгота, до 15 символов
          required:
            - latitude
            - longitude
    ShareAttachmentRequest:
      description: Запрос на прикрепление предпросмотра контента по внешнему URL
      allOf:
        - $ref: "#/components/schemas/AttachmentRequest"
        - properties:
            payload:
              description: Данные для прикрепления предпросмотра контента по внешнему URL
              allOf:
                - $ref: "#/components/schemas/ShareAttachmentPayload"
          required:
            - payload
    MarkupElement:
      properties:
        type:
          description: |-
            Тип элемента разметки. Может быть **жирный**,  *курсив*, ~зачеркнутый~, <ins>подчеркнутый</ins>, `моноширинный`, выделенный, цитата, заголовок, ссылка или упоминание пользователя

            **Обратите внимание**: в тексте комментариев не поддерживаются гиперссылки и упоминание пользователей
          type: string
        from:
          description: Индекс начала элемента разметки в тексте. Нумерация с нуля
          type: integer
          format: int32
        length:
          description: Длина элемента разметки в символах
          type: integer
          format: int32
      discriminator:
        propertyName: type
        mapping:
          strong: "#/components/schemas/StrongMarkup"
          emphasized: "#/components/schemas/EmphasizedMarkup"
          monospaced: "#/components/schemas/MonospacedMarkup"
          link: "#/components/schemas/LinkMarkup"
          strikethrough: "#/components/schemas/StrikethroughMarkup"
          underline: "#/components/schemas/UnderlineMarkup"
          user_mention: "#/components/schemas/UserMentionMarkup"
          heading: "#/components/schemas/HeadingMarkup"
          highlighted: "#/components/schemas/HighlightedMarkup"
          quote: "#/components/schemas/QuoteMarkup"
      required:
        - type
        - from
        - length
    StrongMarkup:
      description: Представляет **жирный** текст
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
    EmphasizedMarkup:
      description: Представляет *курсив*
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
    MonospacedMarkup:
      description: Представляет `моноширинный` или блок ```код``` в тексте
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
    LinkMarkup:
      description: |-
        Представляет ссылку в тексте

         **Обратите внимание**: в тексте комментариев гиперссылки не поддерживаются
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
        - properties:
            url:
              description: URL ссылки
              type: string
              minLength: 1
              maxLength: 2048
          required:
            - url
    StrikethroughMarkup:
      description: Представляет ~зачёкрнутый~ текст
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
    UnderlineMarkup:
      description: Представляет <ins>подчёркнутый</ins> текст
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
    HeadingMarkup:
      description: Представляет заголовок
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
    QuoteMarkup:
      description: Представляет цитату
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
    UserMentionMarkup:
      description: |-
        Представляет упоминание пользователя в тексте. Упоминание может быть как по имени пользователя, так и по ID, если у пользователя нет имени

        **Обратите внимание**: в тексте комментариев упоминание пользователя не поддерживаются
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
        - properties:
            user_link:
              description: "`@username` упомянутого пользователя"
              type: string
              nullable: true
              readOnly: false
            user_id:
              description: ID упомянутого пользователя без имени
              type: integer
              format: int64
              nullable: true
              readOnly: false
    HighlightedMarkup:
      description: Представляет выделенный текст
      allOf:
        - $ref: "#/components/schemas/MarkupElement"
    SubscriptionRequestBody:
      description: Запрос на настройку подписки WebHook
      properties:
        url:
          $ref: "#/components/schemas/SubscriptionUrl"
        update_types:
          description: Список типов событий, которые хочет получать ваш бот. Полный список
            смотрите в описании объекта [Update](/docs-api/objects/Update)
          example: '["message_created", "bot_started"]'
          type: array
          uniqueItems: true
          items:
            type: string
          readOnly: false
        secret:
          description: Cекрет, который должен быть отправлен в заголовке
            `X-Max-Bot-Api-Secret` в каждом запросе Webhook. Разрешены только
            символы `A-Z`, `a-z`, `0-9`, и дефис. Заголовок рекомендован, чтобы
            запрос поступал из установленного веб-узла
          type: string
          minLength: 5
          maxLength: 256
          pattern: ^[a-zA-Z0-9_-]{5,256}$
      required:
        - url
    GetSubscriptionsResult:
      description: Список всех WebHook подписок
      properties:
        subscriptions:
          description: Список текущих подписок
          type: array
          items:
            $ref: "#/components/schemas/Subscription"
      required:
        - subscriptions
    SimpleQueryResult:
      description: Простой ответ на запрос
      properties:
        success:
          description: "`true`, если запрос был успешным, `false` — в противном случае"
          type: boolean
        message:
          description: Сообщение об ошибке
          type: string
          readOnly: false
      required:
        - success
    PinMessageBody:
      properties:
        message_id:
          description: ID сообщения, которое нужно закрепить. Соответствует полю
            `Message.body.mid`
          type: string
        notify:
          description: Если `true`, участники получат уведомление с системным сообщением о
            закреплении
          type: boolean
          default: true
          readOnly: false
          nullable: true
      required:
        - message_id
    GetPinnedMessageResult:
      properties:
        message:
          description: Закреплённое сообщение. Может быть `null`, если в чате нет
            закреплённого сообщения
          readOnly: false
          nullable: true
          allOf:
            - $ref: "#/components/schemas/Message"
    Callback:
      description: Объект, отправленный боту, когда пользователь нажимает кнопку
      properties:
        timestamp:
          description: Unix timestamp в миллисекундах, когда пользователь нажал кнопку
          type: integer
          format: int64
        callback_id:
          description: Текущий ID клавиатуры
          type: string
        payload:
          description: Токен кнопки
          type: string
          readOnly: false
        user:
          description: Пользователь, нажавший на кнопку
          allOf:
            - $ref: "#/components/schemas/User"
      required:
        - timestamp
        - callback_id
        - user
    CallbackAnswer:
      description: Отправьте этот объект, когда ваш бот хочет отреагировать на нажатие
        кнопки
      properties:
        message:
          description: Заполните это, если хотите изменить текущее сообщение
          nullable: true
          readOnly: false
          allOf:
            - $ref: "#/components/schemas/NewMessageBody"
    Error:
      description: Сервер возвращает это, если возникло исключение при вашем запросе
      properties:
        error:
          description: Ошибка
          type: string
        code:
          description: Код ошибки
          type: string
        message:
          description: Читаемое описание ошибки
          type: string
      required:
        - code
        - message
    UploadEndpoint:
      description: Точка доступа, куда следует загружать ваши бинарные файлы
      type: object
      properties:
        url:
          description: URL для загрузки медиафайла. Срок жизни ссылки не ограничен
          type: string
        token:
          description: Токен для отправки медиафайла во вложении к сообщению с помощью
            [POST /messages](/docs-api/methods/POST/messages) или [PUT
            /messages](/docs-api/methods/PUT/messages)
          type: string
      required:
        - url
    UserIdsList:
      properties:
        user_ids:
          name: user_ids
          description: Массив ID пользователей, которых вы хотите добавить в групповой
            чат. В одном запросе можно передать максимум 100 идентификаторов
          required: true
          schema:
            type: array
            uniqueItems: true
            items:
              type: integer
              format: int64
              maxItems: "100"
          style: simple
      required:
        - user_ids
    ActionRequestBody:
      properties:
        action:
          $ref: "#/components/schemas/SenderAction"
      required:
        - action
    SenderAction:
      description: |
        Действие, отправляемое участникам чата. Возможные значения:
        - `"typing_on"` — Бот набирает сообщение
        - `"sending_photo"` — Бот отправляет фото
        - `"sending_video"` — Бот отправляет видео
        - `"sending_audio"` — Бот отправляет аудиофайл
        -  `"sending_file"` — Бот отправляет файл
      enum:
        - typing_on
        - sending_photo
        - sending_video
        - sending_audio
        - sending_file
    UpdateList:
      description: Список обновлений о событиях в чатах и каналах, в которые добавлен
        бот. Обратите внимание, чтобы получать события из групповых чатов и
        каналов, бот должен быть администратором
      properties:
        updates:
          description: Список обновлений о событиях в чатах и каналах, в которые добавлен
            бот. Обратите внимание, чтобы получать события из групповых чатов и
            каналов, бот должен быть администратором. Подробнее о возможных
            событиях — [в описании объекта Update](/docs-api/objects/Update)
          type: array
          items:
            $ref: "#/components/schemas/Update"
        marker:
          description: Указатель на следующую страницу данных
          type: integer
          format: int64
          nullable: true
      required:
        - updates
        - marker
    Update:
      description: |-
        Объект `Update` описывает возможные события в чате или канале. Может возвращаться в следующих случаях:  

         - Вы подписались на обновления через Webhook — при наступлении события MAX пришлёт [POST-запрос `/subscriptions`](/docs-api/methods/POST/subscriptions), который содержит объект `Update` 

         - Вы отправили [GET-запрос /updates](/docs-api/methods/GET/updates) для получения обновлений через  Long Polling — в ответ вернётся объект `Update` 

          >! Получение обновлений с помощью [Long Polling](/docs-api/methods/GET/updates) ограничено по скорости и сроку хранения событий — этот способ не подходит для production-окружения. Рекомендуем на всех этапах работы использовать [Webhook](/docs-api/methods/POST/subscriptions)

         ## Типы событий

        Чтобы добавить новые события в подписку или изменить старые, используйте [`POST /subscriptions`](/docs-api/methods/POST/subscriptions)

         - `bot_added` — бот добавлен в чат или канал

        - `bot_started` — пользователь впервые начал общение с ботом или возобновил после остановки — нажал соответствующую кнопку в настройках бота в MAX

        - `bot_stopped` — пользователь остановил или удалил бота через настройки бота в MAX. Во втором случае одновременно с `bot_stopped` возвращается событие `dialog_removed`

        - `bot_removed` — бот удалён из чата или канала 

        - `chat_title_changed` — пользователь изменил название чата или канала

        - `dialog_cleared` — пользователь очистил историю диалога с ботом

        - `dialog_muted` — пользователь отключил уведомления в диалоге с ботом 

        - `dialog_unmuted` — пользователь включил уведомления в диалоге с ботом 

        - `dialog_removed` — пользователь удалил диалог с ботом. Вместе с этим событием одновременно возвращается `bot_stopped` — при удалении диалога бот останавливается автоматически 

        - `message_callback` — пользователь нажал на кнопку в чате или канале

         - `message_created` — пользователь отправил новое сообщение или опубликовал пост

        - `message_edited` — пользователь отредактировал сообщение в чате, пост в канале 

        - `message_removed` — пользователь удалил сообщение из чата или канала

         - `comment_created` — пользователь или бот опубликовал новый комментарий. Для бота на свои действия события не приходят

         - `comment_edited` — пользователь или бот изменил комментарий в канале. Обратите внимание, боты могут изменять только свои комментарии. Для бота на свои действия события не приходят 

        - `comment_removed` — пользователь или бот удалил комментарий. Для бота на свои действия события не приходят

        - `user_added` — в чат или канал добавлен или перешёл по ссылке новый пользователь

        - `user_removed` — пользователь удалён или покинул чат или канал 

        - `bot_admin_permissions_changed` — изменены права бота-администратора в канале или групповом чате. Событие возвращается пока только через Webhook – для Long Polling недоступно 

         ## Свойства объекта Update
      discriminator:
        propertyName: update_type
        mapping:
          bot_added:
            $ref: "#/components/schemas/BotAddedToChatUpdate"
          bot_started:
            $ref: "#/components/schemas/BotStartedUpdate"
          bot_stopped:
            $ref: "#/components/schemas/BotStoppedUpdate"
          bot_removed:
            $ref: "#/components/schemas/BotRemovedFromChatUpdate"
          chat_title_changed:
            $ref: "#/components/schemas/ChatTitleChangedUpdate"
          dialog_cleared:
            $ref: "#/components/schemas/DialogClearedUpdate"
          dialog_muted:
            $ref: "#/components/schemas/DialogMutedUpdate"
          dialog_unmuted:
            $ref: "#/components/schemas/DialogUnmutedUpdate"
          dialog_removed:
            $ref: "#/components/schemas/DialogRemovedUpdate"
          message_callback:
            $ref: "#/components/schemas/MessageCallbackUpdate"
          message_created:
            $ref: "#/components/schemas/MessageCreatedUpdate"
          message_edited:
            $ref: "#/components/schemas/MessageEditedUpdate"
          message_removed:
            $ref: "#/components/schemas/MessageRemovedUpdate"
          comment_created:
            $ref: "#/components/schemas/CommentCreatedUpdate"
          comment_edited:
            $ref: "#/components/schemas/CommentEditedUpdate"
          comment_removed:
            $ref: "#/components/schemas/CommentRemovedUpdate"
          user_added:
            $ref: "#/components/schemas/UserAddedToChatUpdate"
          user_removed:
            $ref: "#/components/schemas/UserRemovedFromChatUpdate"
          bot_admin_permissions_changed:
            $ref: "#/components/schemas/BotAdminPermissionsChangedUpdate"
      properties:
        update_type:
          type: string
        timestamp:
          description: Unix timestamp в миллисекундах, когда произошло событие
          type: integer
          format: int64
      required:
        - update_type
        - timestamp
    MessageCallbackUpdate:
      description: Вы получите это событие, как только пользователь нажмёт кнопку
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            callback:
              description: ""
              allOf:
                - $ref: "#/components/schemas/Callback"
            message:
              description: Изначальное сообщение, содержащее встроенную клавиатуру. Может быть
                `null`, если оно было удалено к моменту, когда бот получил это
                событие
              nullable: true
              allOf:
                - $ref: "#/components/schemas/Message"
            user_locale:
              description: Текущий язык пользователя в формате IETF BCP 47
              type: string
              nullable: true
              readOnly: false
          required:
            - callback
            - message
    MessageCreatedUpdate:
      description: Вы получите это событие, как только сообщение будет создано
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            message:
              description: Новое созданное сообщение
              allOf:
                - $ref: "#/components/schemas/Message"
            user_locale:
              description: Текущий язык пользователя в формате IETF BCP 47. Доступно только в
                диалогах
              type: string
              readOnly: false
              nullable: true
          required:
            - message
    MessageRemovedUpdate:
      description: Вы получите это событие, как только сообщение будет удалено
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            message_id:
              description: ID удалённого сообщения
              type: string
            chat_id:
              description: ID чата, где сообщение было удалено. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user_id:
              description: Пользователь, удаливший сообщение
              type: integer
              format: int64
            post_id:
              description: Идентификатор поста в канале, к которому оставлен комментарий
              type: string
              nullable: true
          required:
            - message_id
            - chat_id
            - user_id
            - post_id
    MessageEditedUpdate:
      description: Вы получите это событие, как только пользователь отредактирует сообщение
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            message:
              description: Отредактированное сообщение
              allOf:
                - $ref: "#/components/schemas/Message"
          required:
            - message
    CommentEditedUpdate:
      description: Вы получите это событие, как только пользователь отредактирует
        комментарий
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            message:
              description: Отредактированный комментарий
              allOf:
                - $ref: "#/components/schemas/Message"
          required:
            - message
    CommentCreatedUpdate:
      description: Вы получите это событие, как только комментарий будет создан
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            message:
              description: Новый созданный комментарий
              allOf:
                - $ref: "#/components/schemas/Message"
          required:
            - message
    CommentRemovedUpdate:
      description: Вы получите это событие, как только комментарий будет удалён
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            message_id:
              description: ID удалённого комментария
              type: string
            chat_id:
              description: ID чата, где комментарий был удалён
              type: integer
              format: int64
            user_id:
              description: Пользователь, удаливший комментарий
              type: integer
              format: int64
            post_id:
              description: Идентификатор поста в канале
              type: string
              nullable: true
          required:
            - message_id
            - chat_id
            - user_id
            - post_id
    BotAddedToChatUpdate:
      description: Вы получите это событие, как только бот будет добавлен в чат или канал
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата или канала, куда был добавлен бот. Как получить ID — [на
                странице «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, добавивший бота в чат
              allOf:
                - $ref: "#/components/schemas/User"
            is_channel:
              description: Указывает, что бот добавлен в канал, а не в чат
              type: boolean
          required:
            - chat_id
            - user
            - is_channel
    BotRemovedFromChatUpdate:
      description: Вы получите это событие, как только бот будет удалён из чата
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата, откуда был удалён бот. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, удаливший бота из чата
              allOf:
                - $ref: "#/components/schemas/User"
            is_channel:
              description: Указывает, что бот удалён из канала, а не из чата
              type: boolean
          required:
            - chat_id
            - user
            - is_channel
    DialogMutedUpdate:
      description: Вы получите это событие, как только пользователь отключит
        уведомления о новых сообщениях в диалоге с ботом
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, который отключил уведомления
              allOf:
                - $ref: "#/components/schemas/User"
            muted_until:
              description: Время в формате Unix timestamp в миллисекундах, до наступления
                которого диалог был отключён
              type: integer
              format: int64
            user_locale:
              description: Текущий язык пользователя в формате IETF BCP 47
              type: string
          required:
            - chat_id
            - user
            - muted_until
    DialogUnmutedUpdate:
      description: Вы получите это событие, как только пользователь включит
        уведомления о новых сообщениях в диалоге с ботом
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, который включил уведомления
              allOf:
                - $ref: "#/components/schemas/User"
            user_locale:
              description: Текущий язык пользователя в формате IETF BCP 47
              type: string
          required:
            - chat_id
            - user
    DialogClearedUpdate:
      description: Вы получите это событие, как только пользователь очистит историю
        сообщений
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, который очистил историю сообщений
              allOf:
                - $ref: "#/components/schemas/User"
            user_locale:
              description: Текущий язык пользователя в формате IETF BCP 47
              type: string
          required:
            - chat_id
            - user
    DialogRemovedUpdate:
      description: Вы получите это событие, как только пользователь удалит чат
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, который удалил чат
              allOf:
                - $ref: "#/components/schemas/User"
            user_locale:
              description: Текущий язык пользователя в формате IETF BCP 47
              type: string
          required:
            - chat_id
            - user
    UserAddedToChatUpdate:
      description: Вы получите это событие, как только пользователь будет добавлен в
        чат, где бот является администратором
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, добавленный в чат
              allOf:
                - $ref: "#/components/schemas/User"
            inviter_id:
              description: Пользователь, который добавил нового пользователя в чат. Может быть
                `null`, если пользователь присоединился к чату по ссылке
              type: integer
              format: int64
              readOnly: false
              nullable: true
            is_channel:
              description: Указывает, что пользователь добавлен в канал, а не в чат
              type: boolean
          required:
            - chat_id
            - user
            - is_channel
    UserRemovedFromChatUpdate:
      description: Вы получите это событие, как только пользователь будет удалён из
        чата, где бот является администратором
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, удалённый из чата
              allOf:
                - $ref: "#/components/schemas/User"
            admin_id:
              description: Администратор, который удалил пользователя из чата. Может быть
                `null`, если пользователь покинул чат сам
              type: integer
              format: int64
              readOnly: false
            is_channel:
              description: Указывает, что пользователь удалён из канала, а не из чата
              type: boolean
          required:
            - chat_id
            - user
            - is_channel
    BotStartedUpdate:
      description: "Вы получите это событие, как только пользователь начнёт или
        возобновит общение с ботом: нажмёт соответствующую кнопку в настройках
        бота в MAX"
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID диалога, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, который запустил бота через интерфейс, например,
                нажав кнопку `Start`
              allOf:
                - $ref: "#/components/schemas/User"
            payload:
              description: Дополнительные данные из диплинков, переданные при запуске бота.
                Подробнее о диплинках — [в разделе FAQ](/help/deeplinks)
              type: string
              maxLength: 512
              nullable: true
              readOnly: false
            user_locale:
              description: Текущий язык пользователя в формате [IETF BCP
                47](https://www.rfc-editor.org/info/bcp47/)
              type: string
              readOnly: false
          required:
            - chat_id
            - user
    BotStoppedUpdate:
      description: Вы получите это событие, как только пользователь остановит бота в
        его настройках в MAX
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID диалога, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, который остановил бота
              allOf:
                - $ref: "#/components/schemas/User"
            user_locale:
              description: Текущий язык пользователя в формате IETF BCP 47
              type: string
              readOnly: false
          required:
            - chat_id
            - user
    ChatTitleChangedUpdate:
      description: Вы получите это событие, как только будет изменено название чата
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: ID чата, где произошло событие. Как получить ID — [на странице
                «Получение ID чата или
                канала»](/docs-api/use-cases/getting-chat-id)
              type: integer
              format: int64
            user:
              description: Пользователь, который изменил название
              allOf:
                - $ref: "#/components/schemas/User"
            title:
              description: Новое название
              type: string
          required:
            - chat_id
            - user
            - title
    BotAdminPermissionsChangedUpdate:
      type: object
      description: Вы получите это событие при изменении прав бота-администратора
        группового чата или канала. Событие возвращается пока только через
        Webhook — для Long Polling не поддержано
      allOf:
        - $ref: "#/components/schemas/Update"
        - properties:
            chat_id:
              description: Идентификатор группового чата или канала, в котором изменились
                права бота-администратора
              allOf:
                - $ref: "#/components/schemas/ChatId"
            user_id:
              description: Идентификатор пользователя или бота, который изменил права
                администратора
              allOf:
                - $ref: "#/components/schemas/UserId"
            bot_id:
              description: Идентификатор бота, чьи права администратора были изменены
              allOf:
                - $ref: "#/components/schemas/UserId"
            is_channel:
              description: Признак того, что событие произошло в канале
              type: boolean
            is_admin:
              description: Признак того, является ли бот администратором канала или группового
                чата или нет
              type: boolean
            permissions:
              description: |-
                Перечень обновлённых прав доступа бота — администратора группового чата или канала. Ниже приведено краткое описание всех прав — подробнее читайте [в разделе «Доступные права администратора»](/docs-api/methods/POST/chats/-chatId-/members/admins) 

                 **Краткое описание доступных прав бота-администратора**: 
                - `read_all_messages` — читать все сообщения в канале или групповом чате 
                - `edit` — редактировать посты и комментарии в каналах (для групповых чатов недоступно). Ранее вместо `edit` в API использовалось `edit_message` — в ответе могут возвращаться оба значения 
                - `delete` — удалять посты и комментарии в каналах (для групповых чатов недоступно). Ранее вместо `delete` в API использовалось `delete_message` — в ответе могут возвращаться оба значения 
                - `write` — редактировать и удалять сообщения в групповых чатах, а также писать посты и комментарии в каналах. Ранее вместо `write` в API использовалось `post_edit_delete_message` — в ответе могут возвращаться оба значения 
                - `pin_message` — закреплять сообщение 
                - `change_chat_info` — изменять информацию о канале или групповом чате
                - `add_remove_members` — добавлять и удалять участников группового чата. Добавление подписчиков в канал ботам недоступно 
                - `add_admins` — добавлять и удалять администраторов группового чата или канала
                - `edit_link` — изменять ссылку на групповой чат (для каналов недоступно)
                - `can_call` — звонить в групповом чате (для каналов недоступно)
              type: array
              uniqueItems: true
              nullable: true
              items:
                $ref: "#/components/schemas/ChatAdminPermission"
              readOnly: false
          required:
            - chat_id
            - user_id
            - bot_id
            - is_channel
            - is_admin
    ModifyMembersResult:
      description: Результат запроса на изменение списка участников
      allOf:
        - $ref: "#/components/schemas/SimpleQueryResult"
        - properties:
            failed_user_ids:
              description: ID пользователей, которых не удалось добавить в групповой чат
              type: array
              items:
                type: integer
                format: int64
              nullable: true
              readOnly: false
            failed_user_details:
              description: Подробное объяснение, почему пользователь не был добавлен в
                групповой чат
              type: array
              items:
                $ref: "#/components/schemas/FailedUserDetails"
              nullable: true
              readOnly: false
    FailedUserDetails:
      description: Подробное описание, почему пользователь не был добавлен в групповой
        чат или канал
      properties:
        error_code:
          description: |-
            Код ошибки

            Возможные значения:

            - `add.participant.privacy` — ошибки конфиденциальности при добавлении пользователей

            - `add.participant.not.found` — пользователи не найдены
          type: string
        user_ids:
          description: ID пользователей с данной ошибкой
          type: array
          items:
            type: integer
            format: int64
          nullable: false
      required:
        - error_code
        - user_ids
