Проверка бенефициаров перед выплатой
В целях безопасности Банк 131 обязан идентифицировать бенефициаров по номинальному счету. Через API можно проверить только бенефициаров-физических лиц, являющихся резидентами-получателями. Для проверки прочих бенефициаров данные необходимо передать Банку в excel-файле любым удобным способом.
Идентификация через API
Адрес сервера
Для тестирования операций: https://kyc-stage.bank131.ru/
Для операций с реальными данными: https://kyc.bank131.ru/
Посмотреть правила оформления запросов >
Подписание запросов
Предварительно настройте УКЭП:
- Получите усиленную квалифицированную электронную подпись (УКЭП) в любом удостоверяющем центре. Нерезиденты РФ могут использовать RSA.
Для тестирования можете создать сертификат в Тестовом УЦ КриптоПро.
- Установите КриптоПро CSP и добавьте сертификат в хранилище (например, по инструкции для Windows).
- Предоставьте Банку 131 список IP-адресов, с которых будете отправлять запросы.
- Передайте публичный ключ подписи персональному менеджеру Банка 131 для идентификации ваших запросов.
После настройки подписывайте каждый запрос следующим образом:
- Возьмите содержимое
payload, отсортируйте ключи по алфавиту и запишите в файл, используя кодировку UTF-8.
Пример записи содержимого payload в файл
import json
payload = {...}
payload_bytes = bytes(json.dumps(payload, sort_keys=True) + '\r\n', encoding='utf-8')
with open('payload_bytes.jsonb', 'wb') as f:
f.write(payload_bytes)
- Подпишите файл с помощью КриптоПро CSP (например, утилитой cryptcp).
Пример подписания файла
cryptcp -sign -display -thumbprint <отпечаток_ключа_для_подписи> -detached payload_json.json payload_json.sig
- Передайте содержимое файла подписи (payload_json.sig) в параметре
signatureзапроса.
Отправка данных на проверку
Отправьте запрос check с данными физического лица. В ответе вы получите идентификатор заявки. По нему можно узнать результат проверки.
- API v2
- API v1
Параметры запроса
| Название | Обязательность | Тип | Описание |
|---|---|---|---|
type | + | string | Тип получателя: FL_RESIDENT |
last_name | + | string | Фамилия |
first_name | + | string | Имя |
patronymic | - | string | Отчество |
birthday | + | string | Дата рождения в формате: ДД.ММ.ГГГГ. Получатель должен быть старше 18-ти лет |
birthplace | + | string | Место рождения |
citizenship | + | string | Гражданство в формате: ISO 3166-1 alpha-2 |
inn | + | string | ИНН: 12 цифр |
phone_number | + | string | Номер телефона в любом формате |
email | + | string | Действующий адрес электронной почты |
documents | + | array | Паспорт РФ: PASSPORT_RF |
type | + | string | Тип документа: PASSPORT_RF — паспорт РФ |
number | + | string | Серия и номер паспорта в формате: 1234567890 |
issuer | + | string | Кем выдан |
issuer_date | + | string | Дата выдачи в формате: ДД.ММ.ГГГГ |
issuer_code | + | string | Код подразделения |
address | + | string | Адрес регистрации |
postcode | - | string | Почтовый индекс |
agent_contract_number | + | string | Номер агентского договора с получателем |
agent_contract_date | + | string | Дата агентского договора с получателем в формате: ДД.ММ.ГГГГ. Дата должна быть меньше или равна текущей дате |
beneficial_owners | + | string | Сведения о бенефициарных владельцах: БВ отсутствуют |
public_officials | + | string | Принадлежность к ПДЛ: Нет |
Пример запроса
curl -X POST \
https://kyc.bank131.ru/api/v2/check \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "FL_RESIDENT",
"last_name": "Иванов",
"first_name": "Иван",
"patronymic": "Иванович",
"birthday": "01.01.1970",
"birthplace": "г. Новгород",
"citizenship": "RU",
"inn": "065553161159",
"phone_number": "+79000000000",
"email": "name@email.com",
"documents": [{
"type": "PASSPORT_RF ",
"number": "0234567890",
"issuer": "ОТДЕЛОМ УФМС РОССИИ",
"issuer_date": "01.01.2010",
"issuer_code": "123-000"
}],
"address": "г. Новгород, алл. Прибрежная, д. 53 стр. 9",
"postcode": "365826",
"agent_contract_number": "123456789-0",
"agent_contract_date": "01.01.2020",
"beneficial_owners": "БВ отсутствуют",
"public_officials": "Нет"
}'
Параметры ответа
| Название | Обязательность | Тип | Описание |
|---|---|---|---|
status | + | string | Статус идентификации. Возможные варианты: ok, error |
data | - | Data | Данные ответа |
id | - | number | Идентификатор запроса check |
description | - | string | Описание статуса запроса |
error | - | Error | Данные ошибки |
code | + | string | Код ошибки |
description | + | string | Описание ошибки |
Примеры ответов
- Успешный ответ
- Ответ с ошибкой
{
"status": "ok",
"data": {
"id": "7",
"description": "запрос добавлен в очередь"
}
}
{
"status": "error",
"error": {
"code": "partner_project_not_found",
"description": "partner project not found"
}
}
Параметры ответа на тестовый запрос
При тестировании результат проверки (значение status в ответе) определяется последней цифрой номера паспорта в параметре passport_number.
Последняя цифра passport_number | Значение status |
|---|---|
| Четный, включая 0 | ok |
| Нечетный | error |
Параметры запроса
| Название | Обязательность | Тип | Описание |
|---|---|---|---|
last_name | + | string | Фамилия |
first_name | + | string | Имя |
patronymic | - | string | Отчество |
birthday | + | string | Дата рождения в формате: ДД.ММ.ГГГГ. Получатель должен быть старше 18-ти лет |
birthplace | + | string | Место рождения |
inn | + | string | ИНН: 12 цифр |
phone_number | + | string | Номер телефона в любом формате |
email | + | string | Действующий адрес электронной почты |
identity_document | + | string | Тип документа: Паспорт гражданина РФ |
passport_number | + | string | Серия и номер паспорта в формате: 1234567890 |
issuer | + | string | Кем выдан |
issuer_date | + | string | Дата выдачи в формате: ДД.ММ.ГГГГ |
issuer_code | + | string | Код подразделения |
citizenship | + | string | Гражданство: РФ |
address | + | string | Адрес регистрации |
postcode | - | string | Почтовый индекс |
agent_contract_number | + | string | Номер агентского договора с получателем |
agent_contract_date | + | string | Дата агентского договора с получателем в формате: ДД.ММ.ГГГГ. Дата должна быть меньше или равна текущей дате |
beneficial_owners | + | string | Сведения о бенефициарных владельцах: БВ отсутствуют |
public_officials | + | string | Всегда: Нет |
migration_card | + | string | Всегда: - |
right_to_stay_in_rf | + | string | Всегда: - |
Пример запроса
curl -X POST \
https://kyc.bank131.ru/api/v1/check \
-H 'x-partner-project: test-partner-project' \
-H 'Content-Type: application/json' \
-H 'accept: application/json' \
-d '{
"payload": {
"inn": "065553161159",
"email": "name@email.com",
"issuer": "ОТДЕЛОМ УФМС РОССИИ",
"address": "г. Бобруйск, алл. Прибрежная, д. 53 стр. 9, 365826",
"birthday": "01.01.1970",
"postcode": "365826",
"birthplace": "г. Бобруйск",
"last_name": "Иванов",
"first_name": "Иван",
"patronymic": "Иванович",
"citizenship": "РФ",
"issuer_code": "123-000",
"issuer_date": "01.01.2010",
"phone_number": "+79000000000",
"migration_card": "-",
"passport_number": "0234567890",
"public_officials": "Нет",
"beneficial_owners": "БВ отсутствуют",
"identity_document": "Паспорт гражданина РФ",
"agent_contract_date": "01.01.2020",
"right_to_stay_in_rf": "-",
"agent_contract_number": "123456789-0"
},
"signature": "dkQzYwTExRc0RFWk1CY0dBMVVFQnd3UTBMTXVJTkNjMEw3Ug0NCmd..."
}'
Параметры ответа
| Название | Обязательность | Тип | Описание |
|---|---|---|---|
status | + | string | Статус идентификации. Возможные варианты: ok, error |
data | - | Data | Данные ответа |
id | - | number | Идентификатор запроса check |
description | - | string | Описание статуса запроса |
error | - | Error | Данные ошибки |
code | + | string | Код ошибки |
description | + | string | Описание ошибки |
Примеры ответов
- Успешный ответ
- Ответ с ошибкой
{
"status": "ok",
"data": {
"id": "7",
"description": "запрос добавлен в очередь"
}
}
{
"status": "error",
"error": {
"code": "partner_project_not_found",
"description": "partner project not found"
}
}
Параметры ответа на тестовый запрос
При тестировании результат проверки (значение status в ответе) определяется последней цифрой номера паспорта в параметре passport_number.
Последняя цифра passport_number | Значение status |
|---|---|
| Четный, включая 0 | ok |
| Нечетный | error |
Результат проверки
Чтобы узнать результат проверки, используйте метод check/{id}. Укажите в запросе идентификатор, полученный в ответе на запрос check. Обработка результата может занять от 10 минут до 2 суток.
- API v2
- API v1
Параметры запроса
Тело запроса пустое.
Пример запроса
curl -X GET \
https://kyc.bank131.ru/api/v2/check/7 \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
Параметры ответа
| Название | Обязательность | Тип | Описание |
|---|---|---|---|
status | + | string | Статус идентификации. Возможные варианты: ok, pending, error |
data | - | object | Данные ответа |
id | - | number | Идентификатор запроса check |
description | - | string | Описание статуса запроса |
error | - | object | Данные ошибки |
code | + | string | Код ошибки |
description | + | string | Описание ошибки |
Примеры ответов
- Успешный ответ
- Запрос в обработке
- Ответ с ошибкой
{
"status": "ok",
"data": {
"id": "7", // идентификатор запроса `check`
"description": "valid"
}
}
{
"status": "pending",
"data": {
"id": "7",
"description": "Check in progress"
}
}
{
"status": "error",
"error": {
"code": "already_exists",
"description": "Request with the same data already exists"
},
"data": {
"id": "7"
}
}
Параметры запроса
Тело запроса пустое.
Пример запроса
curl -X GET \
https://kyc.bank131.ru/api/v1/check/7 \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
Параметры ответа
| Название | Обязательность | Тип | Описание |
|---|---|---|---|
status | + | string | Статус идентификации. Возможные варианты: ok, pending, error |
data | - | object | Данные ответа |
id | - | number | Идентификатор запроса check |
description | - | string | Описание статуса запроса |
error | - | object | Данные ошибки |
code | + | string | Код ошибки |
description | + | string | Описание ошибки |
Примеры ответов
- Успешный ответ
- Запрос в обработке
- Ответ с ошибкой
{
"status": "ok",
"data": {
"id": "7", // идентификатор запроса `check`
"description": "valid"
}
}
Повторите запрос check/{id} с этими же данными чуть позже.
{
"status": "pending",
"data": {
"id": "7",
"description": "Check in progress"
}
}
Данные уже проверили.
{
"status": "error",
"error": {
"code": "already_exists",
"description": "Request with the same data already exists"
},
"data": {
"id": "7"
}
}
Статусы и коды ошибок
HTTP-коды ответа
| Код | Значение | Решение |
|---|---|---|
200 | Запрос сформирован правильно | Смотрите параметр status |
422 | Ошибка в запросе | Смотрите параметр error.description:- request_body_validation_error — ошибка в теле запроса;- request_header_validation_error — отсутствует заголовок x-partner-project |
500 | Ошибка на стороне Банка 131 | Повторите запрос позже |
Статусы ответа
Статусы ответа возвращаются в параметре status.
| Статус | Значение | Решение |
|---|---|---|
ok | Запрос выполнен успешно | Смотрите объект data |
pending | Запрос в обработке | Чтобы узнать результат, повторите запрос позже |
error | Ошибка в результате обработки запроса | Смотрите объект error |
Коды ошибок
Ошибки возвращаются в объекте error:
code— код ошибки;description— описание ошибки.
| Код | Описание | Вариант решения |
|---|---|---|
invalid_sign | Запрос с указанным идентификатором подписан некорректно | Проверьте формирование подписи запроса |
passport_validation_failure | В базе данных МВД отсутствуют сведения о предоставленном паспорте | Проверьте паспортные данные |
passport_validation_failure | По данным МДВ предоставленный паспорт признан недействительным | Проверьте паспортные данные |
inn_validation_failure | По данным ФНС предоставленный паспорт не соответствует предоставленному ИНН | Проверьте ИНН |
already_exists | Запрос на проверку с теми же данными был направлен ранее | Вы уже отправляли эти данные на идентификацию. Чтобы узнать результат, отправьте запрос check{id} с идентификатором предыдущей проверки из параметра data.id |
request_not_found | Не найден запрос с указанным идентификатором | Запрос на проверку с этим идентификатором не найден. Проверьте идентификатор |
partner_project_not_found | Возраст проверяемого лица ниже допустимого порога | Идентификатора проекта, отправленного в заголовке X-PARTNER-PROJECT, не существует. Проверьте идентификатор |
birthday_validation_failure | Возраст получателя ниже допустимого порога | Проверяемый должен быть совершеннолетним. Если вы получили эту ошибку при работе с номинальным счетом, обратитесь к персональному менеджеру |
validation_error | Запрос не прошел валидацию. Например: 1 validation error for Request.body → payload → documents → 2 → expire_date. Document MIGRATION_CARD is expired (type=value_error) | Ошибки формата или проверки передаваемых значений. Подробное описание передается в параметре description |
Примеры ответов с ошибками
- Паспорт недействителен
- Нет сведений о паспорте
- ИНН и паспорт не прошли проверку
{
"status": "error",
"error": {
"code": "passport_validation_failure",
"description": "По данным МДВ предоставленный паспорт признан недействительным"
}
}
{
"status": "error",
"error": {
"code": "passport_validation_failure",
"description": "В базе данных МВД отсутствуют сведения о предоставленном паспорте"
}
}
{
"status": "error",
"error": {
"code": "inn_validation_failure",
"description": "По данным ФНС предоставленный паспорт не соответствует предоставленному ИНН"
}
}