Download OpenAPI specification:Download
API — технология, которая поможет подключить личный кабинет Модульбанка к любому сервису для бизнеса.
Не нужно подавать заявку на подключение и ничего согласовывать — подключиться можете прямо из личного кабинета банка.
Описание протокола
Запросы осуществляются посредством протокола https, на адрес https://api.modulbank.ru/v1/. Для авторизации HTTP-запросы должны содержать следующий заголовок: Authorization: Beareraccess_token
— токен авторизации права на исполнение запрашиваемого метода с заданным набором параметров.
Параметры запроса передаются в теле сообщения. Допустимо передавать данные как в формате application/json так и в формате x-www-form-urlencoded.
Режим песочницы
Песочница — это созданный для разработки режим работы API, при котором все реальные данные о пользователях, компаниях, счетах и транзакциях подменяются на тестовые. С помощью песочницы вы можете разрабатывать и отлаживать свой код не имея учетной записи и открытого расчетного счета в Модульбанке. Для того чтобы наше API распознало входящий запрос как запрос к песочнице, нужно ясно указать это в запросе одним из двух способов: добавить в HTTP заголовок запроса (http request header) sandbox: on
или добавить в URI GET параметр sandbox = on
.
Также следует помнить, что в режиме песочницы запрещено использовать реальные данные — идентификаторы приложений, токены авторизации и т. д. Вместо реальных идентификаторов в песочнице разрешается использовать следующие:
Поле | Значение | Описание |
---|---|---|
clientId | sandboxapp | Идентификатор приложения |
clientSecret | sandboxappsecret | Секретное слово приложения |
token | sandboxtoken | Токен авторизации |
Получить токен авторизации можно двумя способами: сгенерировать его в ЛК Модульбанка или получить по протоколу OAuth 2.
Генерация токена в ЛК
Если вы хотите получать от API данные исключительно по свой учетной записи в Модульбанке, воспользуйтесь механизмом получения токена в Личном кабинете. Выберите пункт «Подключиться к API» в меню действий ЛК и следуйте дальнейшим инструкциям.
Важно!Полученный токен привязан к вашей учетной записи в ЛК и не должен передаваться третьим лицам!
После генерации токена вы можете сразу начать его использование для получения данных в API.
OAuth 2. Общая схема работы
Если вы разрабатываете приложение (бот для телеграма, плагин для общедоступной CRM и т.д.), которое может быть полезно для любого пользователя Модульбанка, вы можете авторизовывать пользователей через сервер авторизации Модульбанка по OAuth подобному протоколу. Схема авторизации пользователей идентична протоколу OAuth 2.0, за небольшим исключением что сервер авторизации Модульбанка кроме формата x-www-form-urlencoded также поддерживает формат json в теле запроса. Для того чтобы стороннее приложение могло совершать запросы к API от лица конкретного пользователя, приложению необходимо получить токен авторизации, подтверждающий что пользователь предоставил приложению права на выполнение тех или иных действий.
Важно!Если вы хотите авторизовывать пользователей Модульбанка по протоколу OAuth, ваше приложение должно быть зарегистрировано у нас. Для регистрации приложения напишите нам письмо на api@modulbank.ru. В ответ мы вышлем вам clientId
и clientSecret
— уникальные для каждого приложения идентификатор и секретное слово (необходимые параметры для взаимодействия с сервером авторизации Модульбанка).
Схема получения токена авторизации пользователя сторонним приложением.
Название права | Описание |
---|---|
account-info | Получение информации о компаниях пользователя (один и тот же клиент Модульбанка может быть сотрудником нескольких компаний) и счетах компаний пользователя |
operation-history | Просмотр истории операций |
operation-upload | Загрузка операций в ЛК |
Приложение отправляет запрос авторизации на сервер Модульбанка. Запрос авторизации отправляется из браузера клиента.
model.clientId | string Идентификатор приложения. Для получения идентификатора для приложения напишите нам на api@modulbank.ru |
model.redirectUri | string URI, на который сервер OAuth передает результат авторизации. Значение этого параметра при посимвольном сравнении должно быть идентично значению redirect_uri, указанному при регистрации приложения. При сравнении не учитываются индивидуальные параметры приложения, которые могут быть добавлены в конец строки URI. |
model.scope | string Список запрашиваемых прав. Разделитель элементов списка — пробел. Элементы списка чувствительны к регистру. |
model.state | string Параметр будет добавлен к redirectUri c тем же значением. |
{ }
Приложение отправляет запрос авторизации на сервер Модульбанка. Запрос авторизации отправляется из браузера клиента.
clientId | string Идентификатор приложения. Для получения идентификатора для приложения напишите нам на api@modulbank.ru |
redirectUri | string URI, на который сервер OAuth передает результат авторизации. Значение этого параметра при посимвольном сравнении должно быть идентично значению redirect_uri, указанному при регистрации приложения. При сравнении не учитываются индивидуальные параметры приложения, которые могут быть добавлены в конец строки URI. |
scope | string Список запрашиваемых прав. Разделитель элементов списка — пробел. Элементы списка чувствительны к регистру. |
state | string Параметр будет добавлен к redirectUri c тем же значением. |
{- "clientId": "<ключ_приложения>",
- "redirectUri": "<страница приложения на которую будет отправлен пользователь после авторизации>",
- "scope": "account-info operation-history assistant-service",
- "state": "<данные этого параметра будут переданы на url возврата>"
}
{ }
Временный токен (значение поля code ответа) подлежит немедленному обмену на токен авторизации. Время действия этого токена — меньше 1 минуты. Приложение должно получить и обработать ответ сервера и немедленно самостоятельно обменять временный токен на токен авторизации. Если приложению не удалось получить ответ сервера, временный токен утерян, либо срок его действия истек, необходимо повторить процедуру авторизации. Если авторизация завершилась успехом, приложение должно немедленно обменять временный токен на токен авторизации. Для этого необходимо отправить запрос, содержащий временный токен, на сервер авторизации Модульбанка. Использовать временный токен можно только один раз. Если приложению не удалось получить ответ сервера за время жизни временного токена, процедуру авторизации следует повторить сначала. Внимание! Полученный accessToken является симметричным секретом авторизации, поэтому разработчик приложения должен предпринять меры по его защите: хранить токен в зашифрованном виде, предоставлять доступ к нему только после авторизации пользователя в приложении. Срок действия токена 3 года. По истечении этого времени, токен автоматически аннулируется.
code | string Временный токен (authorization code). |
clientId | string Идентификатор приложения, полученный при регистрации. |
clientSecret | string Секретное слово для проверки подлинности приложения. |
{- "code": "z43qjxtwwxsvk4cl3vtmvo",
- "clientId": "<ключ_приложения>",
- "clientSecret": "секретный_ключ приложения"
}
{- "accessToken": "aWQwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDA3MTQ5M2FhYy1lZTFjLTQ1ZWMtYTZkNC1kNTk4ZTQzM2NjNmY",
- "error": "<Какая-то ошибка, если таковая есть>"
}
Получение информации о компаниях пользователя (один и тот же клиент Модульбанка может быть сотрудником нескольких компаний) и счетах компаний пользователя.
Требуемые права токенаaccount-info
[- {
- "companyId": "70ca00f6-1f10-4964-aca6-a5ec032efe37",
- "companyName": "ООО \"Ромашка\"",
- "bankAccounts": [
- {
- "accountName": "Основной счет",
- "balance": 900000,
- "bankBic": "044583340",
- "bankInn": "2204000595",
- "bankKpp": "770443001",
- "bankCorrespondentAccount": "30101810000000000001",
- "bankName": "МОСКОВСКИЙ ФИЛИАЛ ОАО КБ\"РЕГИОНАЛЬНЫЙ КРЕДИТ\" Г.МОСКВА",
- "beginDate": "2015-10-07T00:00:00",
- "category": "CheckingAccount",
- "currency": "RUR",
- "id": "edb10116-5a93-4963-a53b-a5ec037177f0",
- "number": "40802810070000000001",
- "status": "New"
}
], - "registrationCompleted": true,
- "Inn": "2204000595",
- "Kpp": "771543001",
- "Ogrn": "1022200525841"
}
]
Требуемые права токена
operation-history
Список статусов платежей
Статус | Расшифровка |
---|---|
Draft | Черновик |
SendToBank | Ожидающая исполнения |
Executed | Исполненная |
RejectByBank | Отказано банком в исполнении |
Canceled | Отменённая |
Received | Исполненная |
PayReceived | Исполненная (Оплачено) |
ClarifyRequiredOutcome | Требует уточнения |
accountId required | string Обязательный параметр. Системный идентификатор счета. |
Фильтр по параметрам операций.
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. |
{- "statuses": [
- "None"
], - "SbpRetailPointId": "00000000-0000-0000-0000-000000000000",
- "operations": [
- "00000000-0000-0000-0000-000000000000"
], - "AbsIds": [
- "string"
], - "category": "string",
- "from": "2019-08-24T14:15:22Z",
- "till": "2019-08-24T14:15:22Z",
- "skip": 0,
- "records": 0
}
[- {
- "cardId": "4bdd2fc0-584d-41d8-9241-3f074480fe52",
- "id": "a4b825ca-a6f8-4996-a1db-a5f3028bb68d",
- "companyId": "599ebe36-ed20-49c4-b802-a5ec0329ebce",
- "status": "Received",
- "category": "Debet",
- "contragentName": "Индивидуальный предприниматель Иванов Иван Иванович",
- "contragentInn": "1111111111",
- "contragentKpp": "",
- "contragentBankAccountNumber": "30101810000000000005",
- "contragentBankCorrAccount": "30101810000000000388",
- "contragentBankName": "МОСКОВСКИЙ ФИЛИАЛ ОАО КБ\"РЕГИОНАЛЬНЫЙ КРЕДИТ\"",
- "contragentBankBic": "044583340",
- "currency": "RUR",
- "amount": 100000,
- "bankAccountNumber": "30101810000000000001",
- "paymentPurpose": "Оплата по счету №4 от 01.04.2016 г. Без НДС",
- "executed": "2016-04-01T00:00:00",
- "created": "2016-04-01T00:00:00",
- "docNumber": "12345",
- "absId": "34323454545455",
- "ibsoId": "1332345565654",
- "kbk": "",
- "oktmo": "",
- "paymentBasis": "",
- "taxCode": "",
- "taxDocNum": "",
- "taxDocDate": "",
- "payerStatus": "",
- "uin": "",
- "sbpOperId": "",
- "sbpOperIdForRefund": "",
- "rcvQrcId": "",
- "sbpRefundId": "00000000-0000-0000-0000-000000000000",
- "sbpSndPAM": "Иванов П.С.",
- "partialPayAmount": 45,
- "cardNumber": "123456******1234",
- "Oid": "12345678-1234-5678-9012-123456789012"
}
]
Описание
При появлении новой исполненной транзакции в Модульбанке, вашему приложению будет отправлено уведомление. Уведомление — это 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 объекта.
Описание полей объекта:
Параметр | Тип | Описание |
---|---|---|
companyInn | string | ИНН компании (для которой в Модульбанке появилась транзакция) |
companyKpp | string | КПП компании (для которой в Модульбанке появилась транзакция) |
operation | object | Информация по транзакции |
SHA1Hash | string | Подпись сообщения, гарантирующая целостность данных уведомления и то, что уведомления были отправлены сервером Модульбанка. Информация о том как проверить SHA1Hash на стороне приложения описана чуть ниже |
Параметр | Тип | Описание |
---|---|---|
id | string | Системный идентификатор транзакции |
companyId | string | Системный идентификатор компании |
status | string | Текущий статус транзакции. Возможные значения: Draft (Черновик), SendToBank (Ожидающая исполнения), Executed (Исполненная), RejectByBank (Отказано банком в исполнении), Canceled (Отменённая), Received (Исполненная), PayReceived (Исполненная (Оплачено)), ClarifyRequiredOutcome (Требует уточнения) |
category | string | Направление платежа. Возможные значения: Debet (входящая), Credit (исходящая) |
contragentName | string | Полное наименование контрагента |
contragentInn | string | ИНН контрагента |
contragentKpp | string | КПП контрагента |
contragentBankAccountNumber | string | Счёт контрагента |
contragentBankCorrAccount | string | Коррсчёт контрагента |
contragentBankName | string | Наименование банка контрагента |
contragentBankBic | string | БИК банка контрагента |
currency | string | Код валюты. Возможные значения: RUR, EUR, USD, CNY |
amount | number | Сумма платежа без учета банковской комиссии |
bankAccountNumber | string | Номер банковского счета |
paymentPurpose | string | Назначение платежа |
executed | string | Дата проведения платежа |
created | string | Дата создания транзакции |
docNumber | string | Номер документа |
absId | string | Идентификатор документа в АБС |
ibsoId | string | Идентификатор проводки в АБС |
kbk | string | Для бюджетных и налоговых платежей. Код бюджетной классификации (104) |
oktmo | string | Для бюджетных и налоговых платежей. Общероссийский классификатор территорий муниципальных образований (105) |
paymentBasis | string | Для бюджетных и налоговых платежей. Основание платежа (106) |
taxCode | string | Для бюджетных и налоговых платежей. Налоговый период (в случае налогового или бюджетного платежа) |
taxDocNum | string | Для бюджетных и налоговых платежей. Номер документа (108) |
taxDocDate | string | Для бюджетных и налоговых платежей. Дата документа (109) |
payerStatus | string | Для бюджетных и налоговых платежей. Статус плательщика (101) |
uin | string | Для бюджетных и налоговых платежей. Уникальный идентификатор начисления (22) |
cardId | string | Идентификатор карты, к которой привязан платёж |
sbpOperId | string | ID операций C2B платежа по СБП |
sbpOperIdForRefund | string | ID операции возврата С2B платежa |
rcvQrcId | string | ID QR-кода СБП |
sbpRefundId | string | Идентификатор возврата платежа по QR коду |
partialPayAmount | decimal | В случае оплаты требования по частям - сумма частичных оплат |
cardNumber | string | Маскированный PAN карты (если есть) |
Oid | string | Некий внешний идентификатор от внешней системы (если есть) |
<первые 10 символов токена авторизации>&operationId
NDIWJFNASDJKFHNASDJFASDJKFHASDJKFHASDJFHASDK
:NDIWJFNASD&a4b825ca-a6f8-4996-a1db-a5f3028bb68d
27063efdefd944907e08cfa242170f4d1a260c36
clientSecret&operationId
JSADFJASFJASLKJWERMNGIODVBKLMNEWSTOHEJLWRTFNEHNSDJLFHNWEO&a4b825ca-a6f8-4996-a1db-a5f3028bb68d
f232c33785c13009614a7ddb69f12133300a33c8
Методы по созданию и подписанию платежей.
Идемпотентность платежей
Примеры заполнения
Платёж контрагенту
{
"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"
}
}
Обязательный параметр. Платежное поручение в формате JSON.
object (BusinessLogic.Contracts.PublicApi.PayformDataContract) | |
object (StorageServices.Contracts.PublicApi.OperationUpload.OperationUploadWorkflowParameters) |
{- "payment": {
- "Number": 0,
- "Date": "string",
- "Sum": 0,
- "PayerAccount": "string",
- "RecipientName": "string",
- "RecipientINN": "string",
- "RecipientKPP": "string",
- "RecipientAccount": "string",
- "RecipientBankBik": "string",
- "RecipientBankCorrAccount": "string",
- "PaymentPurpose": "string",
- "PayerStatus": "string",
- "KBK": "string",
- "OKTMO": "string",
- "PaymentBase": "string",
- "Period": "string",
- "TypeIndicator": "string",
- "BudgetDocNumber": "string",
- "BudgetDocDate": "string",
- "PaymentPurposeCode": "string",
- "PayformDataThirdPerson": {
- "Name": "string",
- "Inn": "string",
- "Kpp": "string"
}, - "PayerInn": "string"
}, - "parameters": {
- "targetStatus": "None"
}
}
{- "Id": "00000000-0000-0000-0000-000000000000",
- "Error": "string"
}
Публичное апи позволяет загружать в личный кабинет платежные поручения в формате 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
Код=
КонецДокумента
КонецФайла"
}
Обязательный параметр. Документ с платежными поручениями в формате 1С.
document required | string Платежные поручения в формате 1С |
object (StorageServices.Contracts.PublicApi.OperationUpload.OperationUploadWorkflowParameters) |
{- "document": "Смотреть пример"
}
{- "totalLoaded": 2,
- "errors": [
- "Документ 11 от 11.08.2016 на сумму 15000 рублей . Ошибка: Неверное значение поля ПлательщикБИК"
], - "transactions": {
- "994720": "273213a6-738d-4b06-bdc8-10896bc5c25e",
- "994721": "e58cedc8-7978-4d1c-a9ff-88b88ed1ae3c"
}
}
Позволяет подписывать платежи квалифицированной электронной подписью. После подписания платежи отправляются в банк и проводятся.
Для подписания составляем строку из 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
Информация о платежах.
Operations | Array of strings <uuid> Список id подписываемых транзакций. |
SignBase64 | string Подпись транзакции. |
{- "Operations": [
- "fa74a744-6aa9-436f-8f3c-e29a058999c0",
- "9c6f2638-e556-4fa3-b59d-fbb1ff2a8f6c"
], - "SignBase64": "dGVzdHNpZ24="
}
{- "SignedResults": [
- {
- "Id": "7872b839-8b0d-4d83-83ee-0697292f5eee",
- "Status": "Signed",
- "Message": "OK"
}, - {
- "Id": "36f99f92-e45f-4e88-b374-c5aa471856b7",
- "Status": "Error",
- "Message": "NotFound"
}
]
}
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 | Заявка не зарегистрирована, ожидает начала регистрации |
Значение | Описание |
---|---|
QRS | Статический (QR наклейка) |
QRD | Динамический (QR на кассе) |
Значение | Описание |
---|---|
NotStarted | Операции по QR коду не существует |
Received | Операция в обработке |
InProgress | Операция в обработке |
Accepted | Операция завершена успешно |
Rejected | Операция отклонена |
TimedOut | Время ожидания операции превышено |
Получение списка точек продаж, зарегистрированных в Системе Быстрых платежей. ID компании можно получить через запрос: account-info
companyId required | string <uuid> ID компании |
[- {
- "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": {
- "code": "5533",
- "name": "Автомобильные запчасти и аксессуары",
- "category": "Автотовары и услуги"
}, - "bankAccount": "40702810250011001666",
- "status": "New"
}
]
Запрос предназначен для регистрации торговой точки
Регистрационные данные
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-кода по-умолчанию |
{- "companyId": "09ed9631-ca26-4495-9fd2-09ca4dbf5ded",
- "bankAccountNumber": "40702810250011001666",
- "name": "Продажа банковских карт",
- "mcc": "5533",
- "countryCode": "RU",
- "countrySubDivisionCode": "45",
- "city": "Москва",
- "zip": "115184",
- "address": "Татарская улица д. 11",
- "phone": "79991234567",
- "monthlyTurnover": 10000
}
{- "requestId": "47547e4e-3748-47cf-b713-612c29a5c98f",
- "retailPointId": "bbdf834b-d68a-443d-ad5b-9cc00a0e07e9"
}
Запрос на получение данных о торговой точке (ТСП) по идентификатору
tspId required | string <uuid> ID торговой точки |
{- "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": {
- "code": "5533",
- "name": "Автомобильные запчасти и аксессуары",
- "category": "Автотовары и услуги"
}, - "bankAccount": "40702810250011001666",
- "status": "New"
}
Запрос на получение статуса и свойств QR-кода по QrcId
qrcId required | string ID QR-кода (QrcId) |
{- "qrcId": "AD10002AO71M5BPV96LOCN7B315SBFAG",
- "localQrcId": "9976",
- "amount": 50800,
- "created": "2021-03-18T12:24:38.604538",
- "operationId": "A931608381015300KXVWKp1837BE5609",
- "type": "QRD",
- "status": "Accepted",
- "paymentPurpose": "Оплата по заказу №512"
}
Запрос предназначен для создания QR-кода для конкретной торговой точки
Данные для 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 символов) |
{- "retailPointId": "bbdf834b-d68a-443d-ad5b-9cc00a0e07e9",
- "sum": 50800,
- "extraInfo": "Оплата по заказу №512",
- "lifetime": 12,
}
{- "qrcId": "AD10002AO71M5BPV96LOCN7B315SBFAG",
}
Запрос предназначен для осуществления возврата по sbpOperId (идентификатор транзакции в СБП)
Данные для возврата
sbpOperId | string Номер операции СБП, по которой необходимо выполнить возврат средств |
type | string Необязательный. Тип возврата, полный или частичный (full, partial) |
amount | number <double> Необязательный. Сумма для частичного возврата |
remitInfo | string Необязательный. Причина возврата, максимальная длина 140 символов |
{- "sbpOperId": "A931608381015300KXVWKp1837BE5609",
- "type": "full",
- "remitInfo": "Возврат по заказу №512"
}
{- "requestId": "13a8804e-ded0-4f29-a231-725ffce47859"
}
Получить статус возврата QR-кода по внутреннему идентификатору, полученному при создании возврата
refundId required | string ID возврата |
{- "requestId": "13a8804e-ded0-4f29-a231-725ffce47859",
- "qrcId": "AD10002AO71M5BPV96LOCN7B315SBFAG",
- "sbpOperId": "A931608381015300KXVWKp1837BE5609",
- "refundSbpOperId": "A931608381015300KXVWKp1837BE5609",
- "amount": 50800,
- "status": "Executed"
}
{- "codes": [
- {
- "name": "Генеральные подрядчики - строительство жилых и коммерческих зданий",
- "category": "Строительство и ремонт",
- "code": "1520"
}, - {
- "name": "Разнообразные издательства/печатное дело",
- "category": "Книги",
- "code": "2741"
}, - {
- "name": "Грузовые железнодорожные перевозки",
- "category": "Перевозки",
- "code": "4011"
}
]
}
Запрос предназначен для регистрация Кассовой ссылки СБП
Регистрационные данные Кассовой ссылки СБП
retailPointId | string <uuid> ID торговой точки |
redirectUrl | string Ссылка для автоматического возврата Плательщика из приложения Банка в приложение или на сайт ТСП. Допускаются только символы в кодировке ASCII. Формат должен соответствовать спецификации RFC-3986. |
{- "retailPointId": "bbdf834b-d68a-443d-ad5b-9cc00a0e07e9",
}
{- "paramsId": "AP10002T9B5ONF23912RQ61TLRF0ICA8",
- "qrcId": "AS1R000D4IES04TS9B289G3MUGQ4F2BI",
- "status": "InActivated"
}
Запрос предназначен для активировации Кассовой ссылки СБП
qrcId required | string Идентификатор зарегистрированной Кассовой ссылки СБП |
Данные активации Кассовой ссылки СБП
amount | number <double> Сумма Операции СБП C2B |
paymentPurpose | string Назначение платежа |
lifetime | integer <int32> Период использования Кассовой ссылки в минутах. Необязательное поле. Минимальное допустимое значение - 1. Максимальное допустимое значение - 20. Если поле "Lifetime" не передано в запросе метода "Активация Кассовой ссылки", то за период использования Кассовой ссылки берется значение по умолчанию – 5 минут. |
{- "amount": 100,
- "paymentPurpose": "Оплата по заказу №513",
- "lifetime": 5
}
{- "paramsId": "AP10002T9B5ONF23912RQ61TLRF0ICA8",
- "qrcId": "AS1R000D4IES04TS9B289G3MUGQ4F2BI",
- "status": "NotStarted",
- "trxId": "A931608381015300KXVWKp1837BE5609",
- "lifetime": 5,
- "timestamp": "2021-03-18T12:24:38.604538"
}
Получить статус Кассовой ссылки СБП
qrcId required | string Идентификатор зарегистрированной Кассовой ссылки СБП |
{- "paramsId": "AP10002T9B5ONF23912RQ61TLRF0ICA8",
- "qrcId": "AS1R000D4IES04TS9B289G3MUGQ4F2BI",
- "status": "InActivated"
}
Получить статус операции Кассовой ссылки СБП
qrcId required | string Идентификатор зарегистрированной Кассовой ссылки СБП |
paramsId required | string Идентификатор активных значений параметров Кассовой ссылки СБП |
{- "paramsId": "AP10002T9B5ONF23912RQ61TLRF0ICA8",
- "qrcId": "AS1R000D4IES04TS9B289G3MUGQ4F2BI",
- "status": "NotStarted",
- "trxId": "A931608381015300KXVWKp1837BE5609",
- "lifetime": 5,
- "timestamp": "2021-03-18T12:24:38.604538"
}
Получить список операций Кассовой ссылки СБП
qrcId required | string Идентификатор зарегистрированной Кассовой ссылки СБП |
[- {
- "paramsId": "AP10002T9B5ONF23912RQ61TLRF0ICA8",
- "qrcId": "AS1R000D4IES04TS9B289G3MUGQ4F2BI",
- "status": "NotStarted",
- "trxId": "A931608381015300KXVWKp1837BE5609",
- "lifetime": 5,
- "timestamp": "2021-03-18T12:24:38.604538"
}
]
Владелец номинального счета ежедневно не позднее 23:00 МСК отправляет данные
бенефициарных владельцев (бенефициаров). Для этого используется публичное API Модульбанка. В массиве данных должна
содержаться информация обо всех бенефициарах, чьи деньги находятся на номинальном счете на момент отправки массива, а
также о бенефициарах, по которым были движения средств за прошедшие сутки.
Система Модульбанка обрабатывает полученные данные, и на их основе формирует Отчет о бенефициарных владельцах на
текущую дату и Анкеты бенефициарных владельцев по форме, которая соответствует требованиям 115-ФЗ. Если клиент не
прислал массив, то мы отправляем в его личный кабинет уведомление о том, что данные нужно отправить.
Отчет и Анкеты размещаются в личном кабинете Модульбанка владельца номинального счета. Туда же отправляется уведомление
о необходимости подписания файлов.
Владелец номинального счета на следующий день после отправки массива подписывает Отчёт и Анкеты. Это делается
или через личный кабинет или через API Модульбанка. В первом случае владелец входит в кабинет и подписывает Отчет
простой электронной подписью, а Анкеты - усиленной квалифицированной электронной подписью (УКЭП). Способ подписания
через API описан ниже.
Подписанные отчет и анкеты сохраняются в системе Модульбанка.
Подписание Отчёта по бенефициарам через API
Здесь и ниже: при получении ошибок попытайтесь выполнить рекомендации из сообщения об ошибке. Если это не
поможет - напишите в поддержку банка.
Есть два метода подписания отчетов по бенефициарам: v1 и v2.
Метод v2 реализован позже и отличается тем, что сначала нужно получить и подписать PDF всех ранее неподписанных отчётов,
а не только последнего. На текущий момент работают обе версии, но мы настоятельно рекомендуем использовать метод v2,
так как в скором времени v1 будет отключён.
Описание метода v1:
1. По номеру номинального счёта получите PDF с последним отчётом о бенефициарах – метод "Получить файл отчёта".
2. Полученный отчёт подпишите с помощью УКЭП и передайте в банк отсоединённую подпись в формате Base64 – метод
"Проверить и передать в банк подписанный отчёт".
Описание метода v2:
1. По номеру номинального счёта получите список всех ID отчетов, которые ранее не были подписаны
– "Метод получения информации о не подписанных отчетов".
2. По полученным ID с помощью "Метода получения файла отчета" получите PDF файлы отчетов.
3. Полученные файлы подпишите с помощью УКЭП и передайте в банк отсоединённую подпись в формате 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
accountNumber required | string Номер номинального счета в Модульбанке |
Данные о бенефициарах
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) Сегмент данных о бенефициарных владельцах-нерезидентах |
{- "LegalEntityData": [
- {
- "Name": "ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ ЦВЕТОК",
- "Ogrn": "1234567898765",
- "Kpp": "123456789",
- "LegalAddress": "458769, Респ Хакасия, г Абакан, ул Пушкина, д 193, оф 10",
- "LeaderFullName": "Пучков Александр Иванович",
- "AccountNumber": "1234567",
- "Inn": "1234567898",
- "DocumentRequisites": "Заявление о присоединении к Правилам платформы «МодульДеньги» I-2069191 от 20.04.2020",
- "PhoneNumber": "+79251234567",
- "Email": "test@test.test"
}
], - "IndividualEntrepreneurData": [
- {
- "Ogrn": "1234567898745",
- "Passport": {
- "Surname": "Первушин",
- "FirstName": "Петр",
- "MiddleName": "Петрович",
- "Series": "1234",
- "Number": "123456",
- "NonResidentDateOfIssue": "2022-02-12T12:37:26.0321",
- "Issued": "Центральным РОВД Новокузнецкого УВД Кемеровской обл.",
- "IssuedNumber": "123-123",
- "DateOfIssue": "2020-07-01T00:00:00",
- "BirthDate": "1995-06-23T00:00:00",
- "BirthPlace": "",
- "Citizenship": "Российской Федерации",
- "CountryCode": "IncorrectValue",
- "Address": "г Нижний Новгород, пр-кт Октябкя, д 152, кв 1"
}, - "AccountNumber": "1234567",
- "Inn": "1234567898",
- "DocumentRequisites": "Заявление о присоединении к Правилам платформы «МодульДеньги» I-2069191 от 20.04.2020",
- "PhoneNumber": "+79221456230",
- "Email": "test@test.test"
}
], - "IndividualData": [
- {
- "Passport": {
- "Surname": "Первушин",
- "FirstName": "Петр",
- "MiddleName": "Петрович",
- "NonResidentNumber": "12345678",
- "NonResidentDateOfIssue": "2021-04-03T05:36:26.0321",
- "DateOfIssue": "2020-08-06T00:00:00",
- "BirthDate": "1986-08-30T00:00:00",
- "BirthPlace": "",
- "CountryCode": "KGZ",
- "Address": "г Нижний Новгород, пр-кт Октябкя, д 152, кв 1"
}, - "ConfirmingStayDocuments": [
- {
- "DocumentType": "Visa",
- "Series": "Series_123456789",
- "Number": "Number_123456789",
- "StartDate": "2015-09-03T00:00:00",
- "EndDate": "2023-03-15T00:00:00"
}
], - "AccountNumber": "1234567",
- "Inn": "1234567898",
- "DocumentRequisites": "Заявление о присоединении к Правилам платформы «МодульДеньги» I-2069191 от 20.04.2020",
- "PhoneNumber": "+79221456230",
- "Email": "test@test.test"
}
], - "NonResidentLegalEntityData": [
- {
- "RegistrationNumber": "123456",
- "RegistrationDate": "2022-02-12T12:37:26.0321",
- "RegistrationPlace": "1600 Pennsylvania Avenue NW, Washington, DC 20500, United States",
- "Name": "Apple TRc.",
- "LegalAddress": "One Apple Park Way, Cupertino, CA 95014, United States",
- "LeaderFullName": "Tim Cook",
- "AccountNumber": "123654",
- "Inn": "1234567898",
- "DocumentRequisites": "Договор № 123456 от 2020-02-02",
- "PhoneNumber": "+79832145687",
- "Email": "test@test.test"
}
]
}
{- "Error": false,
- "Message": {
- "IndividualEntrepreneurErrors": [ ],
- "IndividualErrors": [ ],
- "LegalEntityErrors": [ ],
- "NonResidentLegalEntityErrors": [ ]
}
}
nominalAccountNumber required | string Номер номинального счёта |
Строка в формате Base64 с отсоединённой подписью файла c отчётом
Signature | string Подпись в формате Base64 |
{- "Signature": "string"
}
nominalAccountNumber required | string Номер номинального счёта |
partId required | string <uuid> Id (Guid) части анкеты, которую нужно передать |
Строка в формате Base64 с отсоединённой подписью файла с этой частью анкеты
Signature | string Подпись в формате Base64 |
{- "Signature": "string"
}
nominalAccountNumber required | string Номер номинального счёта |
id required | string <uuid> Id отчета |
Строка в формате Base64 с отсоединённой подписью файла c отчётом
Signature | string Подпись в формате Base64 |
{- "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 (Требует уточнения)
Что делать, если не приходят/перестали приходить оповещения о платежах через веб-хуки?