openapi: 3.0.3
info:
  title: identity_b2b
  version: 1.0.1785741092963
  description: Сервис identity_b2b
  license:
    name: CC BY-NC-ND 4.0
    url: https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md
tags:
  - name: authorization(public)
    description: Методы authorization. Не требуют авторизацию. Доступны из интернета
  - name: system(public)
    description: Методы system. Не требуют авторизацию. Доступны из интернета
paths:
  /identity_b2b/api/v1/authorization/check_code:
    post:
      summary: |-
        Метод проверки кода двухфакторной авторизации и активация сессии.
        Не требует авторизации
      operationId: AuthorizationB2bService_PostAuthorizationCheckCode
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationCheckCodeResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationCheckCodeResponse"
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationCheckCodeResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostAuthorizationCheckCodeRequest"
        required: true
      tags:
        - authorization(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, он никогда не
            будет перенаправлен на канареечный деплой
  /identity_b2b/api/v1/authorization/login:
    post:
      summary: |-
        Метод авторизации по ОТП-коду для B2B.
        Не требует авторизации
      operationId: AuthorizationB2bService_PostAuthorizationLogin
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationLoginResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationLoginResponse"
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationLoginResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostAuthorizationLoginRequest"
        required: true
      tags:
        - authorization(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, он никогда не
            будет перенаправлен на канареечный деплой
  /identity_b2b/api/v1/authorization/login_by_password:
    post:
      summary: |-
        Метод авторизации для B2B по паролю.
        Не требует авторизации
      operationId: AuthorizationB2bService_PostAuthorizationLoginByPassword
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationLoginByPasswordResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationLoginByPasswordResponse"
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationLoginByPasswordResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostAuthorizationLoginByPasswordRequest"
        required: true
      tags:
        - authorization(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, он никогда не
            будет перенаправлен на канареечный деплой
  /identity_b2b/api/v1/authorization/send_code:
    post:
      summary: |-
        Метод запроса ОТП-кода для B2B.
        Не требует авторизации
      operationId: AuthorizationB2bService_PostAuthorizationSendCode
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationSendCodeResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationSendCodeResponse"
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostAuthorizationSendCodeResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostAuthorizationSendCodeRequest"
        required: true
      tags:
        - authorization(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, он никогда не
            будет перенаправлен на канареечный деплой
  /identity_b2b/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:
    ErrorAddressNotFound:
      type: object
      title: Адрес для отправки кода не найден
    ErrorInvalidCode:
      type: object
      title: Неправильный ОТП-код
    ErrorLifeTimeExpired:
      type: object
      title: Код истек
    ErrorNoAttempts:
      type: object
      title: Попыток больше нет
    ErrorWrongAnswer:
      type: object
      title: Некорректный ответ на капчу
    KeyErrorUserCreation:
      type: object
      title: Ошибка создания пользователя
    SsoErrorIntervalExceeded:
      type: object
      title: Превышен интервал отправки кода подтверждения
    SsoErrorUserIsBlocked:
      type: object
      title: Пользователь заблокирован
    SsoErrorUserIsTemporaryBlocked:
      type: object
      title: Пользователь временно заблокирован
    SsoErrorUserNotFound:
      type: object
      title: Пользователь не найден
    SsoErrorWrongCredentials:
      type: object
      properties:
        captcha:
          title: Капча
          allOf:
            - $ref: "#/components/schemas/v1Captcha"
      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: Ошибка транспортного слоя
    v1Captcha:
      type: object
      properties:
        id:
          type: string
          title: Идентификатор капчи
        url:
          type: string
          title: Ссылка на капчу
      title: Капча
      required:
        - id
        - url
    v1CaptchaAnswer:
      type: object
      properties:
        id:
          type: string
          title: Идентификатор капчи
        code:
          type: string
          title: Ответ на капчу
      title: Ответ на капчу
      required:
        - id
        - code
    v1CaptchaAnswerError:
      type: object
      properties:
        captcha:
          title: Капча
          allOf:
            - $ref: "#/components/schemas/v1Captcha"
        wrongAnswer:
          title: Некорректный ответ на капчу
          allOf:
            - $ref: "#/components/schemas/ErrorWrongAnswer"
      title: Ошибка ответа на капчу
    v1Data2fa:
      type: object
      properties:
        sessionId:
          type: string
          title: Идентификатор сессии двухфакторной аутентификации
        actionId:
          type: string
          title: Идентификатор процесса двухфакторной аутентификации
        codeId:
          type: string
          title: Идентификатор кода двухфакторной авторизации
        timeout:
          type: integer
          format: int32
          title: Время в секундах, оставшееся до возможности отправки следующего кода
      title: Данные для двухфакторной аутентификации
      required:
        - sessionId
        - actionId
        - codeId
        - timeout
    v1GetSystemStatusResponse:
      type: object
      title: Ответ на запрос проверки доступности сервиса
    v1KeyError:
      type: object
      properties:
        userCreation:
          title: Ошибка создания пользователя
          allOf:
            - $ref: "#/components/schemas/KeyErrorUserCreation"
      title: Ошибки сервисов ключа
    v1OtpCode:
      type: object
      properties:
        codeId:
          type: string
          title: Идентификатор ОТП-кода
        timeout:
          type: integer
          format: int32
          title: Время в секундах, оставшееся до возможности отправки следующего кода
      title: Информация о вводе ОТП-кода
      required:
        - codeId
        - timeout
    v1OtpCodeError:
      type: object
      properties:
        lifeTimeExpired:
          title: Код истек
          allOf:
            - $ref: "#/components/schemas/ErrorLifeTimeExpired"
        noAttempts:
          title: Попыток больше нет
          allOf:
            - $ref: "#/components/schemas/ErrorNoAttempts"
        addressNotFound:
          title: |-
            Адрес для отправки кода не найден.
            В текущей реализации, эту ошибку невозможно получить
          allOf:
            - $ref: "#/components/schemas/ErrorAddressNotFound"
        invalidCode:
          title: Неправильный ОТП-код
          allOf:
            - $ref: "#/components/schemas/ErrorInvalidCode"
      title: Ошибка ответа на капчу
    v1PostAuthorizationCheckCodeRequest:
      type: object
      properties:
        sessionId:
          type: string
          title: Идентификатор сессии двухфакторной аутентификации
        actionId:
          type: string
          title: Идентификатор процесса двухфакторной аутентификации
        codeId:
          type: string
          title: Идентификатор кода двухфакторной авторизации
        code:
          type: string
          title: Код, введенный пользователем
      title: Запрос проверки кода двухфакторной авторизации и активация сессии для B2B
      required:
        - sessionId
        - actionId
        - codeId
        - code
    v1PostAuthorizationCheckCodeResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostAuthorizationCheckCodeResponseError"
        data:
          title: Токен пользователя
          allOf:
            - $ref: "#/components/schemas/v1UserToken"
      title: Ответ на запрос проверки кода двухфакторной авторизации и активация
        сессии для B2B
    v1PostAuthorizationCheckCodeResponseError:
      type: object
      properties:
        sso:
          title: Ошибка из ССО
          allOf:
            - $ref: "#/components/schemas/v1SsoError"
        key:
          title: Ошибка из сервисов ключа
          allOf:
            - $ref: "#/components/schemas/v1KeyError"
        otpCode:
          title: Ошибка кода подтверждения
          allOf:
            - $ref: "#/components/schemas/v1OtpCodeError"
      title: Ошибка запроса авторизации по паролю пользователя
    v1PostAuthorizationLoginByPasswordRequest:
      type: object
      properties:
        password:
          type: string
          title: Пароль
        captchaAnswer:
          title: Ответ на капчу
          allOf:
            - $ref: "#/components/schemas/v1CaptchaAnswer"
        phoneNumber:
          type: string
          title: Номер телефона
        email:
          type: string
          title: Электронная почта
        login:
          type: string
          title: Логин
      title: Запрос на авторизацию по паролю для B2B
      required:
        - password
    v1PostAuthorizationLoginByPasswordResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostAuthorizationLoginByPasswordResponseError"
        data:
          title: Токен пользователя
          allOf:
            - $ref: "#/components/schemas/v1UserToken"
        data2fa:
          title: Данные для двухфакторной аутентификации
          allOf:
            - $ref: "#/components/schemas/v1Data2fa"
      title: Ответ на запрос об авторизации по паролю пользователя B2B
    v1PostAuthorizationLoginByPasswordResponseError:
      type: object
      properties:
        captchaAnswer:
          title: Ошибка капчи
          allOf:
            - $ref: "#/components/schemas/v1CaptchaAnswerError"
        sso:
          title: Ошибка из ССО
          allOf:
            - $ref: "#/components/schemas/v1SsoError"
        key:
          title: Ошибка из сервисов ключа
          allOf:
            - $ref: "#/components/schemas/v1KeyError"
        otpCode:
          title: Ошибка отп-кода
          allOf:
            - $ref: "#/components/schemas/v1OtpCodeError"
      title: Ошибка запроса авторизации по паролю пользователя
    v1PostAuthorizationLoginRequest:
      type: object
      properties:
        codeId:
          type: string
          title: Идентификатор ОТП-кода
        code:
          type: string
          title: Значение ОТП-кода
      title: Запрос на авторизацию по ОТП-коду для B2B
      required:
        - codeId
        - code
    v1PostAuthorizationLoginResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostAuthorizationLoginResponseError"
        data:
          title: Токен пользователя
          allOf:
            - $ref: "#/components/schemas/v1UserToken"
      title: Ответ на запрос об авторизации пользователя B2B
    v1PostAuthorizationLoginResponseError:
      type: object
      properties:
        otpCode:
          title: Ошибка отп-кода
          allOf:
            - $ref: "#/components/schemas/v1OtpCodeError"
        sso:
          title: Ошибка из ССО
          allOf:
            - $ref: "#/components/schemas/v1SsoError"
        key:
          title: Ошибка из сервисов ключа
          allOf:
            - $ref: "#/components/schemas/v1KeyError"
      title: Ошибка запроса авторизации пользователя
    v1PostAuthorizationSendCodeRequest:
      type: object
      properties:
        captchaAnswer:
          title: Ответ на капчу
          allOf:
            - $ref: "#/components/schemas/v1CaptchaAnswer"
        phoneNumber:
          type: string
          title: Номер телефона
        email:
          type: string
          title: Электронная почта
      title: Запрос на отправку ОТП-кода для B2B
    v1PostAuthorizationSendCodeResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostAuthorizationSendCodeResponseError"
        data:
          title: Информация об ОТП-коде
          allOf:
            - $ref: "#/components/schemas/v1OtpCode"
      title: Ответ на запрос на отправку ОТП-кода для B2B
    v1PostAuthorizationSendCodeResponseError:
      type: object
      properties:
        captchaAnswer:
          title: Ошибка ответа с капчей
          allOf:
            - $ref: "#/components/schemas/v1CaptchaAnswerError"
        sso:
          title: Ошибка из ССО
          allOf:
            - $ref: "#/components/schemas/v1SsoError"
      title: Ошибка запроса на отправку ОТП-кода
    v1SsoError:
      type: object
      properties:
        userIsTemporaryBlocked:
          title: Пользователь временно заблокирован
          allOf:
            - $ref: "#/components/schemas/SsoErrorUserIsTemporaryBlocked"
        userNotFound:
          title: Пользователь не найден
          allOf:
            - $ref: "#/components/schemas/SsoErrorUserNotFound"
        wrongCredentials:
          title: Неверный пароль
          allOf:
            - $ref: "#/components/schemas/SsoErrorWrongCredentials"
        userIsBlocked:
          title: Пользователь заблокирован
          allOf:
            - $ref: "#/components/schemas/SsoErrorUserIsBlocked"
        intervalExceeded:
          title: Превышен интервал отправки кода подтверждения
          allOf:
            - $ref: "#/components/schemas/SsoErrorIntervalExceeded"
      title: Ошибки из ССО
    v1UserToken:
      type: object
      properties:
        accessToken:
          type: string
          title: Токен
        expiredAt:
          type: string
          format: date-time
          title: Окончание действия токена
      title: Информация о токене пользователя
      required:
        - accessToken
        - expiredAt
  securitySchemes:
    bearerHttp:
      type: http
      scheme: bearer
      bearerFormat: JWT
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://oauth2-staging.k8s.key.rt.ru/oauth2/token
          scopes:
            identity_b2b:edit: Предоставляет полный доступ в сервис identity_b2b
            identity_b2b:read: Предоставляет доступ на чтение данных из сервиса identity_b2b
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: http://localhost:3001
    description: localhost
  - url: https://keyapis.key.rt.ru
    description: production
