openapi: "3.0.0"
info:
version: 1.2.2
title: Core Broker Bank API
description: |
Все POST-запросы в рамках межсистемного взаимодействия, инициированные сторонами-участниками сценариев, должны содержать электронную подпись, сформированную на сертификате инициировавшей запрос стороны. GET-запросы не содержат электронную подпись. Все ответы в рамках межсистемного взаимодействия также должны содержать электронную подпись, сформированную на сертификате предоставляющей ответ стороны.
При обработке запросов обязательна проверка действительности электронной подписи и принадлежности её стороне, сформировавшей запрос.
При сохранении (логировании) запросов обязательно сохранение всех электронных подписей, полученных с запросом/ответом.
<br><br>
Допустимые алгоритмы подписи: RSA, либо ECDSA. В перспективе возможен переход к использованию алгоритма ГОСТ (в рамках стандарта ГОСТ 34.10-2012) в качестве алгоритма подписи.
<br>
Для схемы с RSA используется хэш-функция SHA256, тип паддинга PKCS1v1.5, алгоритм хэширования MGF1 SHA256.
<br><br>
Тело запроса подписывается по следующему правилу:
- Вычисляется хэш от бинарного тела запроса по алгоритму sha256.
- Отправляющая сторона шифрует вычисленный хэш закрытым ключом.
- Полученная подпись передается в заголовке “X-Request-Sign” в base64.
Тело ответа подписывается аналогично:
- Вычисляется хэш от бинарного тела ответа по алгоритму sha256.
- Отвечающая сторона шифрует вычисленный хэш закрытым ключом.
- Полученная подпись передается в заголовке “X-Request-Sign” в base64.
license:
name: InPlat Technologies
servers:
- url: https://host_name
paths:
/ping/:
get:
summary: Возвращает PONG.
responses:
'200':
description: PONG
content:
text/html:
schema:
type: string
enum:
- pong
/health/:
get:
summary: Возвращает состояние здоровья сервиса.
responses:
'200':
description: Состояние здоровья сервиса.
content:
application/json:
schema:
type: object
/v1/send_application_status/:
post:
summary: Принимает оповещение об изменении статуса заявки
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicationEventRequest'
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GeneralResponse'
'500':
description: Internal service error
/v1/change_payment_schedule/:
post:
summary: Загрузка обновленного графика платежей
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ChangePaymentScheduleRequest'
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GeneralResponse'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/GeneralResponse'
/v1/close_contract/:
post:
summary: Закрытие контракта
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CloseContractRequest"
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/GeneralResponse'
'500':
description: Internal service error
content:
application/json:
schema:
$ref: '#/components/schemas/GeneralResponse'
components:
schemas:
GeneralRequest:
required:
- request_id
- request_stamp
- operation_id
properties:
request_id:
description: Уникальный идентификатор ответа (`uuid4`). Каждый раз должен быть уникальным.
type: string
format: uuid
operation_id:
description: Идентификатор операции (`uuid4`). Должен оставаться неизменным, при попытке повторить уже отправленный ранее запрос.
type: string
format: uuid
request_stamp:
description: "Дата и время запроса в формате ISO 8601: YYYY-MM-DDTHH:MM:SS+HH:MM с указанием часового пояса"
type: string
format: datetime
example: '2019-01-01T00:00:00+00:00'
GeneralResponse:
required:
- response_id
- response_stamp
- response_code
properties:
response_id:
description: Идентификатор ответа (`uuid4`). Должен быть равен request_id.
type: string
format: uuid
response_stamp:
description: "Дата и время ответа в формате ISO 8601: YYYY-MM-DDTHH:MM:SS+HH:MM С указанием часового пояса"
type: string
format: datetime
response_code:
description: |
Код ответа <br>
Общие коды
- 0 - запрос принят успешно
- 1 - ошибка валидации данных в запросе
- 2 - техническая ошибка при обработке запроса
- 3 - запрос отклонён
- 4 - электронная подпись запроса неверна
- 5 - зарезервировано для дальнейшего использования
- 6 - Оригинальный запрос с указанным operation_id находится в процессе обработки
- 7 - Запрос с указанным operation id не совпадает с оригинальным запросом
<br> коды метода /v1/change_payment_schedule/
- 19001 - договор с данным ID не найден
- 19002 - переданная версия графика платежей меньше текущей
<br> коды метода /v1/close_conrtract/
- 25001 - контракт с данным ID не найден
- 25002 - контракт с данным ID находится в неподходящем статусе
<br> Коды метода /v1/send_application_status
- 30001 - клиент с данным ID не найден
- 30002 - недопустимо для текущего статуса
type: integer
enum:
# общие коды
- 0 # запрос принят успешно
- 1 # ошибка валидации данных в запросе
- 2 # техническая ошибка при обработке запроса
- 3 # запрос отклонён
- 4 # электронная подпись запроса неверна
- 5 # зарезервировано для дальнейшего использования
- 6 # Оригинальный запрос с указанным operation_id находится в процессе обработки
- 7 # Запрос с указанным operation id не совпадает с оригинальным запросом
# коды метода /v1/change_payment_schedule/
- 19001 # договор с данным ID не найден
- 19002 # Переданная версия графика платежей меньше текущей
# коды метода /v1/close_conrtract/
- 25001 # Контракт с данным ID не найден
- 25002 # Контракт с данным ID находится в неподходящем статусе
# коды метода /v1/send_application_status
- 30001 # контракт с данным ID не найден
- 30002 # недопустимо для текущего статуса
response_description:
description: Текстовое описание кода ответа
type: string
ChangePaymentScheduleRequest:
allOf:
- $ref: "#/components/schemas/GeneralRequest"
- type: object
required:
- payment_schedule
properties:
payment_schedule:
$ref: "#/components/schemas/PaymentSchedule"
CloseContractRequest:
allOf:
- $ref: "#/components/schemas/GeneralRequest"
- type: object
required:
- bank_contract_id
properties:
bank_contract_id:
description: Идентификатор контракта в банке-кредиторе
type: string
ApplicationEventRequest:
allOf:
- $ref: "#/components/schemas/GeneralRequest"
- type: object
required:
- application_id
properties:
application_id:
description: Идентификатор заявки в банке-кредиторе
type: string
event_code:
description: |
Код события
- INPUT_INITIAL - заявка прошла первоначальную обработку.
- OFFER_SIGN - согласия по заявке прошли проверку, пакет кредитной документации сформирован.
- COMPLETED - банк принял финальное решение о выдаче кредита.
- REJECT_BANK - заявка отклонена банком.
- REJECT_CLIENT - заявка отклонена по инициативе клиента или истекло время ожидания действий клиента.
type: string
enum:
- INPUT_INITIAL
- OFFER_SIGN
- COMPLETED
- REJECT_BANK
- REJECT_CLIENT
PaymentSchedule:
required:
- bank_contract_id
- version
- payments
properties:
bank_contract_id:
description: Идентификатор контракта в банке-кредиторе
type: string
version:
description: Версия графика платежей
type: string
format: timestamp
payments:
description: График платежей
type: array
items:
$ref: '#/components/schemas/Payment'
Payment:
required:
- payment_id
- payment_status_code
- payment_date
- payment_amount
- base_debt_amount
- interest_amount
- amount_to_pay
- amount_to_pay_base_debt
- amount_to_pay_interest
properties:
payment_id:
description: Идентификатор записи в графике платежей
type: integer
payment_status_code:
description: |
Код cтатуса платежа
- 0 - будущий платеж
- 1 - погашен
- 2 - просрочен
type: integer
payment_date:
description: Дата платежа
type: string
format: date
example: '2017-07-21'
payment_amount:
description: Сумма планового платежа (в копейках)
type: integer
base_debt_amount:
description: Часть суммы планового платежа в счёт погашения основного долга (в копейках)
type: integer
interest_amount:
description: Часть суммы планового платежа в счёт погашения процентов (в копейках)
type: integer
penalty_amount:
description: Часть суммы планового платежа в счёт погашения штрафов (в копейках)
type: integer
amount_to_pay:
description: Сумма фактического платежа, т.е. остатка к списанию (в копейках)
type: integer
amount_to_pay_base_debt:
description: Часть суммы фактического платежа в счёт погашения основного долга (в копейках)
type: integer
amount_to_pay_interest:
description: Часть суммы фактического платежа в счёт погашения процентов (в копейках)
type: integer
securitySchemes:
RemoteSystem:
type: apiKey
in: header
name: X-Token
description: Аутентификация происходит по токену и IP-адресу клиента.
RequestSignature:
type: apiKey
in: header
name: X-Request-Sign
description: Подпись запроса
security:
- RemoteSystem: []
RequestSignature: []