{
  "openapi": "3.0.2",
  "info": {
    "title": "api/messenger",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "/"
    },
    {
      "url": "https://api.ati.su"
    }
  ],
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "paths": {
    "/messenger/1.1/chats/": {
      "post": {
        "tags": [
          "Chats"
        ],
        "summary": "Создание чата",
        "requestBody": {
          "description": "Объект, описывающий новый чат",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "channel_type",
                  "name",
                  "description"
                ],
                "properties": {
                  "channel_type": {
                    "type": "string",
                    "enum": [
                      "dialog",
                      "channel",
                      "group",
                      "ati_driver"
                    ],
                    "description": "тип чата"
                  },
                  "name": {
                    "type": "string",
                    "description": "имя групп.чата/собеседника"
                  },
                  "description": {
                    "type": "string",
                    "description": "описание"
                  },
                  "id": {
                    "type": "string",
                    "description": "{ID аккаунта партнера}.{id контакта} (только для типов dialog, ati_driver)"
                  },
                  "ati_id": {
                    "type": "string",
                    "description": "{код в ATI.SU партнера}.{id контакта} (только для типов dialog, ati_driver)"
                  },
                  "is_open": {
                    "type": "boolean",
                    "description": "открытый/закрытый (только для типов channel, group)"
                  },
                  "members": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "alias'ы (коды в ATI.SU) партнеров с contact_id (только для типов channel, group)"
                  }
                }
              },
              "examples": {
                "group": {
                  "value": {
                    "channel_type": "group",
                    "name": "Моя группа",
                    "is_open": true,
                    "description": "Описание моей группы"
                  }
                },
                "channel": {
                  "value": {
                    "channel_type": "channel",
                    "name": "Мой канал",
                    "is_open": true,
                    "description": "Описание моего канала",
                    "members": [
                      "123.4",
                      "567.8"
                    ]
                  }
                },
                "dialog_by_code": {
                  "value": {
                    "channel_type": "dialog",
                    "name": "Моя компания",
                    "ati_id": "777.0",
                    "description": "Описание моего диалога"
                  }
                },
                "dialog_by_id": {
                  "value": {
                    "channel_type": "dialog",
                    "name": "Моя компания",
                    "id": "1423464.0",
                    "description": "Описание моего диалога"
                  }
                },
                "ati_driver": {
                  "value": {
                    "channel_type": "ati_driver",
                    "name": "Моя компания",
                    "id": "1423464.0",
                    "description": "Описание моего диалога"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Данные подписки",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subscription"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка валидации"
          }
        }
      }
    },
    "/messenger/1.1/chats/{chat_id}/": {
      "put": {
        "tags": [
          "Chats"
        ],
        "summary": "Обновление мета-данных группового чата",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id группового чата"
          }
        ],
        "requestBody": {
          "description": "Объект с измененными данными",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "имя групп.чата"
                  },
                  "description": {
                    "type": "string",
                    "description": "описание"
                  }
                }
              },
              "examples": {
                "group": {
                  "value": {
                    "name": "Новое название группы",
                    "description": "Новое описание моей группы"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Обновленные данные подписки",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subscription"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка валидации"
          },
          "403": {
            "description": "Только владелец канала/группы может выполнять это действие"
          },
          "404": {
            "description": "Чат не найден"
          }
        }
      },
      "delete": {
        "tags": [
          "Chats"
        ],
        "summary": "Удаление группового чата владельцем",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id группового чата"
          }
        ],
        "responses": {
          "204": {
            "description": "Канал удален"
          },
          "403": {
            "description": "Пользователь не является владельцем группового чата"
          },
          "404": {
            "description": "Не найден групповой чат или пользователь в этом чате"
          }
        }
      }
    },
    "/messenger/1.2/subscriptions/": {
      "get": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Получение всех подписок пользователя",
        "parameters": [
          {
            "in": "query",
            "name": "type",
            "schema": {
              "type": "string",
              "enum": [
                "channel",
                "dialog",
                "group",
                "groups"
              ]
            },
            "description": "Необязательный тип подписок (channel, dialog, group, groups)"
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 1000
            },
            "description": "По сколько чатов выводить на страницу"
          },
          {
            "in": "query",
            "name": "before",
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "description": "Перед каким временем обновления чата (utime) в формате unix time (микросекунды) необходимо загружать список чатов",
            "examples": {
              "before_example": {
                "value": 1580326210000000,
                "summary": "Каналы которые последний раз обновились до 27 января 2020 года 19:30:10"
              }
            }
          },
          {
            "in": "query",
            "name": "after",
            "schema": {
              "type": "integer",
              "minimum": 0
            },
            "description": "После какого времени обновления чата (utime) в формате unix time (микросекунды) необходимо загружать список чатов",
            "examples": {
              "after_example": {
                "value": 1580326210000000,
                "summary": "Каналы которые последний раз обновились после 27 января 2020 года 19:30:10"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Подписки пользователя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArrayOfSubscriptions"
                }
              }
            }
          }
        }
      }
    },
    "/messenger/1.1/subscriptions/{chat_id}/": {
      "get": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Получение информации о подписке",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id чата"
          }
        ],
        "responses": {
          "200": {
            "description": "Подписки пользователя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subscription"
                }
              }
            }
          },
          "404": {
            "description": "Канал не найден"
          }
        }
      },
      "patch": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Принятие приглашения в групповой чат",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id групповой чат"
          }
        ],
        "responses": {
          "204": {
            "description": "Приглашение принято"
          },
          "400": {
            "description": "У пользователя нет приглашения"
          },
          "404": {
            "description": "Канал не найден"
          }
        }
      },
      "delete": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Удаление себя из группового чата или удаление приглашения",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id группового чата"
          }
        ],
        "responses": {
          "204": {
            "description": "Подписка на групповой чат удалена"
          },
          "403": {
            "description": "Нельзя удалить администратора группового чата"
          },
          "404": {
            "description": "Канал не найден"
          }
        }
      }
    },
    "/messenger/1.1/chats/{chat_id}/users/": {
      "get": {
        "tags": [
          "Chat Users"
        ],
        "summary": "Получение списка участников",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id группового чата"
          },
          {
            "in": "query",
            "name": "start",
            "schema": {
              "type": "integer"
            },
            "description": "Начало пагинации"
          },
          {
            "in": "query",
            "name": "end",
            "schema": {
              "type": "integer"
            },
            "description": "Конец пагинации"
          },
          {
            "in": "query",
            "name": "with_invite",
            "schema": {
              "type": "boolean"
            },
            "description": "Включить в список приглашенных пользователей"
          },
          {
            "in": "query",
            "name": "invited",
            "schema": {
              "type": "boolean"
            },
            "description": "Вернуть только приглашенных пользователей"
          }
        ],
        "responses": {
          "200": {
            "description": "Список участников",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArrayOfUsers"
                }
              }
            }
          },
          "403": {
            "description": "У вас нет прав. Только администратор может совершать это действие."
          },
          "404": {
            "description": "Канал не найден, Пользователь в групповом чате не найден"
          }
        }
      },
      "post": {
        "tags": [
          "Chat Users"
        ],
        "summary": "Приглашение нескольких пользователей в групповой чат",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id группового чата"
          },
          {
            "in": "query",
            "name": "ati_id",
            "schema": {
              "type": "boolean"
            },
            "description": "Использовать алиасы (коды в ATI.SU) с контактами в качестве user_id в поле members"
          }
        ],
        "requestBody": {
          "description": "Объект, описывающий новый групповой чат",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "members"
                ],
                "properties": {
                  "members": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Подписки добавленных пользователя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subscription"
                }
              }
            }
          },
          "400": {
            "description": "Пользователь не является владельцем группового чата, Канал был удален, Код пользователя задан в неверном формате"
          },
          "403": {
            "description": "У вас нет прав. Только администратор может совершать это действие."
          },
          "404": {
            "description": "Группа не найдена"
          }
        }
      }
    },
    "/messenger/1.1/chats/{chat_id}/users/{user_id}/": {
      "post": {
        "tags": [
          "Chat Users"
        ],
        "summary": "Приглашение пользователя в групповой чат",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id группового чата"
          },
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "firm_id юзера с контактом"
          },
          {
            "in": "query",
            "name": "ati_id",
            "schema": {
              "type": "boolean"
            },
            "description": "Использовать алиас (код в ATI.SU) с контактом в качестве user_id"
          }
        ],
        "responses": {
          "200": {
            "description": "Подписка добавленного пользователя",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subscription"
                }
              }
            }
          },
          "400": {
            "description": "Пользователь не является владельцем группового чата, Канал был удален, Код пользователя задан в неверном формате"
          },
          "403": {
            "description": "У вас нет прав. Только администратор может совершать это действие."
          },
          "404": {
            "description": "Группа не найдена"
          }
        }
      },
      "delete": {
        "tags": [
          "Chat Users"
        ],
        "summary": "Исключение участника из группового чата",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id группового чата"
          },
          {
            "in": "path",
            "name": "user_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id пользователя"
          },
          {
            "in": "query",
            "name": "ati_id",
            "schema": {
              "type": "boolean"
            },
            "description": "Использовать алиас (код в ATI.SU) с контактом в качестве user_id"
          }
        ],
        "responses": {
          "204": {
            "description": "Подписка удалена"
          },
          "400": {
            "description": "Код пользователя задан в неверном формате"
          },
          "403": {
            "description": "Пользователь не является владельцем группового чата, Групповой чат был удален"
          },
          "404": {
            "description": "Канал не найден"
          }
        }
      }
    },
    "/messenger/1.1/chats/{chat_id}/history/": {
      "get": {
        "tags": [
          "Chat History"
        ],
        "summary": "Получение истории сообщений",
        "description": "Возвращает список сообщений из эластика",
        "parameters": [
          {
            "name": "chat_id",
            "in": "path",
            "description": "id чата",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "before",
            "in": "query",
            "description": "timestamp, до которого вернуть список сообщений (с пагинацией)",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "example": 1553154991842130
          },
          {
            "name": "num",
            "in": "query",
            "description": "Ограничить количество выдаваемых сообщений",
            "schema": {
              "type": "integer"
            },
            "example": 10
          },
          {
            "name": "since",
            "in": "query",
            "description": "timestamp, с которого вернуть список сообщений (с пагинацией)",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "example": 1553154991842130
          },
          {
            "name": "with_ts",
            "in": "query",
            "description": "включить в ответ timestamp прочитанности последнего сообщения",
            "schema": {
              "type": "boolean"
            },
            "example": 1
          }
        ],
        "responses": {
          "200": {
            "description": "список сообщения",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArrayOfMessages"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Chat History"
        ],
        "summary": "Очистка истории",
        "parameters": [
          {
            "name": "chat_id",
            "in": "path",
            "description": "id чата",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Возвращает объект подписки с обновленным tail и ts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subscription"
                }
              }
            }
          }
        }
      }
    },
    "/messenger/1.2/chats/{chat_id}/messages": {
      "post": {
        "tags": [
          "Messages"
        ],
        "summary": "Отправка сообщения",
        "parameters": [
          {
            "in": "path",
            "name": "chat_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id чата"
          },
          {
            "in": "formData",
            "name": "text",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Текст сообщения"
          },
          {
            "in": "formData",
            "name": "image_height",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Высота прикреплённой картинки"
          },
          {
            "in": "formData",
            "name": "image_width",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "Ширина прикреплённой картинки"
          },
          {
            "in": "formData",
            "name": "geo_longitude",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Долгота для гео-метки в градусах"
          },
          {
            "in": "formData",
            "name": "geo_latitude",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Широта для гео-метки в градусах"
          },
          {
            "in": "formData",
            "name": "geo_zoom",
            "required": false,
            "schema": {
              "type": "number"
            },
            "description": "Масштаб для гео-метки"
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Прикреплённый файл"
                  },
                  "image": {
                    "type": "string",
                    "format": "binary",
                    "description": "Прикреплённая картинка"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "json сообщения",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Message"
                }
              }
            }
          }
        }
      }
    },
    "/messenger/1.2/messages/{message_id}/image": {
      "get": {
        "tags": [
          "Messages"
        ],
        "summary": "Получение прикреплённого к сообщению изображения",
        "parameters": [
          {
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "id сообщения"
          },
          {
            "in": "query",
            "name": "height",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "требуемая высота картинки (по умолчанию используется исходная высота)"
          },
          {
            "in": "query",
            "name": "width",
            "required": false,
            "schema": {
              "type": "integer"
            },
            "description": "требуемая ширина картинки (по умолчанию используется исходная ширина)"
          },
          {
            "name": "biggest_side",
            "in": "query",
            "description": "требуемый размер наибольшего измерения картинки (по умолчанию используется исходный размер)",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Картинка, прикреплённая к сообщению"
          }
        }
      }
    },
    "/messenger/1.2/messages/{message_id}/file": {
      "get": {
        "tags": [
          "Messages"
        ],
        "summary": "Получение прикреплённого к сообщению файла",
        "parameters": [
          {
            "name": "message_id",
            "in": "path",
            "description": "id сообщения",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Файл, прикреплённый к сообщению"
          }
        }
      }
    },
    "/messenger/1.1/chats/{chat_id}/settings/": {
      "post": {
        "tags": [
          "Chats"
        ],
        "summary": "Изменение настроек подписки",
        "description": "Скрытость(hidden), запиненность(pin) в значениях true/false.",
        "parameters": [
          {
            "name": "chat_id",
            "in": "path",
            "description": "id чата",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Объект с изменяемой настройкой",
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "pin": {
                    "type": "boolean"
                  },
                  "hidden": {
                    "type": "boolean"
                  }
                }
              },
              "examples": {
                "both": {
                  "value": {
                    "pin": true,
                    "hidden": false
                  },
                  "description": "Изменить сразу оба параметра"
                },
                "only_one": {
                  "value": {
                    "pin": true
                  },
                  "description": "Изменить один параметр"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Возвращает объект подписки с обновленными настройками",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subscription"
                }
              }
            }
          },
          "400": {
            "description": "Ошибка валидации"
          },
          "403": {
            "description": "Скрыть канал можно только после принятия приглашения"
          },
          "404": {
            "description": "Канал не найден"
          }
        }
      }
    },
    "/messenger/1.1/chats/{chat_id}/messages/{ts_or_id}/": {
      "delete": {
        "tags": [
          "Chat Messages"
        ],
        "summary": "Удаление сообщения из диалога",
        "description": "Использует timestamp либо id для идентификации сообещния",
        "parameters": [
          {
            "name": "chat_id",
            "in": "path",
            "description": "id чата",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "ts_or_id",
            "in": "path",
            "description": "timestamp либо id удаляемого сообщений",
            "required": true,
            "schema": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ],
              "example": [
                1553154991842130,
                "5b42d88fea1cb745d23db8d7b9de11da5473ad61"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Возвращает объект подписки с обновленным tail и ts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subscription"
                }
              }
            }
          }
        }
      }
    },
    "/messenger/1.1/inbox/": {
      "get": {
        "tags": [
          "Root"
        ],
        "summary": "Получение счетчика чатов с непрочитанными сообщениями",
        "responses": {
          "200": {
            "description": "Счетчик непрочитанных",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "unread": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/messenger/1.1/subscriptions/unread/": {
      "get": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Получение количества непрочитанных чатов по типам (все/диалоги/групповые чаты)",
        "parameters": [
          {
            "in": "query",
            "name": "with_messages",
            "schema": {
              "type": "string"
            },
            "description": "Если true, то возвращает дополнительно количество непрочитанных сообщений."
          }
        ],
        "responses": {
          "200": {
            "description": "Данные по количеству непрочитанных чатов по типу",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "all": {
                      "type": "integer"
                    },
                    "dialogs": {
                      "type": "integer"
                    },
                    "groups": {
                      "type": "integer"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "User": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "id юзера (c contact_id)"
          },
          "code": {
            "type": "string",
            "description": "alias юзера (без contact_id)"
          },
          "name": {
            "type": "string",
            "description": "имя юзера"
          },
          "company": {
            "type": "string",
            "description": "название компании"
          },
          "email": {
            "type": "string",
            "description": "email юзера"
          },
          "fax": {
            "type": "string",
            "description": "факс юзера"
          },
          "icq": {
            "type": "string",
            "description": "icq юзера"
          },
          "mobile": {
            "type": "string",
            "description": "номер мобильного телефона юзера"
          },
          "phone": {
            "type": "string",
            "description": "номер телефона юзера"
          },
          "skype": {
            "type": "string",
            "description": "skype юзера"
          }
        }
      },
      "ArrayOfUsers": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/User"
        }
      },
      "Subscription": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "id чата"
          },
          "channel_type": {
            "type": "string",
            "description": "тип чата"
          },
          "name": {
            "type": "string",
            "description": "Название чата (имя собеседника)"
          },
          "ctime": {
            "type": "string",
            "description": "время создания чата (iso)"
          },
          "utime": {
            "type": "string",
            "description": "время последнего изменения (iso)"
          },
          "owner": {
            "type": "string",
            "description": "создатель чата"
          },
          "tail": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/Tail"
            }
          },
          "description": {
            "type": "string",
            "description": "описание чата (для диалогов - название фирмы)"
          },
          "users": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "alias участника (c contact_id)"
            }
          },
          "partner": {
            "type": "string",
            "description": "id партнера (без contact_id)"
          },
          "partner_id": {
            "type": "string",
            "description": "id партнера (c contact_id)"
          },
          "partner_full": {
            "type": "string",
            "description": "alias партнера (c contact_id)"
          },
          "count": {
            "type": "integer",
            "description": "количество учасчтников группового чата (для диалогов - null)"
          },
          "dts": {
            "type": "integer",
            "description": "timestamp последней очистки сообщений"
          },
          "unread": {
            "type": "string",
            "description": "количество непрочитанных сообщений"
          },
          "user": {
            "type": "string",
            "description": "id юзера (c contact_id)"
          },
          "uts": {
            "type": "integer",
            "description": "timestamp последнего изменения"
          },
          "short_url": {
            "type": "string",
            "description": "короткий хэш для группового чата, используется в ссылке для приглашения, содерижтся только в подписке админа"
          }
        }
      },
      "ArrayOfSubscriptions": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Subscription"
        }
      },
      "Message": {
        "type": "object",
        "properties": {
          "channel": {
            "type": "string",
            "description": "id чата"
          },
          "delivered": {
            "type": "boolean",
            "description": "доставлено/недоставлено"
          },
          "stamp": {
            "type": "string",
            "description": "таймстемп (isoformat) сообщения"
          },
          "text": {
            "type": "string",
            "description": "текст сообщения"
          },
          "ts": {
            "type": "integer",
            "description": "таймстемп (unix) сообщения"
          },
          "id": {
            "type": "string",
            "description": "id сообщения"
          },
          "user": {
            "type": "string",
            "description": "id отправителя, отстутствует в системных событиях"
          },
          "event": {
            "type": "string",
            "enum": [
              "join",
              "exclude",
              "quit",
              "invite",
              "create",
              "system_message"
            ],
            "description": "тип системного события"
          },
          "from": {
            "type": "string",
            "description": "Имя отправителя сообщения"
          },
          "document": {
            "type": "string",
            "description": "ссылка на документ в атидоках",
            "example": "/document/07a940594fdb4866aa9f8f48c192632d/"
          },
          "document_mimetype": {
            "type": "string"
          },
          "document_size": {
            "type": "integer"
          },
          "file_id": {
            "type": "string",
            "description": "id загруженного в filestorage файла"
          },
          "file_mimetype": {
            "type": "string"
          },
          "file_name": {
            "type": "string"
          },
          "file_size": {
            "type": "integer"
          }
        }
      },
      "Tail": {
        "type": "object",
        "properties": {
          "text": {
            "type": "string",
            "description": "текст сообщения (в случае картинки или файла - название объекта)"
          },
          "ts": {
            "type": "integer",
            "description": "таймстемп (unix) сообщения"
          },
          "user": {
            "type": "string",
            "description": "id отправителя, отстутствует в системных событиях"
          },
          "from": {
            "type": "string",
            "description": "имя отправителя сообщения"
          },
          "file_name": {
            "type": "string",
            "description": "имя файла (если есть)"
          },
          "image_name": {
            "type": "string",
            "description": "имя картинки (если есть)"
          }
        }
      },
      "ArrayOfMessages": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Message"
        }
      }
    },
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Authorization: Bearer {authorizationToken}"
      }
    }
  }
}