openapi: 3.0.3
info:
  title: omnichat
  version: 1.0.1784211198183
  description: Сервис omnichat
  license:
    name: CC BY-NC-ND 4.0
    url: https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md
tags:
  - name: auth(auth)
    description: Методы auth. Требуют авторизацию. Доступны из интернета
  - name: credentials(auth)
    description: Методы credentials. Требуют авторизацию. Доступны из интернета
  - name: system(public)
    description: Методы system. Не требуют авторизацию. Доступны из интернета
paths:
  /omnichat/api/v1/auth:
    get:
      summary: |-
        Метод получения хешированной инормации о пользователе.
        Метод доступен для: master, employee
      operationId: OmnichatService_GetAuth
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetAuthResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - auth(auth)
      security:
        - oauth2:
            - omnichat:read
            - omnichat:edit
          bearerHttp: []
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
  /omnichat/api/v1/credentials:
    post:
      summary: |-
        Метод получение реквизитов для авторизации в Omnichat.
        Метод доступен для: master, employee, owner
      operationId: CredentialsService_PostCredentials
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostCredentialsResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostCredentialsResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostCredentialsResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostCredentialsRequest"
        required: true
      tags:
        - credentials(auth)
      security:
        - oauth2:
            - omnichat:edit
          bearerHttp: []
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
  /omnichat/api/v1/system/status:
    get:
      summary: |-
        Метод получения статуса сервиса.
        Не требует авторизации
      operationId: SystemService_GetSystemStatus
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetSystemStatusResponse"
        "400":
          description: Ошибка
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      tags:
        - system(public)
      parameters:
        - in: header
          name: X-Request-Id
          schema:
            type: string
            format: uuid
          description: Уникальный идентификатор запроса. Создаётся клиентом на каждый запрос
        - in: header
          name: X-Device-Id
          schema:
            type: string
          description: Уникальный идентификатор устройства. Создаётся клиентом при первом
            запуске приложения. Если есть способ однозначно узнать идентификатор
            устройства, то создаётся на основе него и остаётся неизменным после
            переустановки приложения
        - in: header
          name: X-Api-Key
          schema:
            type: string
          description: Уникальный ключ для партнера. Создается администратором и
            передается партнерам.
        - in: header
          name: Canary
          schema:
            type: string
          description: Параметр балансировки запроса. Если для заголовка запроса
            установлено значение always, он будет перенаправлен на канареечный
            деплой. Если для заголовка установлено значение never, он никогда не
            будет перенаправлен на канареечный деплой
components:
  schemas:
    ErrorAppNameUnsupported:
      type: object
      title: Переданное название приложения не поддерживается
    PostCredentialsResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        appNameUnsupported:
          title: Переданное название приложения не поддерживается
          allOf:
            - $ref: "#/components/schemas/ErrorAppNameUnsupported"
      title: Ошибка запроса получения хешированной информации о пользователе
    protobufAny:
      type: object
      properties:
        "@type":
          type: string
      additionalProperties: {}
      title: Произвольный JSON
    rpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            $ref: "#/components/schemas/protobufAny"
      title: Ошибка транспортного слоя
    v1Auth:
      type: object
      properties:
        struct:
          type: string
          title: Закодированные клиентские данные
        hash:
          type: string
          title: Сгенерированный hash
      title: Захешированные данные о пользователе
      required:
        - struct
        - hash
    v1ClientMetadata:
      type: object
      properties:
        appVersion:
          type: string
          title: |-
            Версия приложения.
            # Диапазон: 1..128
        osVersion:
          type: string
          title: |-
            Версия операционной системы.
            # Диапазон: 1..128
        deviceModel:
          type: string
          title: |-
            Модель устройства.
            # Диапазон: 1..128
        appName:
          type: string
          title: >-
            Название приложения.

            Для разных приложений мы можем использовать разные tenantId и channel_id, сопоставление хранится в конфиге сервиса
      title: Метаданные клиента
      required:
        - appName
    v1Credentials:
      type: object
      properties:
        payload:
          type: string
          title: >-
            Закодированные в base64 клиентские данные.

            Состав: appVersion, os, deviceModel, tenantId, login, phone, email, group_id, address, лицевые счета
        hash:
          type: string
          title: HMAC-подпись от payload (клиентских данных)
        channelId:
          type: integer
          format: int32
          title: |-
            Идентификатор канала в omnichat.
            Определяется исходя из типа приложения
      title: Реквезиты для авторизации в omnichat
      required:
        - payload
        - hash
        - channelId
    v1GetAuthResponse:
      type: object
      properties:
        data:
          title: Омничат
          allOf:
            - $ref: "#/components/schemas/v1Auth"
      title: Ответ на запрос получения хешированной информации о пользователе
    v1GetSystemStatusResponse:
      type: object
      title: Ответ на запрос проверки доступности сервиса
    v1PostCredentialsRequest:
      type: object
      properties:
        clientMetadata:
          title: Метаданные клиента
          allOf:
            - $ref: "#/components/schemas/v1ClientMetadata"
      title: Запрос реквезитов для авторизации в Omnichat
      required:
        - clientMetadata
    v1PostCredentialsResponse:
      type: object
      properties:
        data:
          title: Реквизиты
          allOf:
            - $ref: "#/components/schemas/v1Credentials"
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/PostCredentialsResponseError"
      title: Ответ на запрос реквезитов для авторизации в Omnichat
    v1ValidationError:
      type: object
      properties:
        path:
          type: string
          title: Путь к полю в формате наименования прото
        message:
          type: string
          title: Валидационное сообщение
      title: |-
        Ошибки валидации.
        Эти проверки выполняются до обращения в базу данных
      required:
        - path
        - message
  securitySchemes:
    bearerHttp:
      type: http
      scheme: bearer
      bearerFormat: JWT
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://oauth2-staging.k8s.key.rt.ru/oauth2/token
          scopes:
            omnichat:edit: Предоставляет полный доступ в сервис omnichat
            omnichat:read: Предоставляет доступ на чтение данных из сервиса omnichat
servers:
  - url: https://keyapis-staging.k8s.key.rt.ru
    description: staging
  - url: https://{feature}.k8s.key.rt.ru/
    description: https feature
    variables:
      feature:
        default: ""
        description: Feature name
  - url: http://{feature}.k8s.key.rt.ru/
    description: http feature
    variables:
      feature:
        default: ""
        description: Feature name
  - url: https://localhost:3001
    description: localhost
  - url: https://keyapis.key.rt.ru
    description: production
