# API-запросы

# Введение

Прежде чем начать работу с API IDnGO, все клиенты должны пройти аутентификацию, как это описано в разделе Начало работы.

Все несовместимые изменения в API будут сопровождаться новой версией и не повлияют на существующие эндпоинты. Однако мы можем добавлять новые поля в JSON-ответы без предварительного уведомления или изменения версии API. Поэтому не рекомендуется использовать мапперы объектов в коде интеграции, так как они не смогут обработать неизвестные свойства.

Внимание:

  • Все запросы к API должны выполняться через HTTPS — обычный HTTP отклоняется.
  • Ответы API возвращаются в формате JSON (если не указано иное). Когда необходимо передать данные, они должны быть предоставлены в формате корректного JSON (если не указано иное) с установленным заголовком Content-Type: application/json.

# Аутентификация

# POST Генерация токена доступа

При инициализации SDK необходимо использовать токен доступа accessToken. Для его получения нужно отправить запрос:

POST /resources/accessTokens?userId={userId}&levelName={levelName}

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

При инициализации SDK убедитесь, что для заголовков авторизации запроса используется пара appToken и secretKey, созданная в правильном окружении (Тестовое или Основное):

  • Для тестирования используйте пару appToken и secretKey, созданную в Тестовом окружении (Sandbox);
  • Для реальных проверок пару appToken и secretKey, созданную в Основном окружении (Production).

Параметры запроса

Название Тип Обязательно Описание
userId String Да Внешний идентификатор пользователя, который будет привязан к токену. Он соответствует externalUserId анкеты пользователя.
levelName String Да Название уровня верификации.
ttlInSecs Integer Нет Срок действия токена в секундах (по умолчанию — 600 секунд).
externalActionId String Нет Внешний идентификатор действия пользователя (actions), который будет привязан к токену.

Параметр запроса userId должен быть уникальным и осмысленным. Это может быть внешний идентификатор пользователя в вашей системе или адрес электронной почты. Не генерируйте эти идентификаторы случайным образом, если только вы не проводите тестирование.

Внимание:

Если ваш userId или levelName содержит зарезервированные символы (например, «@», «+»), его следует закодировать в URL, иначе вы можете столкнуться с несоответствием подписи.

Ответ

Название Тип Описание
token String Сгенерированный токен доступа для верификации пользователя.

Пример

# Ошибки

# GET Проверка состояния API и обработка ошибок

Вы можете проверить рабочее состояние сервиса с помощью запроса, приведённого ниже. Ответ с HTTP-статусом 200 подтверждает доступность API.

Запрос должен быть авторизован с использованием заголовков, описанных в разделе Аутентификация.

GET /resources/status/api

Ответ

При ошибках API возвращает стандартные коды HTTP-статусов.

Внимание:

У нас есть ограничение на количество запросов к API, которые вы можете отправить. Если от вас поступит слишком много запросов, мы будем выдавать код ошибки 429 Too Many Requests. Если вам необходимо отправлять большое количество запросов за короткий промежуток времени, пожалуйста, свяжитесь с нами.

Ответ содержит тело в формате JSON с дополнительной информацией об ошибке.

Тело ответа

Название Тип Обязательно Описание
description String Да Человекочитаемое описание ошибки.
code Integer Да HTTP-код ошибки.
correlationId String Да Уникальный идентификатор ошибки. Отправьте его нам при обращении в поддержку.
errorCode Integer Нет Код конкретной ошибки.
errorName String Нет Название ошибки. Всегда присутствует, если указан errorCode.

Пример

# Коды ошибок

Не все ошибки содержат errorCode и errorName. Со временем мы будем добавлять коды для новых типов ошибок.

Код Название Описание
1000 duplicate-document Загружен дубликат документа (изображения или видео). Учитывается полное совпадение.
1001 too-many-documents Анкета пользователя содержит слишком много документов. Добавление новых запрещено.
1002 file-too-big Загруженный файл слишком велик (более 64 МБ).
1003 empty-file Загруженный файл пуст (0 байт).
1004 corrupted-file Файл повреждён или имеет некорректный формат.
1005 unsupported-file-format Неподдерживаемый формат файла (например, .TIFF).
1006 no-upload-verification-in-progress Анкета пользователя проходит проверку, добавление новых данных невозможно.
1007 incorrect-file-size Размер файла не соответствует требованиям в настройках.
1008 applicant-marked-as-deleted Пользователь помечен как удаленный/неактивный. Действия в анкете запрещены.
1009 applicant-with-final-reject Пользователь окончательно отклонен (FINAL). Действия в анкете запрещены.
1010 doc-type-not-in-req-docs Попытка загрузить документ, который не входит в набор допустимых на уровне верификации.
3000 applicant-is-already-in-the-state Анкета уже находится в нужном состоянии.
4000 app-token-invalid-format Неверный формат значения X-App-Token.
4001 app-token-not-found AppToken не найден (например, токен Тестового окружения используется в Основном).
4002 app-token-private-part-mismatch Приватная часть токена (после точки) не совпадает с публичной частью.
4003 app-token-signature mismatch Закодированная подпись не соответствует содержанию запроса.
4004 app-token-request-expired X-App-Access-Ts не совпадает с количеством секунд, прошедших с эпохи Unix в UTC.
4005 app-token-invalid-value Переданы некорректные значения заголовков аутентификации.
4006 app-token-not-all-auth-params-provided Не все необходимые заголовки авторизации были предоставлены.
4007 app-token-invalid-params Переданы неверные параметры аутентификации.
5000 applicant-already-blacklisted Попытка внести в черный список пользователя, который уже внесен в черный список.
5001 applicant-already-whitelisted Попытка внести в белый список пользователя, который уже внесен в белый список.

Если всё же не удается решить возникшую проблему, пожалуйста, свяжитесь с нами указав correlationId ошибки.

# Анкета пользователя

# POST Создание анкеты пользователя

Анкета пользователя (англ. «Applicant») – это сущность, представляющая одного конкретного пользователя (физ. лицо) в нашей системе. Анкета содержит в себе данные, документы и изображения, которые необходимы для верификации пользователя согласно настроенному уровню проверки.

Чтобы создать анкету пользователя, используйте запрос:

POST /resources/applicants?levelName={levelName}

Параметры запроса

Название Тип Обязательно Описание
levelName String Да Название уровня верификации пользователя, которое задается в разделе «Уровни проверок» Дешборда.
#{body} Object Да Объект, представляющий пользователя (см. пример).

Внимание:

levelName чувствительно к регистру и должно быть создано в том же окружении, в котором создается анкета пользователя (Тестовом или Основном).

Тело запроса

Название Тип Обязательно Описание
externalUserId String Да Внешний идентификатор пользователя – уникальный идентификатор пользователя на вашей стороне.
sourceKey String Нет Если вы хотите разделить потоки пользователей, задайте это поле. Оно также отображается в полезных нагрузках вебхуков.
email String Нет Электронная почта пользователя.
phone String Нет Номер телефона пользователя.
lang String Нет Язык, на котором пользователь должен увидеть результат верификации в формате ISO 639-1.
metadata Array of objects Нет Дополнительная информация, которая не отображается конечному пользователю (пример: [{"key": "keyFromClient", "value": "valueFromClient"}]).
fixedInfo Object Нет Информация о пользователе, которая не изменяется с нашей стороны. Информация сверяется с данными, полученными из документов. Поля совпадают с info.

Поля элементов fixedInfo и info

Название Тип Обязательно Описание
firstName String Нет Имя.
lastName String Нет Фамилия.
middleName String Нет Второе имя/отчество.
firstNameEn String Нет Автоматическая транслитерация имени.
lastNameEn String Нет Автоматическая транслитерация фамилии.
middleNameEn String Нет Автоматическая транслитерация второго имени/отчества.
legalName String Нет Имя по паспорту.
gender String Нет Пол человека (M или F).
dob String Нет Дата рождения (форма YYYY-mm-dd).
placeOfBirth String Нет Место рождения.
countryOfBirth String Нет Страна рождения.
stateOfBirth String Нет Область/штат рождения.
country String Нет Трехбуквенный код страны Альфа-3 (например RUS).
nationality String Нет Трехбуквенный код страны Альфа-3 (например RUS).
addresses Array Нет Список адресов.
tin String Нет Идентификационный номер налогоплательщика (ИНН).

Поля элемента addresses

Название Тип Обязательно Описание
country String Нет Трехбуквенный код страны Альфа-3 (например RUS).
postCode String Нет Почтовый индекс.
town String Нет Название города или населенного пункта.
street String Нет Название улицы или полный адрес в зависимости от формата в документе.
subStreet String Нет Дополнительная информация об улице.
state String Нет Название области (округа/республики/штата и т.д.).
buildingName String Нет Номер дома.
flatNumber String Нет Номер квартиры.
buildingNumber String Нет Номер здания.

Внимание:

Сохраните ID анкеты пользователя (поле id ответа) после создания анкеты пользователя, так как оно понадобится для дальнейших запросов.

Пример

# POST Изменение уровня верификации

Данный запрос позволяет сменить один уровень верификации пользователя (набор шагов для проверки) на другой. Это может понадобиться в случае, когда нужно добавить еще один шаг к проверке.

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

POST /resources/applicants/{applicantId}/moveToLevel?name={levelName}

Внимание:

Обязательно проверьте статус анкеты пользователя перед изменением уровня. Вы не сможете этого сделать, если reviewStatus анкеты находится в состоянии pending, queued и onHold.

Если вы используете наши SDK, вы можете просто инициализировать его с подходящим levelName, и SDK изменит уровень автоматически.

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.
levelName String Да Название уровня верификации пользователя, которое настраивается в разделе «Уровни проверок» Дешборда.

Ответ

Будут выданы новые requiredIdDocs (список документов/селфи, необходимых для верификации) и levelName (название уровня).

Пример

Пример запроса с телом для изменения требуемого набора документов:

# POST Получение текущих настроек уровня верификации

Если вы хотите получить список необходимых для верификации документов/селфи (requiredIdDocs), используйте эндпоинт:

POST /resources/applicants/{applicantId}/requiredIdDocs

Пример

# POST Добавление документа, удостоверяющего личность

Ответ на запрос включает в себя: метаданные документа JSON и, опционально, фотографию документа. Если документ с таким же типом метаданных и страной уже существует, их данные будут объединены, существующие данные будут перезаписаны, а новое изображение будет добавлено в анкету пользователя. Если метаданные документа еще неизвестны, отправьте нам тип (idDocType) и страну (country), эти два поля являются обязательными. Например, «PASSPORT» и «RUS».

POST /resources/applicants/{applicantId}/info/idDoc

Заголовки запроса

Название Тип Значение
Content-Type String multipart/form-data
X-Return-Doc-Warnings Boolean true/false

Для добавления документов, подтверждающих адрес проживания (PoA), или удостоверения личности рекомендуется использовать заголовок X-Return-Doc-Warnings со значением true. Заголовок запроса позволяет определить, читаемы ли данные документа и подходят ли они прежде, чем переводить пользователя в статус ожидания (pending).

Внимание:

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

У некоторых типов документов idDocType данные располагаются на разных сторонах/разворотах (FRONT_SIDE и BACK_SIDE). Убедитесь, что отправили BACK_SIDE, если уже был отправлен FRONT_SIDE, иначе шаг верификации не будет завершен, и вы не сможете начать проверку. Если при загрузке одной из сторон документа возникает ошибка errors, оба изображения будут помечены как неактивные.

Так как это упрощенная и быстрая проверка, для некоторых типов документов она может не присылать ошибок, чтобы обеспечить лучшую конверсию.

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.

Тело запроса

Название Тип Обязательно Описание
metadata Object Да Объект, представляющий документ, удостоверяющий личность.
content Binary Нет Фотография документа.

Поля элемента metadata

Название Тип Обязательно Описание
idDocType String Да Список поддерживаемых типов документов.
idDocSubType String Нет FRONT_SIDE, BACK_SIDE или null.
country String Да Трехбуквенный код страны Альфа-3 (например RUS).
firstName String Нет Имя.
middleName String Нет Второе имя/отчество.
lastName String Нет Фамилия.
issuedDate String Нет Дата выдачи (формат YYYY-mm-dd).
validUntil String Нет Срок действия (формат YYYY-mm-dd).
number String Нет Номер документа.
dob String Нет Дата рождения.
placeOfBirth String Нет Место рождения.

Если у документа две необходимых стороны/разворота, отправьте два изображения и правильно настройте idDocSubType (FRONT_SIDE и BACK_SIDE).

Ответ

Мы можем изменить значения country и idDocType, которые были отправлены нам при загрузке изображения, поэтому, если это важно для вашего сервиса, обязательно сравните эти поля с нашим ответом.

JSON, содержащий дополнительную информацию о документе. В случае обнаружения проблем с изображением документа будет представлено сообщение из массива errors или warnings.

Внимание:

Предупреждения warnings и ошибки errors отображаются только для первых четырех попыток загрузить документ. В последующих случаях мы предполагаем, что документ должен быть проверен в рамках полного процесса верификации.

Идентификатор фотографии imageId, можно найти в заголовке ответа X-Image-Id.

Доступные значения массива errors

В случае получения ошибок (errors), загруженное изображение будет помечено как неактивное и не будет использоваться для верификации, нужно будет загрузить другое изображение, чтобы продолжить процесс проверки пользователя. Если при загрузке одной из сторон документа возникает ошибка errors, оба изображения будут помечены как неактивные.

Название Описание
forbiddenDocument Неподдерживаемые или неподходящие тип/страна документа.
differentDocTypeOrCountry Тип документа или страна не соответствуют тем, которые были отправлены с metadata, распознанный из изображения тип запрещен настройками.
missingImportantInfo Не все необходимые данные документа могут быть распознаны.
dataNotReadable Нет доступных данных для распознавания с изображения.
expiredDoc Срок действия документа истек.
documentWayTooMuchOutside Некоторые части документа не попали в кадр.
noIdDocFacePhoto Лицо плохо видно на изображении документа.
selfieFaceBadQuality Лицо плохо видно на селфи.
screenRecapture Изображение может быть фотографией экрана.
screenshot Изображение является снимком экрана.
sameSides Изображение одной и той же стороны документа было загружено как лицевая (FRONT_SIDE) и оборотная стороны (BACK_SIDE).
shouldBeMrzDocument Тип отправляемого документа должен иметь MRZ, но на изображении MRZ нет/не читается.
shouldBeDoubleSided Должны быть предоставлены две стороны отправляемого документа.
shouldBeDoublePaged Требуется полный разворот двух страниц документа (обычно две основные страницы паспорта).
documentDeclinedBefore Изображение уже было ранее загружено пользователем и отклонено.
mrzNotReadable Мы не смогли извлечь код MRZ из загруженного документа. Это может произойти по разным причинам, например, из-за плохого качества изображения или отсутствия MRZ в кадре.
docExpiresSoon Срок действия отправленного документа истекает через N месяцев. Это задает параметр «Минимальный остаточный срок действия документа» в разделе Интеграция SDK.
missingDob Документ не содержит даты рождения владельца.
incompleteDob Документ не содержит полной даты рождения (день, месяц и год).

Доступные значения массива warnings

Массив warnings предупреждает о том, что с документом может быть что-то не так.

Название Описание
badSelfie Убедитесь, что лицо и фотография в документе хорошо видны.
dataReadability Убедитесь, что информация в документе хорошо читается.
inconsistentDocument Убедитесь, что все загруженные фотографии относятся к одному и тому же документу.
maybeExpiredDoc Похоже, что срок действия вашего документа истек.
documentTooMuchOutside Убедитесь, что документ полностью соответствует фотографии.

Пример

В случаях, когда необходимо загрузить только данные документа:

# GET Получение данных о пользователе

В процессе верификации мы извлекаем данные из документов, удостоверяющих личность пользователя.

Чтобы получить данные, распознанные из предоставленных документов, воспользуйтесь одним из этих эндпоинтов.

GET /resources/applicants/{applicantId}/one

или, если вы не знаете applicantId, используйте:

GET /resources/applicants/-;externalUserId={externalUserId}/one

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.
externalUserId String Да Внешний идентификатор пользователя – уникальный идентификатор пользователя на вашей стороне.

Ответ

В ответе приходят данные анкеты пользователя, которая была создана вами или SDK, с дополнительной информацией в случаях, когда верификация была завершена. Массив объектов info.idDocs[] содержит информацию, извлеченную из документов пользователя. Наличие определенных полей зависит от документов, которые отправили на проверку, а также от правил верификации.

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

Чтобы убедиться, что данные были получены из актуального документа, проверьте, какие idDocType и country были одобрены при помощи этого эндпоинта.

Обратите внимание, что конкретные данные отображаются только в том случае, когда они были получены из документа или предоставлены пользователем.

# Основные поля ответа:

Название Тип Обязательно Описание
id String Да Идентификатор пользователя.
inspectionId String Да Идентификатор проверки.
externalUserId String Да Внешний идентификатор пользователя – уникальный идентификатор пользователя на вашей стороне.
sourceKey String Нет Если вы хотите разделить пользователей на группы, предоставьте это поле, чтобы различать их. sourceKey также отображается в полезных нагрузках вебхуков.
email String Нет Электронная почта пользователя.
phone String Нет Номер телефона пользователя.
lang String Нет Язык, на котором пользователь должен увидеть результат верификации в формате ISO 639-1.
metadata Array of objects Нет Дополнительная информация, которая не отображается пользователю (Пример: [{«key»: «keyFromClient», «value»: «valueFromClient»}]).
fixedInfo Object Нет Информация о пользователе, которая не изменяется с нашей стороны. Информация сверяется с данными, полученными из документов. Поля совпадают с info.
createdAt Date Да Время и дата создания пользователя (GMT).
requiredIdDocs Object Нет Набор необходимых для верификации пользователя документов и данных (например, шаги IDENTITY, SELFIE и соответствующие им документы: PASSPORT, ID_CARD и т.д.).
review Object Да Текущий статус пользователя.
questionnaires Array of objects Нет Данные о заполненной анкете. Более подробная информация здесь.

Поля элементов fixedInfo и info

Название Тип Обязательно Описание
firstName String Нет Имя.
lastName String Нет Фамилия.
middleName String Нет Второе имя/отчество.
firstNameEn String Нет Автоматическая транслитерация имени.
lastNameEn String Нет Автоматическая транслитерация фамилии.
middleNameEn String Нет Автоматическая транслитерация второго имени/отчества.
legalName String Нет Имя по паспорту.
gender String Нет Пол человека (M или F).
dob String Нет Дата рождения (формат YYYY-mm-dd).
placeOfBirth String Нет Место рождения.
country String Нет Трехбуквенный код страны Альфа-3 (например RUS).
nationality String Нет Трехбуквенный код страны Альфа-3 (например RUS).
addresses Array Нет Список адресов.
idDocs Array of objects Нет Набор данных, распознанных из загруженных документов.
tin String Нет Идентификационный номер налогоплательщика (ИНН).

Поля элемента addresses

Название Тип Обязательно Описание
country String Нет Трехбуквенный код страны Альфа-3 (например RUS).
postCode String Нет Почтовый индекс.
town String Нет Название города или населенного пункта.
street String Нет Название улицы или полный адрес в зависимости от формата в документе.
subStreet String Нет Дополнительная информация об улице.
state String Нет Название области (округа/республики/штата и т.д.).

Пример

# PATCH Изменение предоставленной информации (fixedInfo)

В fixedInfo вы можете передавать информацию о пользователе, которую необходимо сверить с полученными из документов данными. Эту информацию мы не можем редактировать самостоятельно, поэтому, если вы хотите изменить данные, которые вы нам предоставили, используйте метод PATCH.

PATCH /resources/applicants/{applicantId}/fixedInfo

Параметры запроса

Название Тип Обязательно Описание
#{body} Object Да Поля в атрибуте fixedInfo, которые должны быть изменены.
applicantId String Да Идентификатор пользователя.

Доступные атрибуты fixedInfo можно увидеть здесь.

Пример

# POST Запрос проверки пользователя

Автоматическое изменение статуса на pending работает только в наших SDK, поэтому как только все необходимые документы и данные будут загружены в анкету, сообщите системе, что пользователь готов к верификации. Запрос проверки пользователя также может понадобиться, если вам нужно запросить у нас повторную проверку пользователя.

С помощью данного эндпоинта вы можете перевести анкету пользователя в статус pending.

POST /resources/applicants/{applicantId}/status/pending?reason={reason}

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.
reason String Нет Причина изменения статуса.

Если возможно, укажите причину изменения статуса reason. Это поможет нам улучшить качество сервиса, мы можем автоматизировать этот процесс или, например, выполнять несколько дополнительных проверок.

Ответ

В случае получения HTTP-ответа 200 вы можете не обращать внимания на его тело.

Пример

# GET Получение изображений из анкеты пользователя

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

GET /resources/inspections/{inspectionId}/resources/{imageId}

Параметры запроса

Название Тип Обязательно Описание
inspectionId String Да Идентификатор проверки.
imageId String Да Идентификатор изображения.

Ответ

Двоичное содержимое, представляющее собой изображение, заголовок Content-Type точно описывает медиа-тип ответа.

Пример

# POST Добавление пользователя в черный список

Для занесения пользователя в черный список вы можете использовать этот эндпоинт.

POST /resources/applicants/{applicantId}/blacklist

Совет:

Проверьте, не была ли ранее эта анкета добавлена в черный список, в массиве rejectLabels[] этого пользователя не должны быть значения BLACKLIST или BLOCKLIST. Если вы попытаетесь добавить в черный список ранее добавленного пользователя, мы вернём HTTP-статус 400 с кодом ошибки 5000.

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.
note String Да Причина или примечание для пользователя, добавленного в черный список (в URL кодировке).

Ответ

В ответе будет указан пользователь, добавленный в черный список.

Пример

# POST Сброс одного из шагов верификации

В некоторых случаях требуется, чтобы пользователь повторно прошел шаг верификации. Данный эндпоинт позволит сделать шаг неактивным, чтобы проверка запустилась снова и можно было собрать новые данные.

Обратите внимание, что не все шаги верификации можно сбросить с помощью описанного ниже запроса.

POST /resources/applicants/{applicantId}/resetStep/{idDocSetType}

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.
idDocSetType String Да Название сбрасываемого шага.

Шаги верификации

Название Описание
PHONE_VERIFICATION Шаг проверки телефона.
EMAIL_VERIFICATION Шаг проверки электронной почты.
QUESTIONNAIRE Шаг проверки опросника.
APPLICANT_DATA Шаг проверки предоставленных данных.
IDENTITY Шаг проверки удостоверения личности.
IDENTITY2 Шаг проверки 2-го удостоверения личности.
IDENTITY3 Шаг проверки 3-го удостоверения личности.
IDENTITY4 Шаг проверки 4-го удостоверения личности.
PROOF_OF_RESIDENCE Шаг проверки подтверждения адреса проживания.
PROOF_OF_RESIDENCE2 Шаг проверки 2-е подтверждения адреса проживания.
SELFIE Шаг проверки селфи.
SELFIE2 Шаг проверки 2-го селфи.

Пример

# POST Сброс анкеты пользователя

В случаях, когда требуется изменить статус пользователя на init, например, если пользователь обратился в службу поддержки с запросом на повторное прохождение верификации с нуля с новыми документами, воспользуйтесь данным эндпоинтом.

Внимание:

Сброс пользователя с мошенническими данными – небезопасное действие.
Проверьте rejectLabels, сброс безопасен, если в нём отсутствуют следующие значения:

  • FORGERY
  • SELFIE_MISMATCH
  • BLACKLIST
  • BLOCKLIST
  • INCONSISTENT_PROFILE
  • FRAUDULENT_PATTERNS

Пожалуйста, сообщите нам, если вы планируете использовать этот эндпоинт — возможно, мы сможем предложить более подходящее решение.

POST /resources/applicants/{applicantId}/reset

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.

Пример

# PATCH Изменение информации верхнего уровня

Этот запрос исправляет информацию верхнего уровня о пользователе, такую как email, externalUserId, sourceKey, type. Тело запроса должно содержать только те поля, которые вы собираетесь изменить. Отсутствующие поля будут проигнорированы.

PATCH /resources/applicants

Тело запроса

Название Тип Обязательно Описание
id String Да Идентификатор пользователя.
externalUserId String Нет Новый внешний идентификатор для пользователя.
email String Нет Новая электронная почта.
phone String Нет Новый номер телефона.
sourceKey String Нет Новый ключ источника.
type String Нет Новый тип (individual/company).
lang String Нет Язык, на котором пользователь должен увидеть результат верификации в формате ISO 639-1.
questionnaires Array of objects Нет Конфигурация анкеты с ответами.
metadata Array of objects Нет Дополнительная информация о пользователе в пользовательских полях.
deleted Boolean Нет Значение true помечает пользователя как неактивного/удаленного. Пользователь не будет считаться дубликатом, и не будет инициализироваться его проверка.

Пример

# POST Импорт пользователей

Этот эндпоинт предназначен для импорта данных. Например, в случае, если у вас уже много пользователей и вы хотите перепроверить или сохранить последовательность данных.

Пожалуйста, сообщите нам, если вы планируете использовать этот эндпоинт — возможно, мы сможем предложить более подходящее решение.

POST /resources/applicants/-/ingestCompleted?levelName={levelName}

Параметры запроса

Название Тип Обязательно Описание
#{body} Object Да Объект, представляющий анкету пользователя.
levelName String Нет Уровень верификации пользователя, который настраивается в разделе «Уровни проверок» Дешборда.

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

Пример

# POST Назначение уровня риска для пользователя

Этот запрос позволяет вам задать уровень риска для пользователя по вашим собственным критериям.

POST /resources/applicants/{applicantId}/riskLevel/entries

Внимание:

Для выполнения этого запроса требуется специальное разрешение. Пожалуйста, обратитесь в службу технической поддержки IDnGO.

Тело запроса

Название Тип Обязательно Значение
comment String Да Любая строка.
riskLevel String Да unknown/low/medium/high

Пример

# POST Добавление тегов для пользователя

Используйте этот эндпоинт для присвоения пользовательских тегов профилям пользователей. Создать теги можно в разделе «Глобальные настройки» Дешборда.

POST /resources/applicants/{applicantId}/tags

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.
#{body} Array of Strings Да Массив строк пользовательских тегов.

Пример

# DELETE Пометка изображения как неактивного (удаленного)

Этот эндпоинт позволяет пометить загруженное изображение как удаленное. Его можно использовать в тех случаях, когда вы хотите, чтобы пользователи повторно загрузили документ, который ранее был одобрен.

Внимание:

Попытка пометить изображения как неактивные, пока пользователь находится в обработке (статусы pending, prechecked, queued), приведет к ошибке и HTTP-статусу 304.

DELETE /resources/inspections/{inspectionId}/resources/${imageId}

Параметры запроса

Название Тип Обязательно Описание
inspectionId String Да Идентификатор проверки.
imageId String Да Идентификатор изображения (подробнее здесь).

Query-параметры

Название Тип Обязательно Описание
revert Boolean Нет Задайте true, чтобы отменить неактивность изображения (вернуть фотографию). По умолчанию — false.

Ответ

В случае получения HTTP-ответа 200 вы можете не обращать внимания на его тело.

Пример

# Результаты проверки

# GET Получение статуса проверки пользователя (SDK)

При интеграции через SDK воспользуйтесь этим эндпоинтом, чтобы узнать статус проверки и причины отказа.

GET /resources/applicants/{applicantId}/status

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.

Ответ

Название Тип Обязательно Описание
createDate Date Да Дата создания анкеты пользователя.
reviewDate Date Нет Дата окончания проверки.
startDate Date Нет Дата начала проверки.
moderationComment String Нет Человекочитаемый комментарий, который может быть показан конечному пользователю.
clientComment String Нет Человекочитаемый комментарий, который не следует показывать конечному пользователю.
reviewStatus String Да Текущий статус проверки пользователя.

Доступные значения элемента ReviewStatus

Значение Описание
init Анкета создана, пользователь находится в процессе заполнения профиля /ожидается загрузка всех необходимых документов.
pending Анкета пользователя готова к обработке. В профиль пользователя загружены все необходимые документы и данные, анкета ожидает проверки.
prechecked Анкета пользователя проходит первичную проверку.
queued Анкета пользователя проходит финальную проверку.
completed Проверка завершена.
onHold Пользователь ожидает окончательного решения от специалиста по соблюдению нормативных требований (начата ручная проверка) или ожидает, пока все бенефициары пройдут KYC в случае верификации компании.

Результат проверки reviewAnswer доступен только после завершения проверки анкеты (reviewStatus: completed).

Пример

# GET Получение статусов для отдельных шагов верификации (API)

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

Некоторые типы отказов могут не влиять на статус документа, поэтому не забывайте проверять общий статус проверки пользователя и ответ.

GET /resources/applicants/{applicantId}/requiredIdDocsStatus

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.

Ответ

Ответ приходит в формате JSON, в котором содержится информация о прохождении шагов проверки. Каждый шаг содержит массив идентификаторов изображений (их может быть несколько, например, если было загружено две стороны).

Вы можете получить изображения с идентификаторами из ответа, отправив этот запрос.

Некоторые шаги могут не иметь результатов проверки в случае, если они зависят от проверки какого-то другого шага, например, шаг проверки PROOF_OF_RESIDENCE зависит от шага проверки удостоверения личности IDENTITY, поэтому проверка PROOF_OF_RESIDENCE может не проводиться до тех пор, пока IDENTITY не будет одобрен.

Пример

# GET Уточнение причины отказа

Для каждой причины отказа документов и отклонения пользователя мы задаем определенный buttonId, который вы можете получить при помощи данного запроса:

GET /resources/moderationStates/-;applicantId={applicantId}

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор пользователя.

Ответ

Название Тип Обязательно Описание
imagesStates Object Нет Содержит imageId и buttonId, которые указывают на причину отклонения фотографий или документов.
applicantState Object Нет Содержит buttonId, который указывает причину отклонения данных пользователя или самого пользователя.

imagesStates и applicantState присутствуют в ответе только в том случае, если пользователь был отклонён.

Доступный buttonId

{
  "spam": [], //Загружено слишком много изображений
  "redCrypto": [], //Криптотранзакции с высоким рисковым рейтингом
  "blackCrypto": [], //Переданы некорректные параметры для проверки криптотранзакции
  "applicantDataMismatch": [],
  "regulationsViolations": [
    "age", //Возраст не соответствует требованиям
    "duplicate", //У пользователя уже есть одобренная анкета
    "wrongRegion", //Регион или страна входит в список исключённых
    "foreigner", //Страна проживания не совпадает со страной банковской карты
    "crime", //У пользователя есть судимости
    "poorDrivingSkills", //Водительский стаж не соответствует требованиям
    "poorFinancialPosition", //Финансовое положение не соответствует требованиям
    "fines", //Сумма штрафов не соответствует требованиям
    "deprivations", //Обнаружены факты изъятия документов
    "notAllowedToDrive", //У пользователя нет права на вождение (специальная настройка)
    "diffDocPersons", //Предоставлены документы разных людей
    "inconsistency", //Предоставленная информация не совпадает с данными в документах
    "docNotFound", //Данные документа не найдены в базах данных
    "countriesMismatch", //Страна проживания не совпадает со страной банковской карты
    "riskBankCard", //Банковская карта с высоким уровнем риска
    "highRiskProfile", //Высокий поведенческий риск
    "spam", //Загружено слишком много изображений
    "blacklist" //Данные пользователя найдены в глобальном блок-листе
    "blocklist" //Данные пользователя найдены в вашем локальном блок-листе
  ],
  "automaticRegulations": [
    "wrongRegion", //Регион или страна входит в список исключённых
    "wrongProvince", //Провинция входит в список исключённых
    "wrongCountry" //Страна входит в список исключённых
  ],
  "specificClientRequirements": [
    "age", //Возраст не соответствует требованиям
    "notAllowedToDrive", //У пользователя нет права на вождение
    "anotherDocument" //Документ не поддерживается по индивидуальным требованиям
  ],
  "kycBlacklisted": [
    "compromisedDoc", //Использован украденный или утекший документ
    "physicalForgery", //Фото физически подделанного документа
    "digitalForgery", //Фото документа с цифровыми правками
    "creditCardFraud", //Мошенничество с банковской картой
    "anotherPersonsDoc", //Использован документ другого человека
    "multipleRegistration", //Повторная регистрация
    "forcedRegistration", //Регистрация была выполнена под давлением
    "financialFraud", //Финансовое мошенничество
    "clientRules", //Индивидуальная причина отказа (задано клиентом)
    "virtualCam" //Во время проверки использовалась виртуальная камера
  ]
  "dataMismatch": [
    "fullName", //Полное имя в профиле отсутствует или указано с ошибкой
    "dateOfBirth", //Дата рождения в профиле отсутствует или указана с ошибкой
    "address", //Проблема с адресом в профиле
    "inconsistency" //Имя держателя банковской карты не совпадает с именем в документе
  ],
  "fraudulentPatterns": [
    "selfieMismatch", //Селфи не совпадает с фото в документе
    "fake", //Подозрение на мошенничество
    "blacklist", //Аккаунт подозревается в подделке — найден в глобальном блок-листе
    "blocklist", //Аккаунт подозревается в подделке — найден в вашем локальном блок-листе
    "highRiskProfile", //Высокий поведенческий риск
    "physicalForgery", //Загружена физически подделанная копия документа
    "wantedDocument", //Документ находится в списке разыскиваемых или утерянных
    "livenessForced", //Обнаружены следы принуждения пользователя
    "deepFake" //Попытка обойти проверку с помощью дипфейка
  ],
  "moreDocs": [
    "individual", //Не предоставлены все обязательные документы
    "additionalPages" //Требуются дополнительные страницы документа
  ],
  "compromisedPersons": [ //Обнаружено совпадение с персоной из списков AML (подозрение подтверждено)
    "pep",
    "sanctionList",
    "criminalRecords",
    "adverseMedia"
  ],
  "company": [
    "moreDocs", //Не предоставлены все обязательные документы компании
    "notDeterminedBeneficiaries", //Не удалось определить бенефициаров
    "controlStructureIsNotEstablished",
    "notValidatedBeneficiaries", //Бенефициары не прошли проверку
    "notDeterminedRepresentatives", //Не удалось определить представителей
    "notValidatedRepresentatives", //Представители не прошли проверку
    "additionalInfo" //Требуется дополнительная информация о компании
  ],
  "checks": [
    "noInfoForChecks"
  ],
  "additionalPages": [ //Требуются дополнительные страницы или стороны документа
    "anotherSide",
    "frontSideId",
    "backSideId",
    "frontSideDl",
    "backSideDl",
    "frontSideTranslation",
    "backSideTranslation",
    "frontSideRp",
    "backSideRp",
    "mainPageId",
    "frontSideForeignId",
    "backSideForeignId",
    "localId",
    "registrationStamp",
    "2-3_IdDocPages",
    "4-5_IdDocPages",
    "6-7_IdDocPages",
    "8-9_IdDocPages",
    "10-11_IdDocPages",
    "12-13_IdDocPages",
    "30-31_IdDocPages",
    "selfie",
    "passport",
    "proofOfAddress",
    "birthCertificate"
  ],
  "badDocument": [ //Предоставлен неподходящий документ
    "expiredId", //Истек срок действия документа
    "invalidId", //Недействительный документ
    "damagedId", //Документ повреждён
    "notFullNameOrDob", //В документе отсутствует полное имя и/или дата рождения
    "withoutFace", //Лицо в документе плохо видно
    "dataNotVisible", //Необходимые данные документа не видны
    "copyOfIdDoc", //Предоставлена копия документа
    "noStamp", //Печать не видна
    "wrongType", //TТип документа не поддерживается или не принимается
    "unsigned", //Документ не подписан
    "needTranslation", //Требуется перевод документа на английский язык
    "fake", //Недостоверное удостоверение личности
    "expirationDate", //Документ должен быть действителен минимум 1 месяц после загрузки
    "inconsistency" //Имя владельца банковской карты не совпадает с именем в документе
  ],
  "badPhoto": [
    "lowQuality", //Низкое качество изображения
    "screenshot", //Загружен скриншот
    "blackAndWhite", //Требуется цветное фото или скан
    "imageEditor", //Обнаружено использование графического редактора
    "incomplete", //Все углы документа должны быть видны
    "notAPhoto", //Фото было преобразовано в PDF
    "idOnly", //Требуется только документ, удостоверяющий личность
    "faceNotFound",
    "fullDoublePage", //Разворот документа виден не полностью
    "frontSideId", //Требуется главный разворот документа
    "backSideId", //Требуется обратный разворот документа
    "frontSideDl", //Требуется лицевая сторона ВУ
    "backSideDl", //Требуется обратная сторона ВУ
    "mainIdDocPage",
    "2-3_IdDocPages",
    "4-5_IdDocPages",
    "6-7_IdDocPages",
    "frontSideNationalDl",
    "backSideNationalDl",
    "dataNotVisible", //Необходимые данные документа не видны
    "pdfFonts", //Обнаружены следы редактирования изображения
    "sticker", //Личная информация скрыта с помощью графического редактора
    "cardRequirements"
  ],
  "proofOfIdentity": [
    "passport", //Запрошен паспорт
    "idCard", //Запрошена ID-карта
    "drivingLicence", //Запрошено водительское удостоверение
    "residencePermit" //Запрошен вид на жительство
  ],
  "selfie": [
    "lowQuality", //Запрошено новое селфи с лучшим качеством изображения
    "selfieWithId", //Запрошено селфи с удостоверением личности
    "selfieWithPassport",
    "selfieWithDl",
    "selfieWithAnotherId", //Запрошено селфи с другим документом
    "selfieWithNewId", //Запрошено селфи с новым удостоверением личности
    "selfiePaper", //Запрошено селфи с листом бумаги с сегодняшней датой
    "blackAndWhite", //Запрошено цветное фото
    "badFaceComparison", //Плохое сравнение лиц
    "avatarIssue",
    "freshSelfie", //Запрошено актуальное селфи с текущей датой.
    "selfieLiveness", //Запрошена повторная проверка на живость лица
    "customIssue"
  ],
  "videoSelfie": [
    "lowQuality",
    "videoWithoutFace",
    "spokenPhraseMismatch",
    "videoWithId", //Запрошено видео-селфи с документом
    "videoWithAnotherId",
    "videoWithNewId"
  ],
  "profileImage": [
    "lowQuality",
    "wrongPhoto"
  ],
  "proofOfAddress": [
    "fullName", //Запрошено подтверждение адреса с полным именем пользователя
    "fullAddress", //Требуется документ с подходящей датой выдачи
    "issueDate", //Запрошен подходящий документ, подтверждающий адрес
    "listOfDocs", //Истек срок действия документа
    "expirationDate",
    "dataMismatch",
    "sameDoc", //Один и тот же документ был предоставлен как удостоверение личности и как подтверждение адреса
    "certifiedForm", //Запрошена заверенная форма документа, подтверждающего адрес
    "notEnoughData",
    "countryMismatch"
  ],
  "proofOfPayment": [
    "bankCard", //Высокорисковая банковская карт
    "bankStatement", //Запрошена выписка из банка
    "e-wallet", //Запрошено подтверждение электронного кошелька
    "wireTransfer", //Запрошено подтверждение банковского перевода
    "bankAccount", //Отсутствует номер счёта
    "dataMismatch"
  ],
  "bankCard": [
    "fullNameIssue", //Карта без имени пользователя
    "highRisk",
    "expirationDate",
    "badCard",
    "specificCard",
    "noCard"
  ],
  "bankStatement": [
    "fullNameIssue", //Запрошена выписка с полным именем пользователя
    "numberMismatch", //Номер карты в выписке не совпадает с предоставленной картой
    "invalidIssueDate", //Запрошена выписка с подходящей датой выдачи
    "notEnoughData" //Отсутствуют номер счёта или номер карты
  ],
  "differentDocs": [
    "identityDoc",
    "paymentMethodDoc"
  ],
  "graphicEditor": [
    "frontSide",
    "backSide",
    "selfie"
  ],
  "fake": [
    "printed", //Распечатанная копия документа
    "editedMrz", //Отредактированные MRZ-данные
    "blacklisted", //Документ или способ оплаты в чёрном списке
    "editedId", //Отредактированы основные данные документа
    "forgedId", //Поддельный физический документ
    "webId", //Образец документа из интернета
    "fakePoa", //Недостоверное подтверждение адреса
    "editedPoa", //Отредактированные данные адреса
    "fakeSelfie" //Селфи с поддельным документом
  ],
  "paymentsIssues": [
    "bankStatement",
    "bankBook",
    "emailScreen",
    "webScreen",
    "dataScreen"
  ],
  "livenessIssues": [
    "livenessDifferentPeople", //Во время проверки на живость обнаружены разные лица
    "livenessBypassAttempt" //Попытка обойти проверку на живость
  ]
}

Пример

# Тестирование API-интеграции

# POST Назначение результата проверки для пользователя в Тестовом окружении (Sandbox)

В Тестовом окружении (Sandbox) вы можете попробовать получить результаты проверки через вебхук applicantReviewed, но перед этим вам необходимо задать параметры проверки с помощью этого запроса.

POST /resources/applicants/{applicantId}/status/testCompleted

Параметры запроса

Название Тип Обязательно Описание
#{body} Object Да См. пример.
applicantId String Да Идентификатор пользователя.

Тело запроса

Название Тип Обязательно Описание
reviewAnswer String Да Укажите результат GREEN или RED, чтобы смоделировать нужный вам ответ.
rejectLabels Array of Strings Да Причины отказов.
reviewRejectType String Нет Выберите FINAL или RETRY, чтобы смоделировать типы отказов.
clientComment String Нет Человекочитаемый комментарий, который не следует показывать конечному пользователю.
moderationComment String Нет Человекочитаемый комментарий, который может быть показан конечному пользователю.

Ответ

В случае получения HTTP-ответа 200 вы можете не обращать внимания на его тело.

Пример

# Обмен пользователями между партнерскими сервисами

Если вы начинаете сотрудничество с другим нашим клиентом и хотите упростить и ускорить верификацию пользователей, отличным решением будет объединить ваши пользовательские базы через IDnGO. Подробнее об обмене пользователями в разделе О верификации

Внимание:

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

# POST Генерация shareToken

POST /resources/accessTokens/-/shareToken?applicantId={applicantId}&forClientId={clientId}

Параметры запроса

Название Тип Обязательно Описание
applicantId String Да Идентификатор вашего пользователя (сервис X).
forClientId String Да Идентификатор клиента, которому предназначается токен (сервис Y). Вы можете найти свой clientId в профиле пользователя или в ответе на запрос данных о пользователе.
ttlInSecs Integer Нет Продолжительность жизни токена в секундах (по умолчанию — 1200).

Ответ

В полученном JSON shareToken указан в поле token.

Пример

Пример получения shareToken (выполняется X):

# POST Импорт пользователя от сервиса-партнера

POST /resources/applicants/-/import?shareToken={shareToken}

Параметры запроса

Название Тип Обязательно Описание
shareToken String Да shareToken, сгенерированный X.
resetIdDocSetTypes String Нет Укажите один или несколько типов документов, разделенных запятыми, если пользователь должен повторно представить эти документы для проверки. Например, SELFIE, IDENTITY и т.д.
trustReview Boolean Нет Если вы доверяете результату проверки вашего сервиса-партнера, используйте true. При значении false пользователь будет проверен повторно (по умолчанию — false).
userId String Нет Задает ваш собственный externalUserId для импортируемого пользователя. В случае обнаружения пустого значения мы сгенерируем случайный userId.
levelName String Да Задает указанный levelName импортируемому пользователю и устанавливает статус init в случае, если присутствуют не все необходимые документы.

shareToken после использования будут считаться недействительными.

Ответ

В ответ приходит информация об анкете импортированного в сервис Y пользователя.

Внимание:

В ответе будет передан новый идентификатор пользователя. Сохраните его, если это необходимо.

Пример

Пример импорта пользователя (выполняется Y):

# Проверка отправителя вебхука

Подробнее о вебхуках в разделе Начало работы.

# POST Проверка отправителя вебхука

Чтобы проверить, что вы вычисляете контрольное значение (digest) тем же способом, что и мы, воспользуйтесь этим эндпоинтом. Он принимает текст в качестве тела и не может обрабатывать полезную нагрузку в формате JSON, как в реальных случаях.

POST /resources/inspectionCallbacks/testDigest?secretKey={secretKey}

Параметры запроса

Название Тип Обязательно Описание
#{body} String Да Любой текст.
secretKey String Да Секретный ключ, который может быть использован для подписи.

Ответ

Значение Описание
digest Контрольное значение.

Пример