Интеграция с Модульбанком по API (v1)

Download OpenAPI specification:Download

API — технология, которая поможет подключить личный кабинет Модульбанка к любому сервису для бизнеса. Не нужно подавать заявку на подключение и ничего согласовывать — подключиться можете прямо из личного кабинета банка.

Описание протокола

Запросы осуществляются посредством протокола https, на адрес https://api.modulbank.ru/v1/. Для авторизации HTTP-запросы должны содержать следующий заголовок: Authorization: Bearer, где access_token — токен авторизации права на исполнение запрашиваемого метода с заданным набором параметров.
Параметры запроса передаются в теле сообщения. Допустимо передавать данные как в формате application/json так и в формате x-www-form-urlencoded.

Режим песочницы

Песочница — это созданный для разработки режим работы API, при котором все реальные данные о пользователях, компаниях, счетах и транзакциях подменяются на тестовые. С помощью песочницы вы можете разрабатывать и отлаживать свой код не имея учетной записи и открытого расчетного счета в Модульбанке. Для того чтобы наше API распознало входящий запрос как запрос к песочнице, нужно ясно указать это в запросе одним из двух способов: добавить в HTTP заголовок запроса (http request header) sandbox: on или добавить в URI GET параметр sandbox = on.
Также следует помнить, что в режиме песочницы запрещено использовать реальные данные — идентификаторы приложений, токены авторизации и т. д. Вместо реальных идентификаторов в песочнице разрешается использовать следующие:

ПолеЗначениеОписание
clientIdsandboxappИдентификатор приложения
clientSecretsandboxappsecretСекретное слово приложения
tokensandboxtokenТокен авторизации


В песочнице реализована ограниченная функциональность, в т.ч. для запроса просмотра истории операций https://api.modulbank.ru/v1/operation-history/{accountId} работают только фильтры records и skip.

Требования к разработчикам

  1. Приложение должно производить все сетевые взаимодействия по протоколу HTTPS

  2. Приложение должно проверять корректность SSL-сертификата сервера. Если SSL-сертификат не прошел проверку, необходимо немедленно прекратить сессию, чтобы не допустить утечку данных авторизации

  3. Приложение не должно хранить токен авторизации в открытом виде (cookie и т. д.)

  4. Приложение должно корректно информировать пользователей о недоступности сервиса Модульбанка (в случае проведения сервисных работ на стороне сервера API возвращает ответ с HTTP статусом 503 на все виды запросов)


Как с нами связаться:
Если у вас есть вопросы или API банка не решает ваши задачи, пишите нам
api@modulbank.ru

Отвечаем в течение одного рабочего дня.

Как подключить сервис для бизнеса по API

  1. В личном кабинете банка в меню "+" выберите "Интеграция с банком"

  2. Сгенерируйте токен и воспользуйтесь описанием API
Если у вас ещё нет учетной записи в Модульбанке или вы хотите опробовать протокол, можете воспользоваться песочницей

Авторизация и аутентификация

Получить токен авторизации можно двумя способами: сгенерировать его в ЛК Модульбанка или получить по протоколу OAuth 2.

Генерация токена в ЛК

Если вы хотите получать от API данные исключительно по свой учетной записи в Модульбанке, воспользуйтесь механизмом получения токена в Личном кабинете. Выберите пункт «Подключиться к API» в меню действий ЛК и следуйте дальнейшим инструкциям.

Важно!Полученный токен привязан к вашей учетной записи в ЛК и не должен передаваться третьим лицам!

После генерации токена вы можете сразу начать его использование для получения данных в API.

OAuth 2. Общая схема работы

Если вы разрабатываете приложение (бот для телеграма, плагин для общедоступной CRM и т.д.), которое может быть полезно для любого пользователя Модульбанка, вы можете авторизовывать пользователей через сервер авторизации Модульбанка по OAuth подобному протоколу. Схема авторизации пользователей идентична протоколу OAuth 2.0, за небольшим исключением что сервер авторизации Модульбанка кроме формата x-www-form-urlencoded также поддерживает формат json в теле запроса. Для того чтобы стороннее приложение могло совершать запросы к API от лица конкретного пользователя, приложению необходимо получить токен авторизации, подтверждающий что пользователь предоставил приложению права на выполнение тех или иных действий.

Важно!Если вы хотите авторизовывать пользователей Модульбанка по протоколу OAuth, ваше приложение должно быть зарегистрировано у нас. Для регистрации приложения напишите нам письмо на api@modulbank.ru. В ответ мы вышлем вам clientId и clientSecret — уникальные для каждого приложения идентификатор и секретное слово (необходимые параметры для взаимодействия с сервером авторизации Модульбанка).

Схема получения токена авторизации пользователя сторонним приложением.



  1. Пользователь инициирует авторизацию стороннего приложения.

  2. Приложение отправляет запрос Authorization Request на сервер авторизации Модульбанка.

  3. Сервер авторизации Модульбанка перенаправляет пользователя на страницу авторизации.

  4. Пользователь вводит свой логин и пароль, просматривает список запрашиваемых прав и подтверждает, либо отклоняет запрос авторизации.

  5. Приложение получает ответ Authorization Response в виде HTTP Redirect со временным токеном для получения доступа или кодом ошибки.

  6. Приложение, используя полученный временный токен доступа, отправляет запрос на получение токена авторизации.

  7. Ответ содержит токен авторизации (access_token).


Права на выполнение операций

При запросе авторизации стороннее приложение должно явно указывать в параметре scope набор прав, необходимых приложению для работы.

Список возможных прав:
Название праваОписание
account-infoПолучение информации о компаниях пользователя (один и тот же клиент Модульбанка может быть сотрудником нескольких компаний) и счетах компаний пользователя
operation-historyПросмотр истории операций
operation-uploadЗагрузка операций в ЛК

Запрос авторизации GET

Приложение отправляет запрос авторизации на сервер Модульбанка. Запрос авторизации отправляется из браузера клиента.

query Parameters
model.clientId
string

Идентификатор приложения. Для получения идентификатора для приложения напишите нам на api@modulbank.ru

model.redirectUri
string

URI, на который сервер OAuth передает результат авторизации. Значение этого параметра при посимвольном сравнении должно быть идентично значению redirect_uri, указанному при регистрации приложения. При сравнении не учитываются индивидуальные параметры приложения, которые могут быть добавлены в конец строки URI.

model.scope
string

Список запрашиваемых прав. Разделитель элементов списка — пробел. Элементы списка чувствительны к регистру.

model.state
string

Параметр будет добавлен к redirectUri c тем же значением.

Responses

Response samples

Content type
{ }

Запрос авторизации POST

Приложение отправляет запрос авторизации на сервер Модульбанка. Запрос авторизации отправляется из браузера клиента.

Request Body schema:
clientId
string

Идентификатор приложения. Для получения идентификатора для приложения напишите нам на api@modulbank.ru

redirectUri
string

URI, на который сервер OAuth передает результат авторизации. Значение этого параметра при посимвольном сравнении должно быть идентично значению redirect_uri, указанному при регистрации приложения. При сравнении не учитываются индивидуальные параметры приложения, которые могут быть добавлены в конец строки URI.

scope
string

Список запрашиваемых прав. Разделитель элементов списка — пробел. Элементы списка чувствительны к регистру.

state
string

Параметр будет добавлен к redirectUri c тем же значением.

Responses

Request samples

Content type
{
  • "clientId": "<ключ_приложения>",
  • "redirectUri": "<страница приложения на которую будет отправлен пользователь после авторизации>",
  • "scope": "account-info operation-history assistant-service",
  • "state": "<данные этого параметра будут переданы на url возврата>"
}

Response samples

Content type
{ }

Обмен временного токена на токен авторизации

Временный токен (значение поля code ответа) подлежит немедленному обмену на токен авторизации. Время действия этого токена — меньше 1 минуты. Приложение должно получить и обработать ответ сервера и немедленно самостоятельно обменять временный токен на токен авторизации. Если приложению не удалось получить ответ сервера, временный токен утерян, либо срок его действия истек, необходимо повторить процедуру авторизации. Если авторизация завершилась успехом, приложение должно немедленно обменять временный токен на токен авторизации. Для этого необходимо отправить запрос, содержащий временный токен, на сервер авторизации Модульбанка. Использовать временный токен можно только один раз. Если приложению не удалось получить ответ сервера за время жизни временного токена, процедуру авторизации следует повторить сначала. Внимание! Полученный accessToken является симметричным секретом авторизации, поэтому разработчик приложения должен предпринять меры по его защите: хранить токен в зашифрованном виде, предоставлять доступ к нему только после авторизации пользователя в приложении. Срок действия токена 3 года. По истечении этого времени, токен автоматически аннулируется.

Request Body schema:
code
string

Временный токен (authorization code).

clientId
string

Идентификатор приложения, полученный при регистрации.

clientSecret
string

Секретное слово для проверки подлинности приложения.

Responses

Request samples

Content type
{
  • "code": "z43qjxtwwxsvk4cl3vtmvo",
  • "clientId": "<ключ_приложения>",
  • "clientSecret": "секретный_ключ приложения"
}

Response samples

Content type
{
  • "accessToken": "aWQwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDA3MTQ5M2FhYy1lZTFjLTQ1ZWMtYTZkNC1kNTk4ZTQzM2NjNmY",
  • "error": "<Какая-то ошибка, если таковая есть>"
}

Отзыв токена

Приложение может отозвать полученный токен авторизации.

Responses

Response samples

Content type
{ }

Получение данных

Методы для получения информации по счетам и операциям.

Получение информации о компаниях пользователя

Получение информации о компаниях пользователя (один и тот же клиент Модульбанка может быть сотрудником нескольких компаний) и счетах компаний пользователя.

Требуемые права токена
account-info

Responses

Response samples

Content type
[
  • {
    }
]

Получение баланса по счету

Требуемые права токена
account-info

path Parameters
accountId
required
string <uuid>

Системный идентификатор счета, по которому запрашиваются баланс. Этот параметр передается как часть URI.

Responses

Response samples

Content type
0
0

Получение баланса и овердрафта по счету

Требуемые права токена
account-info

path Parameters
accountId
required
string <uuid>

Системный идентификатор счета, по которому запрашиваются баланс. Этот параметр передается как часть URI.

Responses

Response samples

Content type
{
  • "Balance": 0,
  • "Overdraft": 0
}

Просмотр истории операций

Требуемые права токена
operation-history

Список статусов платежей

СтатусРасшифровка
DraftЧерновик
SendToBankОжидающая исполнения
ExecutedИсполненная
RejectByBankОтказано банком в исполнении
CanceledОтменённая
ReceivedИсполненная
PayReceivedИсполненная (Оплачено)
ClarifyRequiredOutcomeТребует уточнения

path Parameters
accountId
required
string

Обязательный параметр. Системный идентификатор счета.

Request Body schema:

Фильтр по параметрам операций.

statuses
Array of strings
Items Enum: "None" "Draft" "InSigning" "Postponed" "SendToBank" "Executed" "RejectByBank" "Canceled" "Received" "Deleted" "Liquidated" "CardIncomingInProgress" "CardInProgress" "ForPayment" "Paid" "Annulled" "Billed" "Exposed" "PayReceived" "BillCancelled" "ClarifyRequiredOutcome" "ClarifyRequiredIncome" "PayrollDraft" "PayrollInSigning" "PayrollSendToBank" "PayrollExecuted" "PayrollRejected" "PayrollPartiallyExecuted" "Scheduled" "UnderControl" "RejectByBeneficiary" "RejectByNominalAccountOwner" "Pending" "NonResidentCurrencyControl"

Статусы возвращаемых операций.

SbpRetailPointId
string <uuid>

Необязательный параметр. Идентификатор торговой точки СБП

operations
Array of strings <uuid>

Необязательный параметр. Идентификаторы транзакций.

AbsIds
Array of strings

Необязательный параметр. Идентификаторы АБС транзакций.

category
string

Необязательный параметр. Направление платежа. Возможные значения: Debet — входящий, Credit — исходящий.

from
string <date-time>

Необязательный параметр. Вывести операции от момента времени (операции, дата проведения которых равна from, или младше). Формат 'yyyy-MM-dd' Если параметр не задан, выводятся все операции.

till
string <date-time>

Необязательный параметр. Вывести операции до момента времени (операции, дата проведения которых равна from, или старше). Формат 'yyyy-MM-dd'. Если параметр не задан, выводятся все операции.

skip
integer <int32>

Необязательный параметр. Пропустить n строк в выборке. Если параметр не задан, skip = 0.

records
integer <int32>

Необязательный параметр. Кол-во возвращаемых записей. От 0 до 50. Если параметр не задан, records = 10.

Responses

Request samples

Content type
{
  • "statuses": [
    ],
  • "SbpRetailPointId": "00000000-0000-0000-0000-000000000000",
  • "operations": [
    ],
  • "AbsIds": [
    ],
  • "category": "string",
  • "from": "2019-08-24T14:15:22Z",
  • "till": "2019-08-24T14:15:22Z",
  • "skip": 0,
  • "records": 0
}

Response samples

Content type
[
  • {
    }
]

Уведомления о произошедших транзакциях (веб-хуки)

Описание
При появлении новой исполненной транзакции в Модульбанке, вашему приложению будет отправлено уведомление. Уведомление — это http запрос, выполненный на специальный, указанный при регистрации приложения Uri для уведомлений.

Требуемые права токена
operation-history

Пример
При регистрации в качестве Uri для уведомлений был указан адрес https://example.ru/modulbank/. Стороннее приложение авторизовало пользователя, работающего в ИП Иванов Иван Иванович. При появлении новой исполненной транзакции по счету открытому ИП Иванов Иван Иванович, Модульбанк выполнит следующий POST запрос:
POST /modulbank
Host: example.ru
Content-Type: application/json

{
"companyInn": "1111111111",
"companyKpp": "",
"operation":
{
"id":"a4b825ca-a6f8-4996-a1db-a5f3028bb68d",
"companyId":"599ebe36-ed20-49c4-b802-a5ec0329ebce",
"status":"Received",
"category":"Debet",
"contragentName":"Индивидуальный предприниматель Иванов Иван Иванович",
"contragentInn":"1111111111",
"contragentKpp":"",
"contragentBankAccountNumber":"30101810000000000005",
"contragentBankName":"МОСКОВСКИЙ ФИЛИАЛ ОАО КБ"РЕГИОНАЛЬНЫЙ КРЕДИТ",
"contragentBankBic":"044583340",
"currency":"RUR",
"amount":100000.0,
"bankAccountNumber":"30101810000000000001",
"paymentPurpose":"Оплата по счету №4 от 01.04.2016 г. Без НДС",
"executed":"2016-04-01T00:00:00",
"created":"2016-04-01T00:00:00",
"docNumber":"4",
"kbk":"",
"oktmo":"",
"paymentBasis":"",
"taxCode":"",
"taxDocNum":"",
"taxDocDate":"",
"payerStatus":"",
"uin":"",
"absId":"34323454545455",
"ibsoId":"1332345565654",
"cardId":"4bdd2fc0-584d-41d8-9241-3f074480fe52"
},
"SHA1Hash": "b2ee4a9197f4a90e893caa4f62eeba0b579321f8"
}


Важно! Все уведомления отправляются исключительно по протоколу HTTPS

В теле запроса передается информация о произошедшей транзакции в виде JSON объекта.

Описание полей объекта:

ПараметрТипОписание
companyInnstringИНН компании (для которой в Модульбанке появилась транзакция)
companyKppstringКПП компании (для которой в Модульбанке появилась транзакция)
operationobjectИнформация по транзакции
SHA1HashstringПодпись сообщения, гарантирующая целостность данных уведомления и то, что уведомления были отправлены сервером Модульбанка. Информация о том как проверить SHA1Hash на стороне приложения описана чуть ниже


Объект operation имеет следующий набор полей:
ПараметрТипОписание
idstringСистемный идентификатор транзакции
companyIdstringСистемный идентификатор компании
statusstringТекущий статус транзакции. Возможные значения: Draft (Черновик), SendToBank (Ожидающая исполнения), Executed (Исполненная), RejectByBank (Отказано банком в исполнении), Canceled (Отменённая), Received (Исполненная), PayReceived (Исполненная (Оплачено)), ClarifyRequiredOutcome (Требует уточнения)
categorystringНаправление платежа. Возможные значения: Debet (входящая), Credit (исходящая)
contragentNamestringПолное наименование контрагента
contragentInnstringИНН контрагента
contragentKppstringКПП контрагента
contragentBankAccountNumberstringСчёт контрагента
contragentBankCorrAccountstringКоррсчёт контрагента
contragentBankNamestringНаименование банка контрагента
contragentBankBicstringБИК банка контрагента
currencystringКод валюты. Возможные значения: RUR, EUR, USD, CNY
amountnumberСумма платежа без учета банковской комиссии
bankAccountNumberstringНомер банковского счета
paymentPurposestringНазначение платежа
executedstringДата проведения платежа
createdstringДата создания транзакции
docNumberstringНомер документа
absIdstringИдентификатор документа в АБС
ibsoIdstringИдентификатор проводки в АБС
kbkstringДля бюджетных и налоговых платежей. Код бюджетной классификации (104)
oktmostringДля бюджетных и налоговых платежей. Общероссийский классификатор территорий муниципальных образований (105)
paymentBasisstringДля бюджетных и налоговых платежей. Основание платежа (106)
taxCodestringДля бюджетных и налоговых платежей. Налоговый период (в случае налогового или бюджетного платежа)
taxDocNumstringДля бюджетных и налоговых платежей. Номер документа (108)
taxDocDatestringДля бюджетных и налоговых платежей. Дата документа (109)
payerStatusstringДля бюджетных и налоговых платежей. Статус плательщика (101)
uinstringДля бюджетных и налоговых платежей. Уникальный идентификатор начисления (22)
cardIdstringИдентификатор карты, к которой привязан платёж
sbpOperIdstringID операций C2B платежа по СБП
sbpOperIdForRefundstringID операции возврата С2B платежa
rcvQrcIdstringID QR-кода СБП
sbpRefundIdstringИдентификатор возврата платежа по QR коду
partialPayAmountdecimalВ случае оплаты требования по частям - сумма частичных оплат
cardNumberstringМаскированный PAN карты (если есть)
OidstringНекий внешний идентификатор от внешней системы (если есть)


При получении от приложения ответа с кодом http статуса 200, уведомление считается полученным. В случае отказа Модульбанк предпримет еще две попытки доставить уведомление: через 10 минут и через час.

Алгоритм расчета подписи сообщения в случае если токен был сгенерирован в ЛК Модульбанка

  1. Сформировать строку из параметров уведомления в кодировке UTF-8.
    Формат строки:
    <первые 10 символов токена авторизации>&operationId
    Пример строки параметров для токена NDIWJFNASDJKFHNASDJFASDJKFHASDJKFHASDJFHASDK:
    NDIWJFNASD&a4b825ca-a6f8-4996-a1db-a5f3028bb68d

  2. Вычислить значение хэш-функции SHA-1 от полученной строки.

  3. Отформатировать полученный результат в HEX-кодированном виде.
    Пример рассчитанного значения параметра sha1_hash для примера:
    27063efdefd944907e08cfa242170f4d1a260c36


Алгоритм расчета подписи сообщения в случае если токен был получен по протоколу OAuth

  1. Сформировать строку из параметров уведомления в кодировке UTF-8 (где clientSecret — это секретное слово приложения).
    Формат строки:
    clientSecret&operationId
    Пример строки параметров:
    JSADFJASFJASLKJWERMNGIODVBKLMNEWSTOHEJLWRTFNEHNSDJLFHNWEO&a4b825ca-a6f8-4996-a1db-a5f3028bb68d

  2. Вычислить значение хэш-функции SHA-1 от полученной строки.

  3. Отформатировать полученный результат в HEX-кодированном виде.
    Пример рассчитанного значения параметра sha1_hash для примера:
    f232c33785c13009614a7ddb69f12133300a33c8


Загрузка данных

Методы по созданию и подписанию платежей.

Импорт платежей в формате JSON

Идемпотентность платежей

  1. Ключ идемпотентности опционален к заполнению, можно указывать в запросе в виде query-параметра, например: https://api.modulbank.ru/v1/operation-upload?idempotency-key=<UUID> или в header-параметрах: Idempotency-Key <UUID>

  2. Валидации: при указании ключ идемпотентности не должен быть пустым, может содержать до 256 символов - латиница, цифры, дефис

  3. При получении запроса operation-upload с Idempotency-Key, сервис проверит, была ли ранее создана операция с таким UUID. Если операция была создана, сервер вернет ответ с текущим Id этой операции. Если операции с таким UUID не найдено, сервис начнет ее выполнение


Примеры заполнения

Платёж контрагенту
{
"payment":
{
"Number": "12345",
"Date": "15.08.2023",
"Sum": 1.01,
"PayerAccount": "40802810870010433949",
"RecipientName": "ООО Ромашка",
"RecipientINN": "1242610857",
"RecipientKPP": "256845746",
"RecipientAccount": "40702810870010408317",
"RecipientBankBik": "044525092",
"RecipientBankCorrAccount": "30101810645250000092",
"PaymentPurpose": "Оплата поставщику Без НДС",
"TypeIndicator": "0" // УИН платежа
},
"parameters":
{
"targetStatus": "InSigning" // если не указывать - будет черновик, если указать - сразу переведётся на подпись
}
}


Бюджетный платёж
{
"payment":
{
"Number": "12345",
"Date": "2023-08-15T00:00:00",
"Sum": "400",
"PayerAccount": "40802810870010433949",
"RecipientName": "Казначейство России (ФНС России)",
"RecipientINN": "7727406020",
"RecipientKPP": "770801001",
"RecipientAccount": "03100643000000018500",
"RecipientBankBik": "017003983",
"RecipientBankCorrAccount": "40102810445370000059",
"PaymentPurpose": "Фиксированные страховые взносы на ОМС за 2 квартал 2022 г.",
"PayerStatus": "01", // или 13
"KBK": "18201061201010000510",
"OKTMO": "12345678", // или 0
"PaymentBase": "0", // основание платежа
"Period": "0", // налоговый период
"TypeIndicator": "0", // УИН
"BudgetDocNumber": "0", // номер документа основания платежа
"BudgetDocDate": "0",
"PaymentPurposeCode": "0", // код вида дохода
"PayerInn": null //Только для удержаний из ЗП - ИНН плательщика (физика, за которого делается удержание)
},
"parameters":
{
"targetStatus": "InSigning"
}
}


Платёж за 3 лицо
{
"payment":
{
"Number": "12345",
"Date": "15.08.2023",
"Sum": 500.0,
"PayerAccount": "40802810870010433949",
"RecipientName": "Управление Федерального казначейства по Тульской области",
"RecipientINN": "7727406020",
"RecipientKPP": "770801001",
"RecipientAccount": "03100643000000018500",
"RecipientBankBik": "017003983",
"RecipientBankCorrAccount": "40102810445370000059",
"PaymentPurpose": "Оплата налога за прошлогодний снег",
"PayerStatus": "13",
"KBK": "18201061201010000510",
"OKTMO": "0",
"PaymentBase": "0", // основание платежа
"Period": "0", // налоговый период
"BudgetDocNumber": "0",
"BudgetDocDate": "0",
"TypeIndicator": "32251003220104916002", // или 0
"PayformDataThirdPerson":
{
"Name": "Иванов И.И.",
"INN": "126674645763",
"KPP": "0"
}
},
"parameters":
{
"targetStatus": "InSigning"
}
}


Request Body schema:

Обязательный параметр. Платежное поручение в формате JSON.

object (BusinessLogic.Contracts.PublicApi.PayformDataContract)
object (StorageServices.Contracts.PublicApi.OperationUpload.OperationUploadWorkflowParameters)

Responses

Request samples

Content type
{
  • "payment": {
    },
  • "parameters": {
    }
}

Response samples

Content type
{
  • "Id": "00000000-0000-0000-0000-000000000000",
  • "Error": "string"
}

Импорт платежей в формате 1С

Публичное апи позволяет загружать в личный кабинет платежные поручения в формате 1С (http://v8.1c.ru/edi/edi_stnd/100/101.htm). Все загруженные платежные поручения имеют статус «Черновик».

Пример заполнения

{
"document":"1CClientBankExchange
ВерсияФормата=1.03 Кодировка=Windows
ДатаСоздания = 23.08.2016
ВремяСоздания=09:50:53
ДатаНачала=24.07.2016
ДатаКонца=23.08.2016 РасчСчет=40802810670010011008
СекцияДокумент=Платежное поручение
Номер=994720
Дата=11.08.2016
Сумма=100.00
НазначениеПлатежа=Для теста Плательщик1=Индивидуальный предприниматель Александров Александр Александрович
ПлательщикИНН = 770400372208
ПлательщикСчет =40802810670010011008 ПлательщикКПП=0
ПолучательКПП=771543001
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода= ПоказательНомера=
ПоказательДаты=
ПоказательТипа=
ПлательщикБанк1=МОСКОВСКИЙ ФИЛИАЛ АО КБ "МОДУЛЬБАНК" ПлательщикБИК=044525092
ПлательщикКорсчет=30101810645250000092
Получатель1=МОСКОВСКИЙ ФИЛИАЛ АО КБ "МОДУЛЬБАНК" ПолучательИНН=2204000595
ПолучательСчет=30102810675250000092
ВидОплаты=01
СрокПлатежа=
Очередность=5 ВидПлатежа=
КодНазПлатежа=1
ДатаСписано=12.08.2016
ПолучательБанк1=МОСКОВСКИЙ ФИЛИАЛ АО КБ "МОДУЛЬБАНК"
ПолучательБИК=044525092
ПолучательКорсчет=30102810675250000092
Код=
КонецДокумента
КонецФайла"
}

Request Body schema:

Обязательный параметр. Документ с платежными поручениями в формате 1С.

document
required
string

Платежные поручения в формате 1С

object (StorageServices.Contracts.PublicApi.OperationUpload.OperationUploadWorkflowParameters)

Responses

Request samples

Content type
{
  • "document": "Смотреть пример"
}

Response samples

Content type
{
  • "totalLoaded": 2,
  • "errors": [
    ],
  • "transactions": {
    }
}

Подписание платежей

Позволяет подписывать платежи квалифицированной электронной подписью. После подписания платежи отправляются в банк и проводятся.

Для подписания составляем строку из id платежей отсортированных по алфавиту, без кавычек разделенных запятой, без пробелов. Для примера выше это:
9c6f2638-e556-4fa3-b59d-fbb1ff2a8f6c,fa74a744-6aa9-436f-8f3c-e29a058999c0

Подписываем её через КриптоПро подписью компании которой они принадлежат.Полученную подпись переводим в Base64.

Для подписания нужно скачать приложение cryptcp от компании КриптоПро и выполнить запрос:
cryptcp.x64.exe -sign -f(путь к файлу хранилищу сертификатов ЭЦП) -dn "((при необходимости) строка для поиска сертификата, например ИНН компании)" -detached -pin(пароль) (путь к подписываемому файлу)

Например:
cryptcp.x64.exe -sign -f cert2.cer -dn "7840473679" -detached -pin password123 test.txt

Для отладки и проверки получившейся подписи можно воспользоваться сервисом https://saas.cryptopro.ru/verifycpca или https://dss.cryptopro.ru/Verify/#/signature

Request Body schema:

Информация о платежах.

Operations
Array of strings <uuid>

Список id подписываемых транзакций.

SignBase64
string

Подпись транзакции.

Responses

Request samples

Content type
{
  • "Operations": [
    ],
  • "SignBase64": "dGVzdHNpZ24="
}

Response samples

Content type
{
  • "SignedResults": [
    ]
}

QR Pay

API QR Pay (PortalAPI/SBP)

Режим песочницы недоступен для методов QR Pay. Рекомендуется проводить тестирование на бою малыми суммами. По динамическим QR-кодам возможен возврат платежа.

Базовый адрес
https://api.modulbank.ru/v1/

Авторизация
Смотрите раздел получение данных

Требуемые права токена
account-info, operation-upload

Типы перечислений

Тип ТСП

ЗначениеОписание
QRPayСтандартная точка продаж СБП
InternetAcquiringИнтернет-эквайринг
ModulKassaМодульКасса


Статус регистрации ТСП
ЗначениеОписание
NewНовый запрос
ProcessingВ обработке
RegisteredЗарегестрирован в СБП
RejectedОтклонен
BlockedЗаблокирован (приостановка от фрод-мониторинга)
ErrorОшибка при регистрации
RejectedFBRОтклонен фрод-мониторингом
NotRegisteredЗаявка не зарегистрирована, ожидает начала регистрации


Тип QR-кода
ЗначениеОписание
QRSСтатический (QR наклейка)
QRDДинамический (QR на кассе)


Статусы QR-кода
ЗначениеОписание
NotStartedОперации по QR коду не существует
ReceivedОперация в обработке
InProgressОперация в обработке
AcceptedОперация завершена успешно
RejectedОперация отклонена
TimedOutВремя ожидания операции превышено


Получение списка точек продаж

Получение списка точек продаж, зарегистрированных в Системе Быстрых платежей. ID компании можно получить через запрос: account-info

query Parameters
companyId
required
string <uuid>

ID компании

Responses

Response samples

Content type
[
  • {
    }
]

Регистрация торговой точки

Запрос предназначен для регистрации торговой точки

Request Body schema:

Регистрационные данные

companyId
string <uuid>

ID компании

bankAccountNumber
string

Номер счёта получателя платежей

name
string

Название торговой точки

mcc
string

МСС код

countryCode
string

Код страны-регистрации юридического лица

countrySubDivisionCode
string

Регион

city
string

Город регистрации торговой точки

zip
string

Индекс города регистрации торговой точки

address
string

Фактический адрес ТСП

phone
string

Контактный телефон

monthlyTurnover
number <double>

Ежемесячный оборот

qrcExpDt
integer <int32>

Время жизни QR-кода по-умолчанию

Responses

Request samples

Content type
{
  • "companyId": "09ed9631-ca26-4495-9fd2-09ca4dbf5ded",
  • "bankAccountNumber": "40702810250011001666",
  • "name": "Продажа банковских карт",
  • "mcc": "5533",
  • "countryCode": "RU",
  • "countrySubDivisionCode": "45",
  • "city": "Москва",
  • "zip": "115184",
  • "address": "Татарская улица д. 11",
  • "phone": "79991234567",
  • "monthlyTurnover": 10000
}

Response samples

Content type
{
  • "requestId": "47547e4e-3748-47cf-b713-612c29a5c98f",
  • "retailPointId": "bbdf834b-d68a-443d-ad5b-9cc00a0e07e9"
}

Получение ТСП

Запрос на получение данных о торговой точке (ТСП) по идентификатору

path Parameters
tspId
required
string <uuid>

ID торговой точки

Responses

Response samples

Content type
{
  • "id": "bbdf834b-d68a-443d-ad5b-9cc00a0e07e9",
  • "name": "Продажа банковских карт",
  • "phone": "79991234567",
  • "city": "Москва",
  • "zip": "115184",
  • "address": "Татарская улица д. 11",
  • "type": "QRPay",
  • "siteUrl": "example.com",
  • "created": "2021-03-18T12:24:38.604538",
  • "hasStaticQrCode": true,
  • "activationCode": "65719916",
  • "merchantCategoryCode": {
    },
  • "bankAccount": "40702810250011001666",
  • "status": "New"
}

Получение статуса регистрации ТСП

Запрос на получение статуса регистрации торговой точки (ТСП) по идентификатору

path Parameters
tspId
required
string <uuid>

ID торговой точки

Responses

Response samples

Content type
{
  • "id": "bbdf834b-d68a-443d-ad5b-9cc00a0e07e9",
  • "status": "Created"
}

Получение данных QR-кода

Запрос на получение статуса и свойств QR-кода по QrcId

path Parameters
qrcId
required
string

ID QR-кода (QrcId)

Responses

Response samples

Content type
{}

Получение изображения QR-кода

Получение изображения QR-кода по QrcId в формате PNG

path Parameters
qrcId
required
string

ID QR-кода (QrcId)

Responses

Response samples

Content type
{ }

Создание нового динамического QR-кода

Запрос предназначен для создания QR-кода для конкретной торговой точки

Request Body schema:

Данные для QR-кода

retailPointId
string <uuid>

ID торговой точки из предыдущего запроса

sum
number <double>

Сумма платежа (от 0 до 1000000000)

extraInfo
string

Назначение платежа/описание/и т.п. (обязательное, макс. 140 символов)

lifetime
integer <int32>

Целочисленное, необязательное, в минутах. Минимальное допустимое значение — 5, максимальное — 129600 (90 дней), если значение не задано — 12 минут

redirectUrl
string

Содержит ссылку для автоматического возврата Плательщика из приложения Банка в приложение или на сайт ТСП. Допускаются только символы в кодировке ASCII. Формат должен соответствовать правилам кодировки URL. (Не более 1024 символов)

Responses

Request samples

Content type
{
  • "retailPointId": "bbdf834b-d68a-443d-ad5b-9cc00a0e07e9",
  • "sum": 50800,
  • "extraInfo": "Оплата по заказу №512",
  • "lifetime": 12,
  • "redirectUrl": "https://example.ru/"
}

Response samples

Content type

Возврат по платежу

Запрос предназначен для осуществления возврата по sbpOperId (идентификатор транзакции в СБП)

Request Body schema:

Данные для возврата

sbpOperId
string

Номер операции СБП, по которой необходимо выполнить возврат средств

type
string

Необязательный. Тип возврата, полный или частичный (full, partial)

amount
number <double>

Необязательный. Сумма для частичного возврата

remitInfo
string

Необязательный. Причина возврата, максимальная длина 140 символов

Responses

Request samples

Content type
{
  • "sbpOperId": "A931608381015300KXVWKp1837BE5609",
  • "type": "full",
  • "remitInfo": "Возврат по заказу №512"
}

Response samples

Content type
{
  • "requestId": "13a8804e-ded0-4f29-a231-725ffce47859"
}

Статус возврата

Получить статус возврата QR-кода по внутреннему идентификатору, полученному при создании возврата

path Parameters
refundId
required
string

ID возврата

Responses

Response samples

Content type
{
  • "requestId": "13a8804e-ded0-4f29-a231-725ffce47859",
  • "qrcId": "AD10002AO71M5BPV96LOCN7B315SBFAG",
  • "sbpOperId": "A931608381015300KXVWKp1837BE5609",
  • "refundSbpOperId": "A931608381015300KXVWKp1837BE5609",
  • "amount": 50800,
  • "status": "Executed"
}

Список МСС

Получение списка МСС кодов (код категории продавца)

Responses

Response samples

Content type
{
  • "codes": [
    ]
}

Активировать Кассовую ссылку СБП

Запрос предназначен для активировации Кассовой ссылки СБП

path Parameters
qrcId
required
string

Идентификатор зарегистрированной Кассовой ссылки СБП

Request Body schema:

Данные активации Кассовой ссылки СБП

amount
number <double>

Сумма Операции СБП C2B

paymentPurpose
string

Назначение платежа

lifetime
integer <int32>

Период использования Кассовой ссылки в минутах. Необязательное поле. Минимальное допустимое значение - 1. Максимальное допустимое значение - 20. Если поле "Lifetime" не передано в запросе метода "Активация Кассовой ссылки", то за период использования Кассовой ссылки берется значение по умолчанию – 5 минут.

Responses

Request samples

Content type
{
  • "amount": 100,
  • "paymentPurpose": "Оплата по заказу №513",
  • "lifetime": 5
}

Response samples

Content type
{
  • "paramsId": "AP10002T9B5ONF23912RQ61TLRF0ICA8",
  • "qrcId": "AS1R000D4IES04TS9B289G3MUGQ4F2BI",
  • "status": "NotStarted",
  • "trxId": "A931608381015300KXVWKp1837BE5609",
  • "lifetime": 5,
  • "timestamp": "2021-03-18T12:24:38.604538"
}

Деактивировать Кассовую ссылку СБП

Запрос предназначен для деактивировации Кассовой ссылки СБП

path Parameters
qrcId
required
string

Идентификатор зарегистрированной Кассовой ссылки СБП

Responses

Статус Кассовой ссылки СБП

Получить статус Кассовой ссылки СБП

path Parameters
qrcId
required
string

Идентификатор зарегистрированной Кассовой ссылки СБП

Responses

Response samples

Content type
{}

Статус операции Кассовой ссылки СБП

Получить статус операции Кассовой ссылки СБП

path Parameters
qrcId
required
string

Идентификатор зарегистрированной Кассовой ссылки СБП

paramsId
required
string

Идентификатор активных значений параметров Кассовой ссылки СБП

Responses

Response samples

Content type
{
  • "paramsId": "AP10002T9B5ONF23912RQ61TLRF0ICA8",
  • "qrcId": "AS1R000D4IES04TS9B289G3MUGQ4F2BI",
  • "status": "NotStarted",
  • "trxId": "A931608381015300KXVWKp1837BE5609",
  • "lifetime": 5,
  • "timestamp": "2021-03-18T12:24:38.604538"
}

Список операций Кассовой ссылки СБП

Получить список операций Кассовой ссылки СБП

path Parameters
qrcId
required
string

Идентификатор зарегистрированной Кассовой ссылки СБП

Responses

Response samples

Content type
[
  • {
    }
]

Номинальные счета

Владелец номинального счета ежедневно не позднее 23:00 МСК отправляет данные бенефициарных владельцев (бенефициаров). Для этого используется публичное API Модульбанка. В массиве данных должна содержаться информация обо всех бенефициарах, чьи деньги находятся на номинальном счете на момент отправки массива, а также о бенефициарах, по которым были движения средств за прошедшие сутки.

Система Модульбанка обрабатывает полученные данные, и на их основе формирует Отчет о бенефициарных владельцах на текущую дату и Анкеты бенефициарных владельцев по форме, которая соответствует требованиям 115-ФЗ. Если клиент не прислал массив, то мы отправляем в его личный кабинет уведомление о том, что данные нужно отправить.

Отчет и Анкеты размещаются в личном кабинете Модульбанка владельца номинального счета. Туда же отправляется уведомление о необходимости подписания файлов.

Владелец номинального счета на следующий день после отправки массива подписывает Отчёт и Анкеты. Это делается или через личный кабинет или через API Модульбанка. В первом случае владелец входит в кабинет и подписывает Отчет простой электронной подписью, а Анкеты - усиленной квалифицированной электронной подписью (УКЭП). Способ подписания через API описан ниже.

Подписанные отчет и анкеты сохраняются в системе Модульбанка.

Подписание Отчёта по бенефициарам через API

Здесь и ниже: при получении ошибок попытайтесь выполнить инструкции из сообщения об ошибке, а если это не помогает или невозможно - пишите в поддержку банка.

1. Сначала по номеру номинального счёта получите PDF с актуальным отчётом о бенефициарах - метод "Получить файл отчёта".
2. Полученный отчёт подпишите с помощью УКЭП и передайте в банк отсоединённую подпись в формате Base64 - метод "Проверить и передать в банк подписанный отчёт". Пример того как можно подписать данные см. ниже.

Подписание Анкет бенефициаров через API

1. Методом "Получить список анкет по бенефициарам" получите id частей анкет (Guid). В случае, когда бенефициаров немного, каждая анкета будет иметь одну часть, но возможно и большее количество.
2. Вызовите метод "Получить файл с частью конкретной анкеты" для получения zip-архива.
3. Используйте метод "Проверить и передать в банк подписанную часть анкеты" для загрузки отсоединённой подписи в формате Base64. Пример того как можно подписать данные см. ниже.

Подписание строки и получение отсоединённой электронной подписи в формате Base64.

Скачать приложение cryptcp от компании КриптоПро и выполнить запрос:

cryptcp.x64.exe -sign -f <путь к файлу хранилищу сертификатов ЭЦП> -dn "<(при необходимости) строка для поиска сертификата, например ИНН компании>" -detached -pin <пароль> <путь к подписываемому файлу>

Например:
cryptcp.x64.exe -sign -f cert2.cer -dn "7840473679" -detached -pin password123 test.txt

Отправить данные бенефициаров

path Parameters
accountNumber
required
string

Номер номинального счета в Модульбанке

Request Body schema:

Данные о бенефициарах

Array of objects (BusinessLogic.Contracts.BankAccounts.BeneficialOwner.BeneficialLegalEntityDataInContract)

Сегмент данных о бенефициарных владельцах-юридических лицах

Array of objects (BusinessLogic.Contracts.BankAccounts.BeneficialOwner.BeneficialIpDataInContract)

Сегмент данных о бенефициарных владельцах-индивидуальных предпринимателях

Array of objects (BusinessLogic.Contracts.BankAccounts.BeneficialOwner.BeneficialIndividualDataInContract)

Сегмент данных о бенефициарных владельцах-физических лицах

Array of objects (BusinessLogic.Contracts.BankAccounts.BeneficialOwner.BeneficialNonResidentLegalEntityDataInContract)

Сегмент данных о бенефициарных владельцах-нерезидентах

Responses

Request samples

Content type
{
  • "LegalEntityData": [
    ],
  • "IndividualEntrepreneurData": [
    ],
  • "IndividualData": [
    ],
  • "NonResidentLegalEntityData": [
    ]
}

Response samples

Content type
{
  • "Error": false,
  • "Message": {
    }
}

Получить файл отчёта

path Parameters
nominalAccountNumber
required
string

Номер номинального счёта

Responses

Проверить и передать в банк подписанный отчёт

path Parameters
nominalAccountNumber
required
string

Номер номинального счёта

Request Body schema:

Строка в формате Base64 с отсоединённой подписью файла c отчётом

Signature
string

Подпись в формате Base64

Responses

Request samples

Content type
{
  • "Signature": "string"
}

Получить список частей анкет по бенефициарам

path Parameters
nominalAccountNumber
required
string

Номер номинального счёта

Responses

Response samples

Content type
{
  • "FormParts": [
    ]
}

Получить файл с частью конкретной анкеты

path Parameters
nominalAccountNumber
required
string

Номер номинального счёта

partId
required
string <uuid>

Guid части конкретной анкеты

Responses

Проверить и передать в банк подписанную часть анкеты

path Parameters
nominalAccountNumber
required
string

Номер номинального счёта

partId
required
string <uuid>

Id (Guid) части анкеты, которую нужно передать

Request Body schema:

Строка в формате Base64 с отсоединённой подписью файла с этой частью анкеты

Signature
string

Подпись в формате Base64

Responses

Request samples

Content type
{
  • "Signature": "string"
}

Метод получения информации о не подписанных отчетов

path Parameters
nominalAccountNumber
required
string

Номер номинального счёта

Responses

Метод получения файла отчета

path Parameters
bankAccountNumber
required
string
id
required
string <uuid>

Responses

Проверить и передать в банк подписанный отчёт

path Parameters
nominalAccountNumber
required
string

Номер номинального счёта

id
required
string <uuid>

Id отчета

Request Body schema:

Строка в формате Base64 с отсоединённой подписью файла c отчётом

Signature
string

Подпись в формате Base64

Responses

Request samples

Content type
{
  • "Signature": "string"
}

Вопросы-Ответы

Безопасно ли использование API, ведь с его помощью можно получить данные, чтобы воспользоваться деньгами клиентов?
Интеграции партнеров с Модульбанком безопасны и основаны на протоколе OAuth2, признанном во всем мире.
При подключении интеграции вы сами подтверждаете уровень доступа, для учетных систем это, как правило, account-info + operation-history. С таким уровнем доступа невозможно инициировать движение средств, даже если злоумышленник каким-то образом узнает токен доступа.

Сколько стоит подключиться к АПИ?
Бесплатно. Подключение доступно на всех тарифах

Как генерируются clientid и clientsecret?
Нужно написать запрос на почту api@modulbank.ru, наша служба поддержки сгенерирует ключи

Есть ли у вас тестовые ключи для подключения api?
Есть режим "песочница", некоторые методы API можно протестировать в нем. Тестовых аккаунтов в продуктивной среде нет

Меняется ли access token? Если два раза пройти аутентификацию, вернется один и тот же access token?
Токен выдается на 3 года и не меняется в течение этого времени. Его можно отозвать по апи

Возможна ли интеграция по API для Android и Ios приложений?
Да, методы Public API можно вызывать из мобильных приложений

Есть ли список хостов (IP или домены) для веб-хуков, с которых нужно разрешить принимать запросы в фаерволе?
185.137.76.36
185.137.76.37
185.137.76.38
185.137.76.39

Куда нужно прописать адрес для исходящего веб-хука?
Адрес вебхука прописывается в ЛК клиента Настройки -> Услуги -> API Банка -> Генерация токена авторизации

Можно ли протестировать уведомления о произошедших транзакциях (веб-хуки) в режиме песочницы?
Такой возможности нет

Какие сообщения передаются в веб-хуках? Была операция, но веб-хук по ней не пришел
Мы отправляем веб-хуки для платежей в следующих статусах:
Draft (Черновик), SendToBank (Ожидающая исполнения), Executed (Исполненная), RejectByBank (Отказано банком в исполнении), Canceled (Отменённая), Received (Исполненная), PayReceived (Исполненная (Оплачено)), ClarifyRequiredOutcome (Требует уточнения)

Что делать, если не приходят/перестали приходить оповещения о платежах через веб-хуки?

  1. Проверить, не просрочен ли токен

  2. Разрешить принимать запросы в фаерволе с адресов
    185.137.76.36
    185.137.76.37
    185.137.76.38
    185.137.76.39

  3. Написать на почту api@modulbank.ru или в чат банка

Какой часовой пояс указывается в полях "Дата проведения платежа", "Дата создания транзакции"?
Указывается московское время