openapi: 3.0.3
info:
  title: invoice
  version: 1.0.1785741496640
  description: Сервис invoice
  license:
    name: CC BY-NC-ND 4.0
    url: https://gitlab.infra.rtkit.dev/openapi/key/raw/main/LICENCE.md
tags:
  - name: invoice(auth)
    description: Методы invoice. Требуют авторизацию. Доступны из интернета
  - name: pay_method(auth)
    description: Методы pay_method. Требуют авторизацию. Доступны из интернета
  - name: invoice(internal public)
    description: Внутренние методы. Не требуют авторизацию. Доступны только во
      внутренней сети
paths:
  /invoice/api/v1/invoice:
    post:
      summary: |-
        Метод создания платежа.
        Создание платежа в своей и внешней платежной системе.
        Метод доступен для: service
      operationId: InvoiceService_CreateInvoice
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1CreateInvoiceResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1CreateInvoiceResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1CreateInvoiceResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1CreateInvoiceRequest"
        required: true
      tags:
        - invoice(auth)
      security:
        - oauth2:
            - invoice: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, он никогда не
            будет перенаправлен на канареечный деплой
  /invoice/api/v1/invoice/count:
    get:
      summary: |-
        Метод получения количества платежей.
        Для master в параметр filter.user_id подставляется user_id из токена.
        Метод доступен для: admin, service, master, ltp_first
      operationId: InvoiceService_GetInvoiceCount
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetInvoiceCountResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.userId
          description: Идентификатор пользователя
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: filter.invoiceStatusType
          description: |-
            Статус платежа

             - INVOICE_STATUS_TYPE_UNKNOWN: Значение не указано
             - PLANNED: Создан, ожидает подтверждения
             - PENDING: Ожидает оплаты
             - ERROR: Ошибка оплаты
             - PAID: Оплачен
             - CANCELLED: Отменен
          in: query
          required: false
          schema:
            type: string
            enum:
              - PLANNED
              - PENDING
              - ERROR
              - PAID
              - CANCELLED
        - 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, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - invoice(auth)
      security:
        - oauth2:
            - invoice:read
            - invoice:edit
          bearerHttp: []
  /invoice/api/v1/invoice/list:
    get:
      summary: >-
        Метод получения списка платежей.

        Для master доступно получение только собственных платежей, если параметр filter.user_id передан и не совпадает с user_id из токена, возвращается ошибка доступа.

        Метод доступен для: admin, service, master, ltp_first
      operationId: InvoiceService_GetInvoiceList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetInvoiceListResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetInvoiceListResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetInvoiceListResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: filter.userId
          description: Идентификатор пользователя
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: filter.invoiceStatusType
          description: |-
            Статус платежа

             - INVOICE_STATUS_TYPE_UNKNOWN: Значение не указано
             - PLANNED: Создан, ожидает подтверждения
             - PENDING: Ожидает оплаты
             - ERROR: Ошибка оплаты
             - PAID: Оплачен
             - CANCELLED: Отменен
          in: query
          required: false
          schema:
            type: string
            enum:
              - PLANNED
              - PENDING
              - ERROR
              - PAID
              - CANCELLED
        - name: paging.orderByType
          description: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: PAID_AT

             - ORDER_BY_TYPE_UNKNOWN: Значение не указано
             - ID: По идентификатору
             - PAID_AT: По дате оплаты
             - CREATED_AT: По дате создания
          in: query
          required: false
          schema:
            type: string
            enum:
              - ID
              - PAID_AT
              - CREATED_AT
        - name: paging.directionType
          description: |-
            Тип направления сортировки.
            # По умолчанию: DESC

             - DIRECTION_TYPE_UNKNOWN: Значение не указано
             - DESC: От большего к меньшему
             - ASC: От меньшего к большему
          in: query
          required: false
          schema:
            type: string
            enum:
              - DESC
              - ASC
        - name: paging.limit
          description: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - name: paging.offset
          description: |-
            Сдвиг.
            # Диапазон: 0..2147483647
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - 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, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - invoice(auth)
      security:
        - oauth2:
            - invoice:read
            - invoice:edit
          bearerHttp: []
  "/invoice/api/v1/invoice/{invoiceId}":
    get:
      summary: |-
        Метод получения платежа.
        Для master доступно получение платежа только с user_id из токена.
        Метод доступен для: admin, service, master
      operationId: InvoiceService_GetInvoice
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetInvoiceResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetInvoiceResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetInvoiceResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: invoiceId
          description: |-
            Идентификатор платежа в Ключе.
            # Тип: Guid
          in: path
          required: true
          schema:
            type: string
        - 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, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - invoice(auth)
      security:
        - oauth2:
            - invoice:read
            - invoice:edit
          bearerHttp: []
  /invoice/api/v1/pay_method/bankcard:
    post:
      summary: |-
        Метод добавления способа оплаты с типом "Банковская карта".
        Добавляется банковская карта для пользователя из токена.
        Метод доступен для: master
      operationId: PayMethodService_PostPayMethodBankcard
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodBankcardResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodBankcardResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodBankcardResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostPayMethodBankcardRequest"
        required: true
      tags:
        - pay_method(auth)
      security:
        - oauth2:
            - invoice: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, он никогда не
            будет перенаправлен на канареечный деплой
  /invoice/api/v1/pay_method/list:
    get:
      summary: >-
        Метод получения списка способов оплаты.

        Для роли master возвращаются способы оплаты для пользователя из токена.

        Для роли service возвращаются способы оплаты пользователя, указанного в параметре запроса.

        Метод доступен для: service, master
      operationId: PayMethodService_GetPayMethodList
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1GetPayMethodListResponse"
        "400":
          description: Ошибка
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: userId
          description: Идентификатор пользователя
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - 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, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - pay_method(auth)
      security:
        - oauth2:
            - invoice:read
            - invoice:edit
          bearerHttp: []
  /invoice/api/v1/pay_method/sbp:
    post:
      summary: |-
        Метод добавления способа оплаты с типом "СБП".
        Добавляется СБП для пользователя из токена.
        Метод доступен для: master
      operationId: PayMethodService_PostPayMethodSbp
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodSbpResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodSbpResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodSbpResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostPayMethodSbpRequest"
        required: true
      tags:
        - pay_method(auth)
      security:
        - oauth2:
            - invoice: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, он никогда не
            будет перенаправлен на канареечный деплой
  "/invoice/api/v1/pay_method/{payMethodId}":
    delete:
      summary: |-
        Метод удаления способа оплаты.
        Для пользователя с типом master значение user_id берется из токена.
        Метод доступен для: service, master
      operationId: PayMethodService_DeletePayMethod
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeletePayMethodResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeletePayMethodResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1DeletePayMethodResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: payMethodId
          description: Идентификатор способа оплаты
          in: path
          required: true
          schema:
            type: string
        - name: userId
          description: |-
            Идентификатор пользователя.
            # Диапазон: 0..2147483647
          in: query
          required: false
          schema:
            type: integer
            format: int32
        - 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, он никогда не
            будет перенаправлен на канареечный деплой
      tags:
        - pay_method(auth)
      security:
        - oauth2:
            - invoice:edit
          bearerHttp: []
  "/invoice/api/v1/pay_method/{payMethodId}/default":
    post:
      summary: |-
        Метод установки способа оплаты по умолчанию.
        Изменяются способы оплаты для пользователя из токена.
        Метод доступен для: master
      operationId: PayMethodService_PostPayMethodDefault
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodDefaultResponse"
        "400":
          description: Ошибка
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodDefaultResponse"
        "401":
          description: Запрос не авторизован
        "403":
          description: В доступе отказано
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostPayMethodDefaultResponse"
        default:
          description: Ошибки транспортного слоя
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      parameters:
        - name: payMethodId
          description: Идентификатор способа оплаты
          in: path
          required: true
          schema:
            type: string
        - 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, он никогда не
            будет перенаправлен на канареечный деплой
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: Запрос установки способа оплаты по умолчанию
        required: true
      tags:
        - pay_method(auth)
      security:
        - oauth2:
            - invoice:edit
          bearerHttp: []
  /invoice/internal/api/v1/invoice/confirm:
    post:
      summary: |-
        Метод подтверждения платежа (вызывается со стороны внешней системы).
        Не требует авторизации
      operationId: InvoiceService_PostInvoiceConfirm
      responses:
        "200":
          description: Успешный ответ
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/v1PostInvoiceConfirmResponse"
        "400":
          description: Ошибка
        "409":
          description: В базе данных хранится более новая версия объекта
        "500":
          description: Внутренняя ошибка сервиса
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/rpcStatus"
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/v1PostInvoiceConfirmRequest"
        required: true
      tags:
        - invoice(internal 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:
    ErrorMissingUserContacts:
      type: object
      title: Должно быть означено поле phone_number, либо поле email
    ErrorUserIdRequiredError:
      type: object
      title: |-
        Поле user_id обязательно для пользователей с ролями:
        - service
    ExternalErrorExternalSystemError:
      type: object
      title: Запрос к внешней системе вернул ошибку или прекращен по таймауту
    InvoiceExternalError:
      type: object
      properties:
        externalSystemError:
          title: Запрос к внешней системе вернул ошибку или прекращен по таймауту
          allOf:
            - $ref: "#/components/schemas/ExternalErrorExternalSystemError"
      title: Ошибки внешней системы
    InvoiceInvoiceStatusType:
      type: string
      enum:
        - PLANNED
        - PENDING
        - ERROR
        - PAID
        - CANCELLED
      description: |-
        - INVOICE_STATUS_TYPE_UNKNOWN: Значение не указано
         - PLANNED: Создан, ожидает подтверждения
         - PENDING: Ожидает оплаты
         - ERROR: Ошибка оплаты
         - PAID: Оплачен
         - CANCELLED: Отменен
      title: Справочник типов статусов оплаты счёта
    InvoicePagingDirectionType:
      type: string
      enum:
        - DESC
        - ASC
      description: |-
        - DIRECTION_TYPE_UNKNOWN: Значение не указано
         - DESC: От большего к меньшему
         - ASC: От меньшего к большему
      title: |-
        Справочник типов направлений сортировки.
        # Тип: byte
    InvoicePagingOrderByType:
      type: string
      enum:
        - ID
        - PAID_AT
        - CREATED_AT
      description: |-
        - ORDER_BY_TYPE_UNKNOWN: Значение не указано
         - ID: По идентификатору
         - PAID_AT: По дате оплаты
         - CREATED_AT: По дате создания
      title: |-
        Справочник типов значений сортировки.
        # Тип: byte
    InvoicePayInterfaceType:
      type: string
      enum:
        - GUI
        - M2M
      description: >-
        - PAY_INTERFACE_TYPE_UNKNOWN: Значение не указано
         - GUI: Оплата через интерфейс предпроцессинга
         - M2M: Оплата с использованием ранее созданного способа платежа, настроенного по умолчанию
      title: Справочник методов платежа
    InvoicePaywayType:
      type: string
      enum:
        - BANK_CARD
        - SBP
        - SBER_PAY
      description: |-
        - PAYWAY_TYPE_UNKNOWN: Значение не указано
         - BANK_CARD: Банковская карта
         - SBP: Сервис быстрых платежей
         - SBER_PAY: Связка Сбербанка
      title: Справочник типов платежных средств
    InvoicePosition:
      type: object
      properties:
        id:
          type: string
          title: |-
            Идентификатор позиции.
            # Тип: Guid
        invoiceId:
          type: string
          title: |-
            Идентификатор платежа.
            # Тип: Guid
        title:
          type: string
          title: Название позиции
        category:
          type: string
          title: Категория позиции (='subscription')
        amount:
          type: number
          format: float
          title: |-
            Цена в рублях.
            Число должно быть больше 0
        createdAt:
          type: string
          format: date-time
          title: |-
            Дата создания позиции платежа.
            # Тип: DateTime
          readOnly: true
        updatedAt:
          type: string
          format: date-time
          title: |-
            Дата обновления позиции платежа.
            # Тип: DateTime
          readOnly: true
        mrfId:
          type: integer
          format: int32
          title: Идентификатор МРФ
        rfId:
          type: integer
          format: int32
          title: Идентификатор РФ
        instanceId:
          type: string
          title: |-
            Идентификатор экземпляра оплачиваемой подписки.
            # Тип: Guid
        offeringId:
          type: integer
          format: int32
          title: Идентификатор предложения оплачиваемой подписки
        dueDateAt:
          type: string
          format: date-time
          title: Срок окончания оплачиваемого периода
        svcTypeId:
          type: string
          title: Идентификатор получателя платежа
        isDiscount:
          type: boolean
          title: Признак скидки
      title: Позиция счета
      required:
        - invoiceId
        - title
        - category
        - amount
        - mrfId
        - rfId
        - instanceId
        - offeringId
    InvoiceSavingError:
      type: object
      properties:
        invoiceAlreadyExists:
          title: У пользователя уже есть платеж со статусом PENDING
          allOf:
            - $ref: "#/components/schemas/SavingErrorInvoiceAlreadyExists"
      title: >-
        Ошибка сохранения.

        Эти проверки выполняются при работе с базой данных и сторонними сервисами
    PayMethodStatusType:
      type: string
      enum:
        - VALID
        - EXPIRED
        - BLOCKED
      description: |-
        - STATUS_TYPE_UNKNOWN: Значение не указано
         - VALID: Исправный
         - EXPIRED: Истекший
         - BLOCKED: Заблокированный
      title: Статус способа оплаты
    PostInvoiceConfirmRequestCard:
      type: object
      properties:
        esppCardId:
          type: integer
          format: int32
          title: |-
            Идентификатор платежного средства во внешней системы.
            Возвращается в случае успешной привязки БК к УЗ
        cardNum:
          type: string
          title: |-
            Номер платежного средства.
            Маскированный номер карты. Например: 123456******7890
        cardType:
          type: string
          title: Тип банковской карты
        bankName:
          type: string
          title: >-
            Банк-эмитент.

            Наименование банка-эмитента. Процессинг может вернуть значение "НЕ ЗАДАВАЛСЯ".

            В этом случае рекомендуется не отображать эту информацию для пользователя
      title: Структура с информацией о карте плательщика
    SavingErrorInvoiceAlreadyExists:
      type: object
      title: У пользователя уже есть платеж со статусом PENDING
    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: Ошибка транспортного слоя
    v1CreateInvoiceRequest:
      type: object
      properties:
        userId:
          type: integer
          format: int32
          title: Идентификатор пользователя
        positions:
          type: array
          items:
            $ref: "#/components/schemas/InvoicePosition"
          title: Позиция счета
        payInterfaceType:
          title: Метод платежа
          allOf:
            - $ref: "#/components/schemas/InvoicePayInterfaceType"
        paywayType:
          title: |-
            Способ оплаты.
            По умолчанию: BANK_CARD
          allOf:
            - $ref: "#/components/schemas/InvoicePaywayType"
        returnUrl:
          type: string
          title: |-
            Ссылка для перехода после оплаты.
            Если не передан подставится значение по умолчанию
        phoneNumber:
          type: string
          title: |-
            Номер телефона.
            Должно быть означено поле phone_number, либо поле email
        email:
          type: string
          title: |-
            Электронная почта.
            Должно быть означено поле phone_number, либо поле email
        title:
          type: string
          title: |-
            Описание платежа.
            По умолчанию подставляется "Счёт от {DD.MM.YYYY}г."
      title: Запрос на создание платежа
      required:
        - userId
        - positions
        - payInterfaceType
    v1CreateInvoiceResponse:
      type: object
      properties:
        error:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1CreateInvoiceResponseError"
        data:
          title: Платеж
          allOf:
            - $ref: "#/components/schemas/v1Invoice"
      title: Ответ на запрос создание платежа
    v1CreateInvoiceResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        missingUserContacts:
          title: Должно быть означено поле phone_number, либо поле email
          allOf:
            - $ref: "#/components/schemas/ErrorMissingUserContacts"
        external:
          title: Ошибки внешней системы
          allOf:
            - $ref: "#/components/schemas/InvoiceExternalError"
        saving:
          title: Ошибка сохранения
          allOf:
            - $ref: "#/components/schemas/InvoiceSavingError"
      title: Ошибка запроса
    v1DeletePayMethodResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1DeletePayMethodResponseError"
      title: Ответ на запрос удаления способа оплаты
    v1DeletePayMethodResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
        userIdRequired:
          title: Поле user_id обязательно
          allOf:
            - $ref: "#/components/schemas/ErrorUserIdRequiredError"
      title: Ошибка запроса
    v1GetInvoiceCountResponse:
      type: object
      properties:
        data:
          type: integer
          format: int32
          title: Количество
      title: Ответ на запрос получения количества платежей
    v1GetInvoiceListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1Invoice"
          title: Платежи
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetInvoiceListResponseError"
      title: Ответ на запрос получения списка платежей
    v1GetInvoiceListResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса на получение списка платежей
    v1GetInvoiceResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1GetInvoiceResponseError"
        data:
          title: Платеж
          allOf:
            - $ref: "#/components/schemas/v1Invoice"
      title: Ответ на запрос получения платежа
    v1GetInvoiceResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1GetPayMethodListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/v1PayMethod"
          title: Способы оплаты
      title: Ответ на запрос получения списка способов оплаты
    v1Invoice:
      type: object
      properties:
        id:
          type: string
          title: |-
            Идентификатор платежа.
            # Тип: Guid
        title:
          type: string
          title: Описание платежа
        userId:
          type: integer
          format: int32
          title: Идентификатор пользователя
        invoiceStatusType:
          title: Статус платежа
          allOf:
            - $ref: "#/components/schemas/InvoiceInvoiceStatusType"
        createdAt:
          type: string
          format: date-time
          title: |-
            Дата создания платежа.
            # Тип: DateTime
        updatedAt:
          type: string
          format: date-time
          title: |-
            Дата обновления платежа.
            # Тип: DateTime
        positions:
          type: array
          items:
            $ref: "#/components/schemas/InvoicePosition"
          title: Позиция счета
        payInterfaceType:
          title: Метод платежа
          allOf:
            - $ref: "#/components/schemas/InvoicePayInterfaceType"
        paywayType:
          title: Способ оплаты
          allOf:
            - $ref: "#/components/schemas/InvoicePaywayType"
        statusChangedAt:
          type: string
          format: date-time
          title: |-
            Дата изменения статуса платежа.
            # Тип: DateTime
        paidAt:
          type: string
          format: date-time
          title: |-
            Дата платежа.
            # Тип: DateTime
        payUrl:
          type: string
          title: Платежная ссылка
        paidByCardMasked:
          type: string
          title: Маскированный номер карты при платеже
        paidByCardEsppId:
          type: string
          title: Идентификатор платежного средства в внешней системы
        cardType:
          title: Тип банковской карты
          allOf:
            - $ref: "#/components/schemas/v1InvoiceCardType"
        esppReqStatus:
          type: integer
          format: int32
          title: Код ошибки внешней системы
        esppReqUserMsg:
          type: string
          title: Комментарий к статусу платежа из внешней системы
        esppInvoiceId:
          type: string
          title: Уникальный номер транзакции в внешней системы
        phoneNumber:
          type: string
          title: Номер телефона
        email:
          type: string
          title: Электронная почта
      title: Выставленный счёт
      required:
        - id
        - title
        - userId
        - invoiceStatusType
        - createdAt
        - updatedAt
        - positions
    v1InvoiceCardType:
      type: string
      enum:
        - VISA
        - EC_MC
        - DCL
        - JCB
        - AMEX
        - MIR
      description: |-
        - CARD_TYPE_UNKNOWN: Значение не указано
         - VISA: Карта VISA
         - EC_MC: Карта EuroCard/MasterCard
         - DCL: Карта DinersClub
         - JCB: Карта JCB
         - AMEX: Карта American Express
         - MIR: Платежная система "Мир"
      title: Справочник банковских карт
    v1InvoiceFilter:
      type: object
      properties:
        userId:
          type: integer
          format: int32
          title: Идентификатор пользователя
        invoiceStatusType:
          title: Статус платежа
          allOf:
            - $ref: "#/components/schemas/InvoiceInvoiceStatusType"
      title: Фильтр инвойсов
    v1InvoicePaging:
      type: object
      properties:
        orderByType:
          title: |-
            Тип значения сортировки.
            Если значение не передано, то будет взято значение по умолчанию.
            # По умолчанию: PAID_AT
          allOf:
            - $ref: "#/components/schemas/InvoicePagingOrderByType"
        directionType:
          title: |-
            Тип направления сортировки.
            # По умолчанию: DESC
          allOf:
            - $ref: "#/components/schemas/InvoicePagingDirectionType"
        limit:
          type: integer
          format: int32
          title: |-
            Количество записей на страницу.
            Если значение 0 (не передано), то будет взято значение по умолчанию.
            # Диапазон: 0..100.
            # По умолчанию: 20
        offset:
          type: integer
          format: int32
          title: |-
            Сдвиг.
            # Диапазон: 0..2147483647
      title: Постраничный вывод
    v1PayMethod:
      type: object
      properties:
        payMethodId:
          type: string
          title: Идентификатор способа оплаты
        userId:
          type: integer
          format: int32
          title: Идентификатор пользователя
        type:
          title: Тип способа оплаты
          allOf:
            - $ref: "#/components/schemas/v1PayMethodType"
        isActive:
          type: boolean
          title: Признак активной записи
        isDefault:
          type: boolean
          title: Способ оплаты по умолчанию
        payMethodContact:
          type: string
          title: Мобильный телефон, на который будут отправляться уведомления
        payMethodDescription:
          type: string
          title: Описание способа оплаты
        payMethodAlias:
          type: string
          title: Псевдоним способа оплаты
        cardType:
          title: Тип банковской карты
          readOnly: true
          allOf:
            - $ref: "#/components/schemas/v1PayMethodCardType"
        maskedNum:
          type: string
          title: Маскированный номер карты или идентификатора привязки счета СБП
          readOnly: true
        bankName:
          type: string
          title: Наименование банка
          readOnly: true
        isAuth:
          type: boolean
          title: Признак авторизации БК
          readOnly: true
        statusType:
          title: Статус способа оплаты
          readOnly: true
          allOf:
            - $ref: "#/components/schemas/PayMethodStatusType"
        registerAt:
          type: string
          format: date-time
          title: |-
            Дата регистрации способа оплаты.
            # Тип: DateTime
          readOnly: true
      title: Способ оплаты
      required:
        - payMethodId
        - userId
        - type
        - isActive
        - isDefault
    v1PayMethodCardType:
      type: string
      enum:
        - VISA
        - EC_MC
        - DCL
        - JCB
        - AMEX
        - MIR
      description: |-
        - CARD_TYPE_UNKNOWN: Значение не указано
         - VISA: Карта VISA
         - EC_MC: Карта EuroCard/MasterCard
         - DCL: Карта DinersClub
         - JCB: Карта JCB
         - AMEX: Карта American Express
         - MIR: Платежная система "Мир"
      title: Справочник типов банковских карт
    v1PayMethodType:
      type: string
      enum:
        - BANK_CARD
        - SBP
        - SBER_BIND
      description: |-
        - TYPE_UNKNOWN: Значение не указано
         - BANK_CARD: Банковская карта
         - SBP: Сервис быстрых платежей
         - SBER_BIND: Связка Сбербанка
      title: Справочник типов способов оплаты
    v1PostInvoiceConfirmRequest:
      type: object
      properties:
        srcPayId:
          type: string
          title: Идентификатор платежа в Ключе
        esppPayId:
          type: string
          title: Идентификатор платежа во внешней системе
        payStatus:
          type: integer
          format: int32
          title: Статус платежа из внешней системы
        reqType:
          type: string
          title: |-
            Тип запроса.
            Должно иметь значение "confirmPayment"
        amount:
          type: number
          format: float
          title: Сумма платежа в минимальных единицах валюты
        currency:
          type: string
          title: Код валюты платежа
        payMethod:
          type: string
          title: Код способа оплаты
        createTime:
          type: string
          format: date-time
          title: |-
            Дата регистрации платежа.
            # Тип: DateTime
        reqNote:
          type: string
          title: Комментарий или сообщение об ошибке
        reqUserMsg:
          type: string
          title: Сообщение, отображаемое пользователю
        payTime:
          type: string
          format: date-time
          title: Время фактической оплаты. Время фактической оплаты на стороне
            Процессинга. Возвращается, если оплата состоялась
        abandonTime:
          type: string
          format: date-time
          title: |-
            Время фактической отмены оплаты.
            Время фактической отмены оплаты на стороне Процессинга.
            Возвращается, если отмена оплаты состоялась
        card:
          title: >-
            Структура с информацией о карте плательщика.

            Передаётся только при успешном платеже и если указаны способы оплаты payMethod = StoredBankCard либо BankCard
          allOf:
            - $ref: "#/components/schemas/PostInvoiceConfirmRequestCard"
      title: Запрос на подтверждение платежа
      required:
        - srcPayId
        - esppPayId
        - payStatus
        - reqType
    v1PostInvoiceConfirmResponse:
      type: object
      title: Ответ на запрос подтверждения платежа
    v1PostPayMethodBankcardRequest:
      type: object
      properties:
        urlReturnOk:
          type: string
          title: URL для переадресации абонента в случае успешной регистрации карты
        urlReturnNo:
          type: string
          title: URL для переадресации абонента в случае неуспешной регистрации карты
      title: Запрос на добавления способа оплаты с типом "Банковская карта"
      required:
        - urlReturnOk
    v1PostPayMethodBankcardResponse:
      type: object
      properties:
        error:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1PostPayMethodBankcardResponseError"
        data:
          title: Данные регистрации
          allOf:
            - $ref: "#/components/schemas/v1PostPayMethodBankcardResponseRegisterData"
      title: Ответ на запрос добавления способа оплаты с типом "Банковская карта"
    v1PostPayMethodBankcardResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1PostPayMethodBankcardResponseRegisterData:
      type: object
      properties:
        reqId:
          type: string
          title: Идентификатор запроса на регистрацию
        urlRegistration:
          type: string
          title: Ссылка для переадресации клиента для продолжения регистрации
      title: Данные регистрации
    v1PostPayMethodDefaultResponse:
      type: object
      properties:
        error:
          title: Ошибка
          allOf:
            - $ref: "#/components/schemas/v1PostPayMethodDefaultResponseError"
      title: Ответ на запрос установки способа оплаты по умолчанию
    v1PostPayMethodDefaultResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1PostPayMethodSbpRequest:
      type: object
      properties:
        urlReturnOk:
          type: string
          title: URL для переадресации абонента в случае успешной регистрации карты
        urlReturnNo:
          type: string
          title: URL для переадресации абонента в случае неуспешной регистрации карты
      title: Запрос на добавления способа оплаты с типом "СБП"
      required:
        - urlReturnOk
    v1PostPayMethodSbpResponse:
      type: object
      properties:
        error:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1PostPayMethodSbpResponseError"
        data:
          title: Данные регистрации
          allOf:
            - $ref: "#/components/schemas/v1PostPayMethodSbpResponseRegisterData"
      title: Ответ на запрос добавления способа оплаты с типом "СБП"
    v1PostPayMethodSbpResponseError:
      type: object
      properties:
        validation:
          title: Ошибка валидации
          allOf:
            - $ref: "#/components/schemas/v1ValidationError"
      title: Ошибка запроса
    v1PostPayMethodSbpResponseRegisterData:
      type: object
      properties:
        reqId:
          type: string
          title: Идентификатор запроса на регистрацию
        urlRegistration:
          type: string
          title: Ссылка для переадресации клиента для продолжения регистрации
        sbpPayload:
          type: string
          title: Содержимое QR кода для регистрации платежного СБП-токена
      title: Данные регистрации
    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:
            invoice:edit: Предоставляет полный доступ в сервис invoice
            invoice:read: Предоставляет доступ на чтение данных из сервиса invoice
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
