Перейти к основному содержимому

Создание процесса

MarkdownChatGPTClaude

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

  • Онбординг -- проверяет, кто является пользователем, сравнивая его лицо с базой идентификации Unico (требуются subject.duiType + subject.code).
  • Транзакционный -- проверяет, что это тот же человек из предыдущего процесса, сравнивая лицо с лицом (требуется referenceProcessId ИЛИ массив references с селфи / ID процесса).
  • Cardholder Verification -- подтверждает, что карта принадлежит заявленному держателю, без захвата селфи (требуются subject.code + card). Опционально повторно использует ранее проверенный процесс через referenceProcessId для запуска проверки повторного использования (gate); без этого поля ответ по умолчанию — unsure. См. возможность Cardholder Verification.

Активный продукт определяется APIKEY, отправленным в заголовке запроса.

Полный поток интеграции см. в Обзор API.

Эндпоинт​

ОкружениеURL
ProductionPOST https://api.id.unico.app/processes/v1
SandboxPOST https://api.id.uat.unico.app/processes/v1

Запрос​

Заголовки
ЗаголовокЗначение
AuthorizationBearer <access_token> (см. Аутентификация)
APIKEYПредоставленный API-ключ -- определяет активный продукт и включённые возможности.
Content-Typeapplication/json
Параметры тела запроса
ПолеТипОбязательныйОписание
subject.duiTypeintegerдаИдентификатор типа документа. См. значения duiType ниже.
subject.codestringдаЗначение идентификатора в соответствии с subject.duiType. Без точек и дефисов.
subject.namestringнетПолное имя.
subject.genderstringнетM или F.
subject.birthDatestring (ISO 8601)нетДата рождения (YYYY-MM-DD).
subject.emailstringнетАдрес электронной почты.
subject.phonestringнетНомер телефона в формате E.164.
subject.clientReferencestringусловноУникальный идентификатор пользователя в вашей системе. Обязателен для возможности Мультиаккаунт. Уникален в вашей базе, максимум 256 символов, без пробелов.
useCasestringнетКонтекст операции, например Onboarding.
subsidiaryIdstringнетИдентификатор филиала — требуется только при наличии нескольких филиалов.
imageBase64stringдаСелфи, захваченное вашим фронтендом, в формате base64.
Значения duiType
СтранаКодОписание
AR6Аргентинский паспорт
AR7Аргентинский DNI
AR49Аргентинское водительское удостоверение (Licencia Nacional de Conducir)
AT34Австрийский налоговый номер (STNR)
BE36Бельгийский национальный номер (NN)
BR1Бразильский CPF
BR5Бразильский паспорт
BR14Бразильский CNPJ
CA28Канадский SIN
CH33Швейцарский номер AHV/AVS
CL9Чилийский RUN
CL52Чилийский паспорт
CL57Чилийское водительское удостоверение (Licencia de Conducir)
CO26Колумбийский NIT
CO53Колумбийский паспорт
CO55Колумбийское водительское удостоверение (Licencia de Conducción)
CO56Колумбийское удостоверение личности гражданина (Cédula de Ciudadanía)
DE41Немецкий налоговый идентификационный номер (IdNr)
DK29Датский CPR
EC10Эквадорский NI
ES50Испанский номер иностранца (NIE)
ES51Испанский национальный документ, удостоверяющий личность (DNI)
FI35Финский код личной идентификации (HETU)
FR46Французский налоговый справочный номер (SPI)
GB30Британский номер национального страхования (NINO)
GT12Гватемальский CUI
ID16Индонезийский NIK
IE47Ирландский номер социального страхования (PPSN)
IT37Итальянский налоговый код (Codice Fiscale, CF)
LU48Люксембургский национальный идентификационный номер (Matricule)
MX2Мексиканский CURP
MX25Мексиканский RFC (физическое лицо)
MX58Мексиканское водительское удостоверение (Licencia de Conducir)
NG8Нигерийский NIN
NG20Нигерийский номер верификации банковского счёта (BVN)
NG43Токен BVN Нигерии (хешированный)
NG44Токен NIN Нигерии (хешированный)
NL42Голландский идентификационный номер гражданина (BSN)
NO39Норвежский национальный идентификационный номер (Fødselsnummer)
PE27Перуанский RUC
PE40Перуанский DNI
PE54Перуанский паспорт
PL31Польский PESEL
PT45Португальский налоговый идентификационный номер (NIF)
SE32Шведский личный номер (PNR)
SE38Шведский координационный номер (Samordningsnummer)
TR24Турецкий идентификационный номер (TCKN)
US4SSN США
US11Паспорт США
US18Водительское удостоверение США
US21Паспортная карта США
US22Поликарбонатный паспорт США
US23Идентификационная карта США
UY13Уругвайский CI
ZZ15Адрес электронной почты
ZZ17Номер телефона
—0Не указано
—3Внутренний идентификатор Unico
Требования к изображению
  • Минимальное разрешение: 640 x 480 (стандарт HD)
  • Максимальный размер файла: 800 КБ (рекомендуется сжатие JPEG92)
  • Допустимые форматы: PNG, JPEG, WebP
  • JWT-токены из SDK истекают через 10 минут и могут быть использованы только один раз
Сжатые запросы

API поддерживает отправку сжатого тела запроса с помощью стандартного HTTP-заголовка Content-Encoding. Это опционально и полностью обратно совместимо: клиенты, которые не отправляют этот заголовок, продолжают работать точно так же, как и раньше.

Поддерживаемые форматы
КодированиеЗаголовок Content-EncodingСтатус
Gzipgzip✅ Рекомендуется
Deflatedeflate✅ Поддерживается
Без сжатия(заголовок отсутствует)✅ Поддерживается (поведение по умолчанию)
Рекомендация

Используйте gzip. Он имеет наиболее универсальную поддержку среди языков и HTTP-библиотек, что избавляет от неоднозначностей реализации, присущих другим форматам.

Сжатие рекомендуется для запросов с большим телом (например, объёмные JSON-полезные нагрузки, загрузка изображений в base64, пакетная отправка данных). Для небольших запросов накладные расходы на сжатие могут не принести существенной выгоды.

Как отправить сжатый запрос
  1. Сжмите тело запроса (например, сериализованный JSON) выбранным алгоритмом.
  2. Отправьте сжатое тело как бинарные байты в запросе.
  3. Включите заголовок Content-Encoding с соответствующим значением (gzip или deflate).
  4. Оставьте Content-Type, описывающий исходный формат содержимого (например, application/json), а не транспортное кодирование.
echo '{"subject":{"code":"12345678909"},"useCase":"Onboarding","imageBase64":"/9j/4AAQSkZJR..."}' | gzip > body.json.gz

curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-H "Content-Encoding: gzip" \
--data-binary @body.json.gz
совет

Для примера на Python используйте параметр data=, а не json=. Параметр json= автоматически сериализует полезную нагрузку, но не сжимает её.

Использование deflate: процесс, описанный выше, идентичен — меняются только вызов сжатия и значение Content-Encoding.

Языкdeflate
Bash / cURLzlib-flate -compress < body.json > body.json.deflate (из qpdf), затем -H "Content-Encoding: deflate"
Pythonzlib.compress(data) вместо gzip.compress(data)
.NET (C#)System.IO.Compression.DeflateStream вместо GZipStream
deflate неоднозначен на практике

Кодирование содержимого deflate в HTTP определено как поток zlib (RFC 1950), но некоторые клиенты и серверы исторически используют или ожидают необработанный DEFLATE (RFC 1951). Этот API ожидает стандартный поток, обёрнутый в zlib, — тот же результат, который zlib.compress() (Python) или DeflateStream (.NET) выдают по умолчанию. Если не уверены, отдавайте предпочтение gzip, у которого такой неоднозначности нет.

Поведение при ошибке

Если Content-Encoding отправлен с неподдерживаемым значением, либо тело повреждено или недействительно для заявленного кодирования, API возвращает 400 Bad Request с сообщением о том, что не удалось распаковать тело запроса.

FAQ

Нужно ли что-то менять, если я не хочу использовать сжатие? Нет. Поддержка Content-Encoding является дополнительной — запросы без этого заголовка продолжают обрабатываться как обычно.

Влияет ли это на ответ API? Нет. Эта функциональность касается только тела, отправляемого клиентом (запроса). Сжатие ответа (то, что возвращает API) регулируется отдельно заголовком Accept-Encoding.

Какой формат следует выбрать? Используйте gzip, если только особые ограничения вашей среды не требуют другого формата.

Пример​

curl -X POST https://api.id.unico.app/processes/v1 \
-H "Authorization: Bearer $TOKEN" \
-H "APIKEY: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subject": {
"duiType": 1,
"code": "12345678909",
"name": "Luke Skywalker",
"gender": "M",
"birthDate": "2000-05-20",
"email": "[email protected]",
"phone": "5519725570707"
},
"useCase": "Onboarding",
"imageBase64": "/9j/4AAQSkZJR..."
}'

Ответы​

200 OK

Контракт единый — поле idCloud.result содержит консолидированный вердикт используемых возможностей.

Unico консолидирует результаты выполненных возможностей в единое поле idCloud.result, готовое для принятия решения о следующем шаге вашего флоу — без необходимости оркестрировать отдельные результаты.

{
"id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
"status": 3,
"idCloud": {
"result": "approved"
}
}
ПолеТипОписание
idstring (UUID)Идентификатор процесса. Используйте с Получением процесса для повторных запросов.
statusinteger1 (обработка), 3 (завершён успешно), 5 (ошибка).
Возможные значения результата
idCloud.resultЗначениеРекомендуемое действие
approvedРеальный человек и подтверждённая личность.Продолжить флоу.
deniedЛичность не подтверждена, проверка живости не пройдена или выявлен экстремальный риск.Завершить флоу или перенаправить на альтернативный флоу.
critical-riskВыявлен критический уровень риска.Завершить флоу или направить на ручную проверку.
high-riskВыявлен высокий уровень риска.Направить на ручную проверку или альтернативный флоу.
retryНедостаточно данных захвата или скора для оценки.Запросить у пользователя новый захват.
inconclusiveНедостаточно доказательств для вынесения вердикта.Направить на ручную проверку или альтернативный флоу.

Возвращаемые значения зависят от рецепта, настроенного в вашем APIKey. См. Потоки — значения результата, которые может вернуть каждый рецепт.

BrazilКлиенты в Бразилии могут получать ответ по возможностям

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

Интеграции в Бразилии могут получать открытые результаты по каждой возможности отдельно. Каждая возможность, включённая в APIKey, добавляет свой блок в ответ — поля для отключённых возможностей отсутствуют.

{
"id": "80371b2a-3ac7-432e-866d-57fe37896ac6",
"status": 3,
"unicoId": { "result": "yes" },
"riskLevel": { "result": "inconclusive" },
"idFace": {
"personId": "a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890",
"result": "FOUND"
},
"government": { "serpro": 87 },
"liveness": 1
}
Поля ответа зависят от вашего APIKey

Приведённый выше пример содержит все возможные поля возможностей. В реальном ответе будут только поля для возможностей, включённых в конфигурации вашего APIKey — поля для отключённых возможностей полностью отсутствуют. Свяжитесь с вашим менеджером проекта Unico для включения или изменения возможностей.

ПолеТипОписание
unicoId.resultstringyes, no, inconclusive -- см. Проверка личности.
riskLevel.resultstringapproved, reproved, risk-critical, risk-high, inconclusive -- см. возможные значения ниже или Классификация рисков мошенничества.
idFace.resultstringFOUND — см. Идентификатор лица.
idFace.personIdstringСтабильный непрозрачный идентификатор лица, возвращается вместе с idFace.result = FOUND. Если лицо не удаётся идентифицировать на изображении, запрос завершается ошибкой 20532 вместо возврата блока idFace.
identityFraudsters.resultstringУстарело. Используйте вместо него riskLevel. Клиенты с текущими интеграциями могут продолжать использовать это поле, согласовывая миграцию с командой проекта.
government.serprointegerОценка сходства Serpro (0--100, -1, -2). Доступно только в Бразилии. См. Результат проверки сходства Serpro.
livenessinteger1 (пройдено), 2 (не пройдено) -- см. Проверка живости.
riskLevel.result — возможные значения
ЗначениеОписание
approvedЭто лицо владельца удостоверения личности, и никаких признаков мошенничества не обнаружено.
reprovedРекомендуется отказ, поскольку обнаружено несколько индикаторов мошенничества.
risk-criticalРекомендуется отказ, однако окончательное решение остаётся за вами. Критический риск означает, что обнаружено не менее 2 веских признаков мошенничества.
risk-highОтказ также рекомендуется, однако решение остаётся за вами. Высокий риск означает, что обнаружен как минимум один весомый признак мошенничества.
inconclusiveВеских признаков мошенничества не обнаружено. Поэтому невозможно сделать однозначный вывод о наличии существенного риска.
информация

Когда unicoId.result = inconclusive и оркестрация Риск-скора активна, процесс может вернуть status: 1 (обработка). Опрашивайте Получение процесса или используйте вебхуки для получения финального результата.

MexicoКлиенты в Мексике могут получать блок RENAPO Verification

Структура ответа остаётся прежней, добавляется блок idGov.

Интеграции в Мексике с включённой RENAPO Verification получают дополнительный блок idGov с записью, которую RENAPO хранит по CURP пользователя. Это отдельный ответ, не связанный с результатом проверки личности.

{
"id": "11111111-2222-3333-4444-555555555555",
"status": 3,
"idCloud": { "result": "approved" },
"idGov": {
"government_valid": true,
"curp": "PUEA880304MDFRJN04",
"government_name": "ANA PRUEBA EJEMPLO",
"date_of_birth": "1988-03-04",
"age": 38,
"gender": "F",
"deceased": false,
"is_mexican": true,
"citizenship": "MEXICO",
"state_of_birth": "Ciudad de México",
"state_iso": "MX-CMX",
"issuing_entity_code": "DF",
"municipality_registration": ""
}
}
ПолеТипОписание
idGovobjectЗапись RENAPO по CURP. Отсутствует, если возможность не включена. {}, если RENAPO не ответил. Только Мексика. См. RENAPO Verification.

Коды ошибок​

КодСообщениеОписание
40221This flow does not support reusing a prior process (referenceProcessId or bioTokenId) without an image; send an image (imageBase64, or references[0] with type IMAGE_BASE64) instead.Поток повторного использования (referenceProcessId/bioTokenId, без изображения) был отклонён, поскольку повторное использование процесса не включено для этого API-ключа.
20900O base64 informado não é válido.Параметр base64 недействителен. Возможные причины: это не изображение или попытка инъекции.
20807A imagem precisa estar no padrão HD ou possuir uma resolução superior a 640 x 480.Разрешение загруженного изображения слишком низкое.
20532No face detected in image.Не удалось обнаружить лицо на отправленном изображении.
20513The referenced process was not found.referenceProcessId указывает на процесс, который не существует или более недоступен.
20512The referenced process is not available for reuse.Ссылочный процесс существует, но недоступен для повторного использования.
20509The subject.name field is invalid.subject.name содержит недопустимые символы.
20508The subject.gender field is invalid.subject.gender должен быть M или F.
20507O parâmetro subject.code é inválido.Нестандартный или несуществующий CPF.
20506O base64 informado é muito grande. O tamanho máximo suportado é até 800kb.Размер изображения превышает 800 КБ; сожмите до JPEG92.
20505O base64 informado não é suportado. Os formatos aceitos são png, jpeg e webp.Формат base64 недействителен или не поддерживается.
20065The referenceProcessId field is invalid.referenceProcessId не является действительным UUID.
20062The useCase field is invalid.Нераспознанное значение в поле useCase.
20024The referenceProcessId field is missing.Параметр referenceProcessId не указан, и references не отправлен в качестве альтернативы. Не применяется к Cardholder Verification — его referenceProcessId никогда не проверяется как обязательный; при невыполненном условии повторного использования возвращается unsure.
20533The card field is missing.Cardholder Verification: объект card не был предоставлен.
20534The card.bin field is missing.Cardholder Verification: card.bin не был предоставлен.
20535The card.last4 field is missing.Cardholder Verification: card.last4 не был предоставлен.
20536The card data is invalid.Cardholder Verification: данные карты были отклонены как недействительные.
20021The subject.phone field is invalid.Формат subject.phone недействителен (IDD + код региона + номер, 13 символов).
20019The subject.birthDate field is invalid.subject.birthDate не соответствует формату ISO 8601 (YYYY-MM-DD).
20009O parâmetro imagebase64 não foi informado.Отсутствует параметр изображения селфи.
20008The subject.email field is invalid.Недействительный формат email в subject.email.
20006O parâmetro subject.name não foi informado.Отсутствует параметр subject.name.
20005O parâmetro subject.code não foi informado.Отсутствует параметр subject.code.
20004O parâmetro subject não foi informado.Отсутствует параметр subject.
20003The request body is missing or invalid.Пустое или некорректное тело запроса.
20002O parâmetro APIKey não foi informado.Параметр APIKEY отсутствует в заголовке запроса.
20001O parâmetro authtoken não foi informado.Параметр токена интеграции отсутствует в заголовке запроса.
10508The JWT with the captured face has already been used.JWT может быть использован только один раз.
10507The JWT with the captured face is expired.JWT истёк; должен быть отправлен в течение 10 минут.
10506The imageBase64 field is not a valid JWT from SDK.imageBase64 не является действительным JWT, сгенерированным SDK.

Что дальше​

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