Обзор
Каждый отчёт по функции следует форме сериализатора V3, определённой вservice-didit-verification. Один и тот же объект встречается в трёх местах, поэтому схема, которую вы видите здесь, является единственным источником истины для всех них:
GET /v3/session/{sessionId}/decision/: каждая функция возвращается как массив во множественном числе (id_verifications[],nfc_verifications[],liveness_checks[],face_matches[],poa_verifications[],phone_verifications[],email_verifications[],aml_screenings[],ip_analyses[],database_validations[],questionnaire_responses[],signatures[],bank_verifications[](см. Методы верификации банка), а также KYB-аналогиregistry_checks[],document_verifications[],key_people_checks[]).- Payload webhook-событий (
status.updated,data.updated): та же форма внутри обёрткиdecision. - Отдельные API: ответы с одним объектом (Поиск по лицу, Оценка возраста, Биометрическая аутентификация) используют тот же набор полей.
V3 вводит многоэкземплярные сценарии: каждый объект функции содержит
node_id, который привязывает отчёт к узлу графа сценария, создавшему его. Эндпоинты V2 (с формами единственного числа kyc, face, aml и т. д.) сохраняют обратную совместимость, но возвращают только первый экземпляр.Общие поля
Каждый объект отчёта содержит следующие поля:| Поле | Тип | Описание |
|---|---|---|
status | строка | Статус жизненного цикла на уровне функции, один из вариантов в Перечисление статусов. Источник: common/config/choices.py:FeatureStatusChoices (строки 343-348). Верхнеуровневый status родительской сессии использует более широкий набор статусов сессии (StatusChoices, строки 106-117). |
node_id | строка | null | Идентификатор узла графа сценария. Заполняется для многоэкземплярных сценариев V3; null для устаревших сессий с одной функцией. |
warnings | массив объектов предупреждений | Сигналы риска, отфильтрованные по этой функции и node_id. Возвращаются методом Session.get_logs(...) (sessions/models/session.py:1611). |
portrait_image, front_image, document_file, …) являются предподписанными URL с ограниченным сроком действия. Скачивайте их сразу, а не сохраняйте URL. В примерах они показаны как https://<media-host>/....
Объект предупреждения
Возвращается в каждом массивеwarnings[]. Схема из logs/serializers/log.py:8-65 (LogV3Serializer).
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
feature | строка (перечисление) | Нет | Функция, которая сгенерировала предупреждение. Значения из LogWarningChoices (common/config/choices.py:190-204): ID_VERIFICATION, NFC, LIVENESS, FACEMATCH, PROOF_OF_ADDRESS, PHONE, EMAIL, AML, LOCATION, DATABASE_VALIDATION, QUESTIONNAIRE, KYB_REGISTRY, KYB_DOCUMENTS, KYB_KEY_PEOPLE. | "ID_VERIFICATION" |
risk | строка | Нет | Стабильный код риска (например, DOCUMENT_EXPIRED, LOW_LIVENESS_SCORE). Значения из logs/choices.py:RiskChoices. Используется как ключ в таблицах описаний. | "DOCUMENT_EXPIRED" |
additional_data | объект | null | Да | Контекст, специфичный для риска (например, пороговые значения оценок, совпавшие поля). Структура зависит от кода риска. | { "score": 42.1, "threshold": 70 } |
log_type | строка (перечисление) | Нет | Одно из значений error, warning, information. Из LogTypeChoices (common/config/choices.py:207-210). | "error" |
short_description | строка | Нет | Понятное название риска. Из logs/choices.py:RISK_SHORT_DESCRIPTIONS. | "Document expired" |
long_description | строка | Нет | Более подробное пояснение, понятное человеку и пригодное для показа конечным пользователям. Из logs/choices.py:RISK_LONG_DESCRIPTIONS. | "The document's expiration date has passed, rendering it no longer valid for use." |
node_id | строка | null | Да | Узел графа сценария, в отношении которого было создано предупреждение. null для устаревших логов V2 без node_id. | "first_id_verification" |
{
"feature": "ID_VERIFICATION",
"risk": "DOCUMENT_EXPIRED",
"additional_data": null,
"log_type": "error",
"short_description": "Document expired",
"long_description": "The document's expiration date has passed, rendering it no longer valid for use.",
"node_id": "first_id_verification"
}
Объекты отчётов
В остальных разделах описан каждый объект отчёта по отдельной функции. Текст заголовков H3 намеренно не меняется, чтобы на них могли ссылаться другие документы.Верификация личности
Возвращается для каждого KYC-/ID-документа, отправленного пользователем. Появляется какid_verifications[] в GET /v3/session/{sessionId}/decision/ и внутри поля kyc в ответах V2. Источник: kyc/serializers/kyc.py:383-414 (IDVerificationV3Serializer, наследует IDVerificationV2Serializer из kyc/serializers/kyc.py:320-380).
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
status | строка | Нет | См. Перечисление статусов. | "Approved" |
document_type | строка | Да | Понятное человеку название класса документа (Passport, Identity Card, Driver's License, Residence Permit, Health Insurance Card, Tax Card, Social Security Card, Work Permit, Visa, Public Service Card, Birth Certificate, Firearm License, Other). Источник: DOC_TYPE_MAPPING (common/config/choices.py:1275-1289). | "Passport" |
document_subtype | строка | Да | Код подтипа документа из реестра документов Didit, отфильтрованный в соответствии с тем, какие документы разрешены настройками документов сценария. Для документов, специфичных для региона, код содержит регион. Полный список кодов: Подтипы документов. | "QUEENSLAND_DRIVER_LICENSE_GENERIC" |
document_number | строка | Да | Номер документа, извлечённый с помощью OCR. | "AB1234567" |
personal_number | строка | Да | Личный или национальный идентификатор, извлечённый с помощью OCR. | "99999999R" |
portrait_image | строка (URL) | Да | Предподписанный URL на обрезанное изображение лица. | "https://<media-host>/.../portrait.jpg?..." |
front_image | строка (URL) | Да | Предподписанный URL на очищенное изображение лицевой стороны документа. | "https://<media-host>/.../front.jpg?..." |
front_video | строка (URL) | Да | Предподписанный URL на видео съёмки лицевой стороны (если доступно). | "https://<media-host>/.../front.mp4?..." |
back_image | строка (URL) | Да | Предподписанный URL на очищенное изображение оборотной стороны документа. | "https://<media-host>/.../back.jpg?..." |
back_video | строка (URL) | Да | Предподписанный URL на видео съёмки оборотной стороны. | null |
full_front_image | строка (URL) | Да | Необрезанная (полнокадровая) съёмка лицевой стороны. | "https://<media-host>/.../full_front.jpg?..." |
full_back_image | строка (URL) | Да | Необрезанная (полнокадровая) съёмка оборотной стороны. | null |
front_image_camera_front | строка (URL) | Да | Изображение с фронтальной камеры, снятое одновременно с лицевой стороной документа. | null |
back_image_camera_front | строка (URL) | Да | Изображение с фронтальной камеры, снятое одновременно с оборотной стороной документа. | null |
front_image_camera_front_face_match_score | число с плавающей точкой (0-100) | Да | Степень сходства между портретом из документа и снимком с фронтальной камеры. | null |
back_image_camera_front_face_match_score | число с плавающей точкой (0-100) | Да | То же, что выше, но для съёмки оборотной стороны. | null |
document_selfie_face_matches | массив | Да | Предыдущие сессии или записи списка блокировки лиц, совпадающие с селфи, сделанным при съёмке документа. Формат записей тот же, что у liveness_checks[].matches. null, если поиск не выполнялся, [], если совпадений нет. | null |
front_image_quality_score | объект | Да | Метрики качества изображения лицевой стороны: оценки от 0 до 100 (focus_score, brightness_score, resolution_score, overall_score), а также brightness_issue (ok, too_dark, too_bright) и is_document_fully_visible (логическое значение). | { "focus_score": 91.0, "overall_score": 88.5 } |
back_image_quality_score | объект | Да | Структура такая же, как у front_image_quality_score. | null |
date_of_birth | строка (YYYY-MM-DD) | Да | Дата рождения, извлечённая с помощью OCR. | "1990-05-12" |
age | целое число | Да | Возраст в годах на момент извлечения. | 35 |
expiration_date | строка (YYYY-MM-DD) | Да | Дата окончания срока действия документа. | "2032-05-11" |
date_of_issue | строка (YYYY-MM-DD) | Да | Дата выдачи документа. | "2022-05-11" |
issuing_state | строка (ISO 3166-1 alpha-3) | Да | Код страны выдачи. | "ESP" |
issuing_state_name | строка | Да | Локализованное название страны выдачи. | "Spain" |
first_name | строка | Да | Имя (имена), извлечённое с помощью OCR. | "María" |
last_name | строка | Да | Фамилия (фамилии), извлечённая с помощью OCR. | "García López" |
full_name | строка | Да | Полное нормализованное имя (предоставляется поставщиком). | "María García López" |
gender | строка | Да | M, F или другое значение, предоставленное поставщиком. | "F" |
address | строка | Да | Необработанная строка адреса, извлечённая с помощью OCR. | "Calle Mayor 1, 28001 Madrid" |
formatted_address | строка | Да | Геокодированный или отформатированный адрес (если его удалось разобрать). | "Calle Mayor 1, 28001 Madrid, Spain" |
parsed_address | объект | Да | Структурированный геокодированный адрес: street_1, street_2, city, region, country, postal_code, address_type, formatted_address, document_location ({latitude, longitude}), raw_results, is_best_match. Источник: kyc/utils/address.py:147-197. | { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001", "country": "ES" } |
place_of_birth | строка | Да | Место рождения, извлечённое с помощью OCR. | "Madrid" |
marital_status | строка | Да | Указывается, если его можно извлечь. | null |
nationality | строка (ISO 3166-1 alpha-3) | Да | Гражданство, извлечённое с помощью OCR. | "ESP" |
extra_fields | объект | Да | Поля, специфичные для типа документа, которых нет в канонической схеме (например, категории водительских прав). | { "DL Class": "B" } |
mrz | объект | Да | Разобранные поля MRZ, если они есть (document_number, birth_date, expiry_date, surname, given_names, …). | { "document_number": "AB1234567", "surname": "GARCIA", "given_names": "MARIA" } |
extra_files | массив строк (URL) | Нет | Предподписанные URL на любые дополнительно загруженные файлы. | [] |
matches | массив объектов | Нет | Совпадения документов между сессиями. Каждый элемент: { session_id, session_number, vendor_data, verification_date, user_details: { name, document_type, document_number }, status, is_blocklisted, api_service, front_image_url }. front_image_url является предподписанным. | [] |
verification_method | string | Нет | Метод верификации личности, который создал эту строку: document, id_lookup или wallet. Для фотографии документа всегда document, включая все сессии, созданные до появления других методов. | "id_lookup" |
assurance | string | Нет | Уровень гарантии, выведенный из verification_method: documentary, data_match или cryptographic. | "data_match" |
wallet_provider | string | null | Да | Идентификатор кошелька из каталога, если строку создал кошелёк (mitid, bankid_se, itsme, …). В остальных случаях null. | "mitid" |
fallback_from | object | null | Да | Причина, по которой метод, отличный от документа, завершил шаг ID: { method, reason, action }. Заполняется, когда запрос к реестру или вход через кошелёк не прошли: в отклонённой строке, если переключатель страны был decline (action: "decline"), и в проверке документа, которую продолжает пользователь, если был fallback_to_document (action: "fallback_to_document"). null, если ранее не зафиксировано ни одного сбоя метода, отличного от документа. | { "method": "id_lookup", "reason": "no_match", "action": "decline" } |
id_lookup | object | null | Да | Данные об источнике, присутствуют только если verification_method равен id_lookup: source (точный запрошенный источник: в большинстве стран государственный реестр, в некоторых файл бюро кредитных историй или регистр адресов), checked_at, attempts, max_attempts, outcome (match, partial_match, no_match, provider_error, format_rejected), comparison[] ({ field, label, provided, record, result }; field принимает одно из значений identification_number, full_name, date_of_birth, address, а result принимает значение match, partial или no_match; в более ранних релизах может быть строка provider с error), source_errors[] (текущий staging: отдельная диагностика источников; подтвердите раскатку в продакшн), registry_portrait (предподписанный URL, только для источников, которые его возвращают) и face_match_score. | см. ниже |
wallet_verification | object | null | Да | Данные удостоверения из учётных данных, присутствуют только если verification_method равен wallet: provider, provider_name, issuing_authority, issuing_country, credential_type, level_of_assurance (low, substantial, high), verified_at, signature_valid, attributes (что передал кошелёк), portrait (предподписанный URL, когда кошелёк передаёт изображение лица) и face_match_score. | см. ниже |
document_liveness | object | null | Да | Оценки живости документа по типам мошенничества (portrait_replace, printed_copy, screen_replay), возвращаются независимо от того, сработало ли предупреждение. Для каждого: score (0-100, чем выше, тем вероятнее подлинность; используется наименьшее из двух значений сторон, то есть значение, использованное при принятии решения), front, back, decline_threshold, review_threshold, bucket (approve, review, decline или null). Пороги и категория сохраняются на момент оценки; все три равны null, если данные исторической оценки недоступны, при этом сохранённые оценки остаются видимыми. null, если проверка не выполнялась. См. Оценки живости документа. Только V3. | { "portrait_replace": { "score": 96.46, "bucket": "approve" } } |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_id_verification" |
warnings | array | Нет | См. Объект предупреждения. | [] |
region | string | Да | Регион или штат страны выдачи, если документ его указывает. | "CA" |
extracted_data | object | Да | Снимок данных, извлечённых из документа и показанных пользователю для проверки, хранится рядом с подтверждёнными значениями, чтобы вы могли их сравнить. null, если пользователя не просили проверить данные. | |
barcodes | массив объектов | Нет | Данные, считанные со штрихкодов документа: по одной записи на штрихкод с type, position, data, data_raw и side. [], если штрихкодов нет. | [] |
{
"status": "Approved",
"document_type": "Passport",
"document_subtype": "PASSPORT_GENERIC",
"document_number": "AB1234567",
"personal_number": "99999999R",
"portrait_image": "https://<media-host>/.../portrait.jpg?signature=...",
"front_image": "https://<media-host>/.../front.jpg?signature=...",
"front_video": null,
"back_image": "https://<media-host>/.../back.jpg?signature=...",
"back_video": null,
"full_front_image": "https://<media-host>/.../full_front.jpg?signature=...",
"full_back_image": null,
"front_image_camera_front": null,
"back_image_camera_front": null,
"front_image_camera_front_face_match_score": null,
"back_image_camera_front_face_match_score": null,
"front_image_quality_score": {
"focus_score": 91.0,
"brightness_score": 88.0,
"brightness_issue": "ok",
"is_document_fully_visible": true,
"resolution_score": 95.0,
"overall_score": 88.5
},
"back_image_quality_score": null,
"date_of_birth": "1990-05-12",
"age": 35,
"expiration_date": "2032-05-11",
"date_of_issue": "2022-05-11",
"issuing_state": "ESP",
"issuing_state_name": "Spain",
"first_name": "María",
"last_name": "García López",
"full_name": "María García López",
"gender": "F",
"address": "Calle Mayor 1, 28001 Madrid",
"formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"parsed_address": { "street_1": "Calle Mayor 1", "street_2": null, "city": "Madrid", "region": "Madrid", "postal_code": "28001", "country": "ES", "address_type": "Calle" },
"place_of_birth": "Madrid",
"marital_status": null,
"nationality": "ESP",
"extra_fields": {},
"mrz": {
"document_number": "AB1234567",
"surname": "GARCIA",
"given_names": "MARIA",
"birth_date": "900512",
"expiry_date": "320511"
},
"extra_files": [],
"matches": [],
"node_id": "first_id_verification",
"verification_method": "document",
"assurance": "documentary",
"wallet_provider": null,
"fallback_from": null,
"id_lookup": null,
"wallet_verification": null,
"document_liveness": {
"portrait_replace": {
"score": 96.46,
"front": 96.46,
"back": 98.2,
"decline_threshold": 35,
"review_threshold": 70,
"bucket": "approve"
},
"printed_copy": {
"score": 91.2,
"front": 91.2,
"back": 93.7,
"decline_threshold": 35,
"review_threshold": 77,
"bucket": "approve"
},
"screen_replay": {
"score": 99.9,
"front": 99.9,
"back": 99.5,
"decline_threshold": 30,
"review_threshold": 70,
"bucket": "approve"
}
},
"warnings": []
}
null.
{
"status": "Approved",
"issuing_state": "ZAF",
"first_name": "Thabo",
"last_name": "Mokoena",
"full_name": "Thabo Mokoena",
"date_of_birth": "1991-06-15",
"personal_number": "9106155043088",
"node_id": "first_id_verification",
"verification_method": "id_lookup",
"assurance": "data_match",
"wallet_provider": null,
"fallback_from": null,
"id_lookup": {
"source": "Department of Home Affairs",
"checked_at": "2026-09-04T09:12:44Z",
"attempts": 1,
"max_attempts": 2,
"outcome": "match",
"comparison": [
{ "field": "identification_number", "label": "ID number", "provided": "9106155043088", "record": "9106155043088", "result": "match" },
{ "field": "full_name", "label": "Full name", "provided": "Thabo Mokoena", "record": "Thabo Mokoena", "result": "match" },
{ "field": "date_of_birth", "label": "Date of birth", "provided": "1991-06-15", "record": "1991-06-15", "result": "match" }
],
"registry_portrait": "https://<media-host>/.../registry_portrait.jpg?signature=...",
"face_match_score": 96.4
},
"wallet_verification": null,
"warnings": []
}
{
"status": "Approved",
"issuing_state": "DNK",
"first_name": "Freja",
"last_name": "Nielsen",
"full_name": "Freja Nielsen",
"date_of_birth": "1988-03-02",
"node_id": "first_id_verification",
"verification_method": "wallet",
"assurance": "cryptographic",
"wallet_provider": "mitid",
"fallback_from": null,
"id_lookup": null,
"wallet_verification": {
"provider": "mitid",
"provider_name": "MitID",
"issuing_authority": "Danish Agency for Digital Government",
"issuing_country": "DNK",
"credential_type": "person_identification",
"level_of_assurance": "substantial",
"verified_at": "2026-09-04T09:12:44Z",
"signature_valid": true,
"attributes": {
"full_name": "Freja Nielsen",
"date_of_birth": "1988-03-02",
"cpr_alias": "b0f1c2d3-e4f5-4678-9abc-def012345678"
},
"portrait": null,
"face_match_score": null
},
"warnings": []
}
NFC-верификация
Возвращается для каждого чтения чипа документа, удостоверяющего личность: ePassport или eID-чип ICAO 9303 либо карта Japan My Number Card, считанная через JPKI (chip_protocol: "jpki"). Появляется как nfc_verifications[] в GET /v3/session/{sessionId}/decision/ (по одной на родительскую запись KYC). Источник: kyc/serializers/epassport.py:121-139 (NFCV3Serializer, расширяет NFCV2Serializer в kyc/serializers/epassport.py:83-118).
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
status | string | Нет | См. Перечисление статусов. | "Approved" |
portrait_image | string (URL) | Да | Предподписанный URL изображения лица, извлечённого из чипа. | "https://<media-host>/.../nfc_portrait.jpg?..." |
signature_image | string (URL) | Да | Предподписанный URL изображения подписи, извлечённого из чипа (если оно хранится на чипе). | null |
chip_data | object | Да | Персональные данные, разобранные из Data Groups чипа, в плоском виде (kyc/utils/epassport.py:165-212): dgs (прочитанные Data Groups), surname, name, country, nationality, birth_date (YYYY-MM-DD), expiry_date (YYYY-MM-DD), sex (M/F), document_type (код документа из MRZ), document_number, optional_data, контрольные цифры MRZ (birth_date_hash, expiry_date_hash, document_number_hash, optional_data_hash, final_hash), mrz_string, mrz_type (TD1/TD2/TD3); а также place_of_birth и address (и full_name / full_name_non_latin для имён на нелатинице), если чип содержит DG11. В остальных случаях этих ключей нет. null, если шаг NFC был пропущен. | { "document_number": "AB1234567", "name": "MARIA" } |
authenticity | object | Да | { sod_integrity, dg_integrity }; null для чтения через JPKI. sod_integrity проверяет, что подпись Document Security Object (SOD) восходит к действительному CSCA страны выдачи (и DSC не отозван и не истёк). dg_integrity проверяет, что хэши каждой Data Group соответствуют SOD. Если оба значения true, чип подлинный и не был изменён. | { "sod_integrity": true, "dg_integrity": true } |
certificate_summary | object | Да | Сводка сертификата подписанта документа (kyc/utils/epassport.py:338-348): issuer, subject, serial_number (integer), not_valid_before, not_valid_after (YYYY-MM-DD HH:MM:SS), а также объект validation { csca_verified, dsc_revoked, dsc_expired, csca_expired } (kyc/views/epassport.py:86). | { "issuer": "Common Name: CSCA SPAIN, Country: ES", "not_valid_after": "2031-02-18 10:21:11" } |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_nfc" |
is_nfc_skipped | boolean | Нет | true, если этот шаг NFC был явно пропущен, а не считан; skip_reason объясняет причину. | false |
skip_reason | string | Да | Причина пропуска шага, задаётся только когда is_nfc_skipped равен true. Одно из значений: USER_SKIPPED, DOCUMENT_WITHOUT_CHIP, CHIP_CERTIFICATE_UNAVAILABLE, DEVICE_WITHOUT_NFC, INTEGRATION_WITHOUT_NFC_ACCESS, MRZ_KEY_UNAVAILABLE, JPKI_UNAVAILABLE; см. Причины пропуска. Payload решения также содержит nfc_skip_reason уровня сессии с той же таксономией, который охватывает шаги NFC, пропущенные до создания какого-либо отчёта. | null |
chip_protocol | string | Нет | Способ чтения чипа: icao (чип ICAO 9303 ePassport или eID) или jpki (карта My Number Card Японии). Для jpki поля portrait_image, signature_image, chip_data, authenticity и certificate_summary равны null. Также задаётся для пропущенных шагов. | "icao" |
jpki | object | Да | Что подтвердило чтение карты My Number Card: certificate_types, chain_valid, signature_valid, revocation_status (good, revoked или unchecked), ca_generation, certificate_expires_at, certificates[], attributes (имя, дата рождения, пол и адрес из сертификата подписи), attributes_match_ocr и mismatched_attributes. Никогда не содержит сами сертификаты, их серийные номера или подписи. null для чипов ICAO, для пропущенных шагов и когда шаг завершился без считывания карты. См. Поля JPKI. | null |
warnings | array | Нет | См. Объект предупреждения. | [] |
{
"status": "Approved",
"portrait_image": "https://<media-host>/.../nfc_portrait.jpg?signature=...",
"signature_image": null,
"chip_data": {
"dgs": ["DG1", "DG2", "DG11"],
"surname": "GARCIA LOPEZ",
"name": "MARIA",
"country": "ESP",
"nationality": "ESP",
"birth_date": "1990-05-12",
"expiry_date": "2032-05-11",
"sex": "F",
"document_type": "P",
"document_number": "AB1234567",
"optional_data": "",
"birth_date_hash": "4",
"expiry_date_hash": "7",
"document_number_hash": "3",
"optional_data_hash": "",
"final_hash": "8",
"mrz_string": "P<ESPGARCIA<LOPEZ<<MARIA<<<<<<<<<<<<<<<<<<<<AB1234567ESP9005124F3205117<<<<<<<<<<<<<<08",
"mrz_type": "TD3",
"place_of_birth": "MADRID",
"address": "CALLE MAYOR 1, MADRID"
},
"authenticity": { "sod_integrity": true, "dg_integrity": true },
"certificate_summary": {
"issuer": "Common Name: CSCA SPAIN, Organization: DIRECCION GENERAL DE LA POLICIA, Country: ES",
"subject": "Common Name: DS n-eID SPAIN 2, Organizational Unit: PASSPORT, Organization: DIRECCION GENERAL DE LA POLICIA, Country: ES",
"serial_number": 118120836164494130086420187336801405660,
"not_valid_before": "2020-11-18 10:21:11",
"not_valid_after": "2031-02-18 10:21:11",
"validation": {
"csca_verified": true,
"dsc_revoked": false,
"dsc_expired": false,
"csca_expired": false
}
},
"node_id": "first_nfc",
"is_nfc_skipped": false,
"skip_reason": null,
"chip_protocol": "icao",
"jpki": null,
"warnings": []
}
Проверка живости
Возвращается для каждой сессии проверки живости. Появляется какliveness_checks[] в GET /v3/session/{sessionId}/decision/. Источник: face/serializers/face.py:301-320 (LivenessV3Serializer, расширяет LivenessV2Serializer в face/serializers/face.py:216-298).
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
status | string | Нет | См. Перечисление статусов. | "Approved" |
method | string (перечисление) | Да | ACTIVE_3D, FLASHING или PASSIVE (LivenessMethodChoices, common/config/choices.py:514-517). Пассивная проверка запускается, когда разрешены сессии на десктопе и пользователь находится на десктопе. | "PASSIVE" |
score | float (0-100) | Да | Уверенность проверки живости, округлённая до 2 знаков после запятой. | 92.41 |
reference_image | string (URL) | Да | URL с предварительной подписью обрезанного изображения лица пользователя. | "https://<media-host>/.../reference.jpg?..." |
video_url | string (URL) | Да | URL с предварительной подписью записи проверки живости, если при съёмке она была сохранена. Относится как к активной, так и к пассивной проверке. null, если сессия не сохранила запись. | "https://<media-host>/.../liveness.webm?..." |
age_estimation | float | Да | Оценочный возраст (в годах) самого крупного лица на эталонном изображении. | 34.2 |
matches | массив объектов | Нет | Совпадения лиц между сессиями. Каждый элемент: { session_id, session_number, similarity_percentage, vendor_data, vendor_user_id, biometric_template_id, verification_date, user_details: { full_name, document_type, document_number }, match_image_url, status, is_blocklisted, is_allowlisted, api_service, source }. source принимает значения session, imported, list_entry или retained_template. Совпадение с сохранённым шаблоном содержит vendor_user_id, vendor_data и biometric_template_id; его поля сессии, изображения, данных личности, статуса и API-сервиса равны null. | [] |
face_quality | float (0-100) | Да | Оценка качества лица для пассивной проверки живости (нормализована в процентах). | 87.50 |
face_luminance | float (0-100) | Да | Оценка освещённости лица для пассивной проверки живости (нормализована из диапазона 0-255 в проценты). | 54.12 |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_liveness" |
warnings | массив | Нет | См. Объект предупреждения. | [] |
{
"status": "Approved",
"method": "PASSIVE",
"score": 92.41,
"reference_image": "https://<media-host>/.../reference.jpg?signature=...",
"video_url": null,
"age_estimation": 34.2,
"matches": [],
"face_quality": 87.50,
"face_luminance": 54.12,
"node_id": "first_liveness",
"warnings": []
}
null, если сессия запись не сохранила: пример выше относится к сессии без записи.
Сравнение лиц
Возвращается для каждого сравнения лиц (обычно лица пользователя из проверки живости с портретом из документа). Появляется какface_matches[] в GET /v3/session/{sessionId}/decision/. Источник: face/serializers/face.py:367-389 (FaceMatchV3Serializer, расширяет FaceMatchV2Serializer в face/serializers/face.py:323-364).
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
status | string | Нет | См. Перечисление статусов. | "Approved" |
score | float (0-100) | Да | Степень сходства, округлённая до 2 знаков после запятой. Если провайдер возвращает только unmatched_faces[].Confidence, значение пересчитывается как 100 - confidence. | 97.83 |
source_image_session_id | string (UUID) | Да | Сессия, сохранённый портрет которой использован как исходное (эталонное) изображение. Заполняется в сценариях на основе портрета: биометрическая аутентификация или портрет, переданный при создании сессии. null, если эталоном служит портрет из документа этой же сессии. | null |
source_image | string (URL) | Да | URL с предварительной подписью исходного (эталонного) изображения: обычно портрет из документа или, в сценариях биометрической аутентификации, сохранённый портрет. | "https://<media-host>/.../source.jpg?..." |
target_image | string (URL) | Да | URL с предварительной подписью целевого изображения (живого лица), снятого во время проверки живости. | "https://<media-host>/.../target.jpg?..." |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_face_match" |
warnings | массив | Нет | См. Объект предупреждения. | [] |
face_coverage | объект | Да | Закрыты ли eyes, mouth и face на снятом изображении. Каждая область содержит covered, calibrated и visibility_score; calibrated: false означает наличие признаков тени, которые не вызывают предупреждений. Возвращается только в GET /v3/session/{sessionId}/decision/, никогда в payload webhook. | { "eyes": { "covered": false, "calibrated": true, "visibility_score": 0.98 } } |
{
"status": "Approved",
"score": 97.83,
"source_image_session_id": null,
"source_image": "https://<media-host>/.../source.jpg?signature=...",
"target_image": "https://<media-host>/.../target.jpg?signature=...",
"node_id": "first_face_match",
"warnings": []
}
Поиск по лицу
Возвращается отдельным API поиска по лицу (POST /v3/face-search/). Поиск по лицу никогда не возвращается в виде массива в /v3/session/{sessionId}/decision/. Если указано save_api_request=true, сессия отображается там как элемент FACE_SEARCH в features[] и как элемент liveness_checks[] с сохранёнными matches. Источники: apis/serializers/face_search.py:8-79 (FaceSearchResponseSerializer, который оборачивает FaceSearchDetailsSerializer); словари совпадений формируются в face/utils/utils.py:869-884.
Ответ верхнего уровня:
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
request_id | строка (UUID) | Нет | Идентификатор сохранённой сессии, если указано save_api_request=true (его можно использовать с GET /v3/session/{sessionId}/decision/). В остальных случаях это временный UUID для корреляции. | "4a1c2c4e-8b1b-4d6a-91b5-ee9a1f3a2c7f" |
face_search | объект | Нет | Объект с данными поиска. См. поля ниже. | — |
vendor_data | строка | Да | Значение vendor_data из запроса, возвращённое без изменений. | null |
metadata | объект | Да | Значение metadata из запроса, возвращённое без изменений. | null |
created_at | строка (ISO 8601) | Нет | Временная метка запроса на стороне сервера. | "2026-06-12T01:04:42.763237+00:00" |
face_search:
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
status | строка | Нет | Declined возвращается только тогда, когда сработало предупреждение FACE_IN_BLOCKLIST или POSSIBLE_FACE_IN_BLOCKLIST. В остальных случаях возвращается Approved: одни только дубликаты совпадений никогда не приводят к отклонению (apis/views/face_search.py:242-248). | "Approved" |
total_matches | целое число | Нет | Количество совпадений, возвращённых в matches[] (от 0 до 5). | 1 |
matches | массив объектов совпадений поиска по лицу | Нет | До 5 совпадений с сходством не ниже минимального порога, отсортированных по убыванию сходства. Записи из списка блокировки идут первыми, с search_type=blocklisted_or_approved. | […] |
user_image | объект | Нет | Результат детекции для отправленного изображения: { entities: [{ bbox, confidence }], best_angle }. Одна сущность на каждое обнаруженное лицо. | { "entities": [{ "bbox": [40, 40, 120, 120], "confidence": 0.73 }], "best_angle": 0 } |
warnings | массив объектов | Нет | Сокращённая структура предупреждений для этого отдельного API, без node_id. Контракт сериализатора объявляет { risk, additional_data, log_type, short_description, long_description } (apis/serializers/face_search.py:49-54). В реальном ответе также присутствует feature со значением всегда "LIVENESS" (apis/views/face_search.py:332-341). | [] |
Объект совпадения поиска по лицу
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
session_id | строка (UUID) | Да | Идентификатор совпавшей сессии верификации. Равен null, если source имеет значение imported, list_entry или retained_template. | "a3f2a6f1-…" |
session_number | целое число | Да | Номер совпавшей сессии, удобный для консоли. Для совпадений, не связанных с сессией, равен null. | 1024 |
similarity_percentage | число с плавающей точкой (0-100) | Нет | Степень сходства между отправленным лицом и совпавшим лицом. | 96.42 |
source | строка (перечисление) | Нет | Источник, из которого было зарегистрировано совпавшее лицо: session (сессия верификации или сохранённый отдельный вызов), imported (лицо, загруженное напрямую в профиль пользователя), list_entry (лицо, добавленное в список), retained_template (биометрический шаблон без изображения, сохранённый после удаления исходной сессии). | "session" |
vendor_data | строка | Да | Значение vendor_data совпавшей сессии или значение связанного пользователя для совпадений imported и retained_template. | "user-12345" |
vendor_user_id | строка (UUID) | Да | Связанный пользователь. Равен null для совпадений list_entry и для сессий без пользователя. | "2f7c1a9e-…" |
biometric_template_id | строка (UUID) | Да | Сохранённый шаблон, с которым произошло совпадение. Заполняется только для совпадений retained_template. Используйте его с GET или DELETE /v3/biometric-templates/{id}/. | null |
verification_date | строка (ISO 8601) | Да | Момент, когда было снято совпавшее лицо, или момент сохранения retained_template. Равен null для совпадений list_entry. | "2024-11-04T09:14:02Z" |
user_details | объект | Да | { full_name, document_type, document_number } из верификации документа совпавшей сессии. Для совпадений imported заполнено только full_name. Равен null, если данных личности нет, и всегда равен null для совпадений retained_template. | { "full_name": "María García López", "document_type": "Passport", "document_number": "AB1234567" } |
match_image_url | строка (URL) | Да | Эталонное лицо совпавшего пользователя: URL с предварительной подписью, если указано save_api_request=true, иначе исходный путь в хранилище. Всегда равен null для совпадений retained_template, так как они не содержат изображения. | "https://<media-host>/.../matched.jpg?..." |
status | строка | Да | Статус верификации совпавшей сессии (см. перечисление статусов). Равен null для совпадений, не связанных с сессией. | "Approved" |
is_blocklisted | логическое значение | Нет | Находится ли совпавшее лицо в вашем списке блокировки лиц. Всегда false для совпадений retained_template. Лицо из блокировки указывается отдельно как совпадение list_entry. | false |
is_allowlisted | логическое значение | Нет | Находится ли совпавшее лицо в одном из ваших списков разрешённых. | false |
api_service | строка (перечисление) | Да | Тип отдельного API в верхнем регистре для совпавшей сессии (например, PASSIVE_LIVENESS, FACE_MATCH). Равен null для сессий сценария и для совпадений, не связанных с сессией. | null |
{
"request_id": "4a1c2c4e-8b1b-4d6a-91b5-ee9a1f3a2c7f",
"face_search": {
"status": "Approved",
"total_matches": 1,
"matches": [
{
"session_id": "a3f2a6f1-1c1c-4eec-8b69-1c1c2f3a2c7f",
"session_number": 1024,
"similarity_percentage": 96.42,
"source": "session",
"vendor_data": "user-12345",
"verification_date": "2024-11-04T09:14:02Z",
"user_details": {
"full_name": "María García López",
"document_type": "Passport",
"document_number": "AB1234567"
},
"match_image_url": "https://<media-host>/.../matched.jpg?signature=...",
"status": "Approved",
"is_blocklisted": false,
"is_allowlisted": false,
"api_service": null
}
],
"user_image": {
"entities": [
{
"bbox": [40, 40, 120, 120],
"confidence": 0.732973
}
],
"best_angle": 0
},
"warnings": []
},
"vendor_data": null,
"metadata": null,
"created_at": "2026-06-12T01:04:42.763237+00:00"
}
AML-скрининг
Возвращается для каждой проверенной сущности. Появляется какaml_screenings[] в GET /v3/session/{sessionId}/decision/ для сессий KYC и KYB. Источник: aml/serializers/aml.py:63-85 (AMLV3Serializer, наследует AMLV2Serializer из aml/serializers/aml.py:28-60).
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
status | строка | Нет | См. перечисление статусов. | "Approved" |
total_hits | целое число | Нет | Количество срабатываний скрининга. Поле всегда присутствует и по умолчанию равно 0. | 2 |
entity_type | строка (перечисление) | Да | person или company (EntityTypeChoices, common/config/choices.py:675-677). | "person" |
hits | массив объектов | Нет | Одна запись на каждое срабатывание. Основные поля: id, caption, match (логическое значение), target (bool | null: является ли сущность прямой целью записи в списке), match_score (число с плавающей точкой от 0 до 100: уверенность в совпадении личности), risk_score (число с плавающей точкой от 0 до 100: риск сущности), score (устаревшее число с плавающей точкой от 0 до 1), datasets[] (например, PEP, PEP Level 1-4, Sanctions, Adverse Media, Warnings and Regulatory Enforcement, Fitness and Probity), properties (имена, псевдонимы, даты рождения и т. д.), features, url, first_seen, last_seen, rca_name, risk_view, score_breakdown, pep_matches, sanction_matches, warning_matches, adverse_media_matches, adverse_media_details, linked_entities, additional_information и review_status (Unreviewed, Confirmed Match, False Positive, Inconclusive; изменяется через эндпоинт обновления статуса срабатывания AML, AMLHitStatusChoices). | […] |
score | float (0-100) | Да | Общая оценка скрининга: наивысший risk_score среди совпадений, не помеченных как False Positive (aml/services/aml.py:832-842); 0, если все совпадения являются ложными срабатываниями. null, пока не вычислена. | 42.7 |
screened_data | object | Да | Снимок данных, отправленных на скрининг: full_name, nationality, date_of_birth, document_number. | { "full_name": "María García López", "date_of_birth": "1990-05-12" } |
is_ongoing_monitoring_enabled | boolean | Нет | Подписан ли субъект на повторные проверки в рамках постоянного мониторинга. | false |
next_ongoing_monitoring_bill_date | string (YYYY-MM-DD) | Да | Вычисляется как last_aml_bill_date + 365 days, когда постоянный мониторинг включён. Это дата биллинга, а не дата скрининга. | null |
last_ongoing_screening_at | string (ISO 8601) | Да | Когда постоянный мониторинг в последний раз завершил повторную проверку этой записи, независимо от того, изменился ли результат. null, если повторная проверка не выполнялась; никогда не заполняется задним числом. | "2026-09-12T04:03:11Z" |
last_ongoing_screening_datasets_updated_at | string (ISO 8601) | Да | Самое последнее обновление набора данных AML, о котором провайдер сообщил для этой проверки. null, если дата набора данных не была передана; никогда не оценивается. | null |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_aml" |
warnings | array | Нет | См. Объект предупреждения. | [] |
{
"status": "In Review",
"total_hits": 1,
"entity_type": "person",
"hits": [
{
"id": "Q7XW3-aml-hit-1",
"caption": "Maria Garcia Lopez",
"match": true,
"target": true,
"match_score": 86.4,
"risk_score": 42.7,
"datasets": ["PEP Level 2"],
"properties": {
"name": ["María García López", "M. García"],
"alias": ["Maria Garcia"],
"birthDate": ["1990-05-12"]
},
"url": "https://example.org/registry/entities/Q7XW3",
"first_seen": "2023-11-02T00:00:00Z",
"last_seen": "2026-05-01T00:00:00Z",
"review_status": "Unreviewed"
}
],
"score": 42.7,
"screened_data": {
"full_name": "María García López",
"date_of_birth": "1990-05-12",
"nationality": "ES",
"document_number": "AB1234567"
},
"is_ongoing_monitoring_enabled": false,
"next_ongoing_monitoring_bill_date": null,
"last_ongoing_screening_at": null,
"last_ongoing_screening_datasets_updated_at": null,
"node_id": "first_aml",
"warnings": []
}
Анализ IP
Возвращается для каждого зафиксированного сетевого местоположения. Появляется какip_analyses[] в GET /v3/session/{sessionId}/decision/ для сессий KYC и KYB. Источник: kyc/serializers/location.py:196-243 (IPAnalysisSerializerV3).
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
status | string | Нет | См. Перечисление статусов. | "Approved" |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_ip_analysis" |
device_brand | string | Да | Бренд устройства, определённый по user agent. | "Apple" |
device_model | string | Да | Модель устройства. | "iPhone" |
browser_family | string | Да | Семейство браузера. | "Mobile Safari" |
os_family | string | Да | Семейство ОС. | "iOS" |
platform | string | Да | Общая платформа (mobile, desktop, tablet). | "mobile" |
device_fingerprint | string | Да | Стабильный хеш отпечатка устройства. | "f2a3…" |
ip_country | string | Да | Название страны, определённое по IP. | "Spain" |
ip_country_code | string (ISO 3166-1 alpha-2) | Да | Код страны, определённый по IP. | "ES" |
ip_state | string | Да | Регион или штат, определённые по IP. | "Comunidad de Madrid" |
ip_city | string | Да | Город, определённый по IP. | "Madrid" |
latitude | float | Да | Широта, определённая по IP. | 40.4168 |
longitude | float | Да | Долгота, определённая по IP. | -3.7038 |
ip_address | string | Да | Зафиксированный адрес. | "203.0.113.42" |
isp | string | Да | Название интернет-провайдера (ISP). | "Telefonica de Espana" |
organization | string | Да | Название организации (часто совпадает с ISP). | "Telefonica de Espana" |
is_vpn_or_tor | boolean | Да | true, если IP принадлежит VPN, прокси или выходному узлу Tor. | false |
is_data_center | boolean | Да | true, если IP принадлежит известному ASN хостинга или дата-центра. | false |
time_zone | string | Да | Название часового пояса IANA. | "Europe/Madrid" |
time_zone_offset | string | Да | Смещение от UTC. | "+02:00" |
ip | object | Нет | { location, distance_from_id_document, distance_from_poa_document }. location = { latitude, longitude }. Расстояния в км, null, если данных с любой из сторон нет. | { "location": { "latitude": 40.4168, "longitude": -3.7038 }, "distance_from_id_document": 3.4, "distance_from_poa_document": 1.1 } |
id_document | object | Нет | { location, distance_from_ip, distance_from_poa_document }. Местоположение документа, удостоверяющего личность, определённое по issuing_state и разобранному адресу. | { "location": { "latitude": 40.4165, "longitude": -3.7026 }, "distance_from_ip": 3.4, "distance_from_poa_document": 4.0 } |
poa_document | object | Нет | { location, distance_from_ip, distance_from_id_document }. Адрес из подтверждения адреса (POA), геокодированный. | { "location": { "latitude": 40.4170, "longitude": -3.7040 }, "distance_from_ip": 1.1, "distance_from_id_document": 4.0 } |
matches | array of objects | Нет | Совпадения по IP и устройству между сессиями. Каждый элемент: { session_id, session_number, vendor_data, verification_date, match_type, match_source, matched_value, status, is_blocklisted, api_service, source, device_info, location_info, confidence, match_mode }. match_type равен ip_address или device_fingerprint; match_source равен ip_address, persistent_id, legacy_fp или recovered_high (восстановленные совпадения также содержат recovery_similarity, tls_ja4_corroborated, recovery_gate_reason). Ограничено 5 совпадениями по IP и 5 по устройству. | [] |
warnings | array | Нет | См. Объект предупреждения. | [] |
browser_version, os_version | string | Да | Версии браузера и ОС из user agent. | "17.4" |
user_agent, accept_language | string | Да | Строка user agent и заголовок Accept-Language, которые отправил браузер. | "en-US,en;q=0.9" |
session_identifier, session_age_ms | string, integer | Да | Браузерная сессия, в которой выполнялся шаг, и её возраст в миллисекундах. | 48210 |
coords_accuracy | float | Да | Радиус точности координат, переданных устройством, в метрах. | 35.0 |
raw_device_data | object | Да | Необработанные сигналы устройства, собранные для шага. | {} |
{
"status": "Approved",
"node_id": "first_ip_analysis",
"device_brand": "Apple",
"device_model": "iPhone",
"browser_family": "Mobile Safari",
"os_family": "iOS",
"platform": "mobile",
"device_fingerprint": "f2a3c1de8b994a3f9e4cdf3a02b1a7c9",
"ip_country": "Spain",
"ip_country_code": "ES",
"ip_state": "Comunidad de Madrid",
"ip_city": "Madrid",
"latitude": 40.4168,
"longitude": -3.7038,
"ip_address": "203.0.113.42",
"isp": "Telefonica de Espana",
"organization": "Telefonica de Espana",
"is_vpn_or_tor": false,
"is_data_center": false,
"time_zone": "Europe/Madrid",
"time_zone_offset": "+02:00",
"ip": {
"location": { "latitude": 40.4168, "longitude": -3.7038 },
"distance_from_id_document": 3.4,
"distance_from_poa_document": 1.1
},
"id_document": {
"location": { "latitude": 40.4165, "longitude": -3.7026 },
"distance_from_ip": 3.4,
"distance_from_poa_document": 4.0
},
"poa_document": {
"location": { "latitude": 40.4170, "longitude": -3.7040 },
"distance_from_ip": 1.1,
"distance_from_id_document": 4.0
},
"matches": [],
"warnings": []
}
Проверка местоположения
Возвращается для каждого шага Проверка местоположения. Появляется какgeolocation_checks[] в GET /v3/session/{sessionId}/decision/: один элемент на шаг, его принятая попытка. geolocation_attempts[] перечисляет каждую попытку каждого шага, от самой ранней к самой поздней. Оба поля равны null для сценария без этого шага. Источник: GeolocationDecisionSerializer.
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
node_id | string | Да | Узел сценария, который создал результат. | "geolocation_1" |
status | строка | Нет | См. перечисление статусов. | "Declined" |
outcome | строка | Да | Результат попытки: verified, low_accuracy, accuracy_undetermined, stale, approximate, denied, restricted, unavailable, timeout, mock_detected, outside_geofence, in_blocked_area, anonymizer_detected, skipped, replay_rejected или unsupported_client. | "outside_geofence" |
permission | строка | Да | Разрешение, которое предоставила система: granted_precise, granted_approximate, denied, restricted, unavailable, timeout, dismissed или not_requested. | "granted_precise" |
latitude, longitude | float | Да | Позиция в системе WGS84. null, если позиция отсутствует. | 48.8566 |
accuracy_m | float | Да | Радиус неопределённости в метрах. | 35.0 |
accuracy_confidence | строка | Да | p95, p68 или unspecified. | "p95" |
measured_at, age_seconds | datetime, integer | Да | Момент, когда устройство определило позицию, и число секунд до того, как Didit её получил. | 2 |
source, platform, sdk_version | строка | Да | Источник позиции, клиент, который её сформировал, и версия его SDK. | "browser" |
is_mock, produced_by_accessory | boolean | Да | Признаки спуфинга, о которых сообщает платформа. null означает, что платформа об этом не сообщает. | null |
integrity | строка | Нет | attested, not_attested, failed, unsupported (веб) или not_determined. | "unsupported" |
country_code, region_code, city | строка | Да | Место, которому соответствует позиция. | "FR" |
geofence, inside_geofence, geofence_basis, inside_areas, blocked_areas | object, boolean, строка, массивы | Да | Результат проверки страны и области. | { "enabled": true, "result": "outside" } |
position_source, anonymizers | строка, object | Да | Источник позиции, которую использует шаг, и сигналы VPN, прокси, Tor, спуфинга и эмулятора. | "device_and_ip" |
ip_distance_km, ip_distance_uncertainty_km, ip_consistent, document_distance_km, travel_excused, consecutive_mismatches | number, boolean, integer | Да | Сравнения с местоположением по IP и с адресом, указанным в системе. | 12.4 |
attempts | integer | Нет | Номер попытки внутри шага. | 3 |
consent | object | Да | accepted_at, version и locale уведомления, которое принял пользователь. | |
warnings | массив объектов предупреждений | Нет | Предупреждения LOCATION_* этого шага. Не присутствуют в geolocation_attempts[], которые дополнительно содержат received_at и created_at. | [] |
Подтверждение адреса
Возвращается для каждого предоставленного документа с адресом. Появляется какpoa_verifications[] в GET /v3/session/{sessionId}/decision/. Источник: poa/serializers/poa.py:212-227 (POAV3Serializer, расширяет POAV2Serializer в poa/serializers/poa.py:173-209).
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
status | строка | Нет | См. перечисление статусов. | "Approved" |
issuing_state | строка (ISO 3166-1 alpha-3) | Да | Код страны эмитента документа. | "ESP" |
document_type | строка | Нет | Тип верхнего уровня из PoaDocumentTypeChoices (common/config/choices.py:868-873): UTILITY_BILL, BANK_STATEMENT, GOVERNMENT_ISSUED_DOCUMENT, OTHER_POA_DOCUMENT. Если тип не определён, возвращается UNKNOWN, но никогда не null. | "UTILITY_BILL" |
document_subtype | строка | Нет | Код подтипа из PoaDocumentSubtypeChoices (например, ELECTRICITY_BILL, WATER_BILL, ACCOUNT_STATEMENT). Если подтип не определён, возвращается UNKNOWN, но никогда не null. | "ELECTRICITY_BILL" |
issuer | строка | Да | Название организации, которая выдала документ. | "Iberdrola" |
issue_date | строка (YYYY-MM-DD) | Да | Дата выдачи документа. | "2026-04-15" |
expiration_date | строка (YYYY-MM-DD) | Да | Срок действия, напечатанный на документе, если он указан. | null |
poa_address | строка | Да | Адрес в необработанном виде, извлечённый с помощью OCR. | "Calle Mayor 1, 28001 Madrid" |
poa_formatted_address | строка | Да | Адрес после геокодирования и форматирования. | "Calle Mayor 1, 28001 Madrid, Spain" |
poa_parsed_address | object | Да | Структурированный адрес (street_1, street_2, city, region, postal_code, country (alpha-2), address_type, document_location, …). | { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001" } |
document_file | строка (URL) | Да | Предподписанный URL загруженного документа. | "https://<media-host>/.../poa.pdf?..." |
document_language | строка | Да | Определённый язык документа (ISO 639-1). | "es" |
document_metadata | object | Да | Отфильтрованные метаданные: file_size, content_type, creation_date, modified_date, creator, producer, software, encryption, is_signed, is_tampered, signature_info, exif_original_date, exif_digitized_date, processed_by_known_editor, has_different_creation_mod_date, overlay_manipulation. | { "file_size": 184221, "content_type": "application/pdf", "is_tampered": false } |
extra_fields | object | Нет | Поля банковского счёта (bank_account_number, bank_iban, bank_sort_code, bank_routing_number, bank_swift_bic, bank_branch_name, bank_branch_address), document_phone_number, additional_names, а также любые пользовательские ключи, сохранённые в записи. | { "bank_iban": null, "additional_names": [] } |
name_on_document | строка | Да | Имя так, как оно указано в документе. | "María García López" |
expected_details_address | строка | Да | Адрес, который клиент ввёл при регистрации (дословно). | "Calle Mayor 1, Madrid" |
expected_details_formatted_address | строка | Да | Ожидаемый адрес после геокодирования. | "Calle Mayor 1, 28001 Madrid, Spain" |
expected_details_parsed_address | object | Да | Структурированный ожидаемый адрес. | { "city": "Madrid", "postal_code": "28001" } |
name_match_score_expected_details | float (0-100) | Да | Нечёткое сравнение name_on_document с именем, указанным при создании сессии. | 94.0 |
name_match_score_id_verification | float (0-100) | Да | Нечёткое сравнение name_on_document с полем full_name проверенного удостоверения личности. | 100.0 |
extra_files | массив строк (URL) | Нет | Предподписанные URL дополнительных загруженных файлов. | [] |
detected_codes | массив объектов | Нет | QR-коды и штрихкоды, обнаруженные на всех обработанных страницах документа: type, page_number (нумерация с 1), position (полигон), x/y/width/height (ограничивающий прямоугольник), page_width/page_height, raw_payload (base64), parsed_payload (декодированное значение, null, если код найден, но не удалось его декодировать). Пустой массив, если коды не обнаружены. | [{ "type": "QR_CODE", "page_number": 1, "parsed_payload": "https://issuer.example/inv/9981" }] |
node_id | строка | null | Да | Идентификатор узла сценария (V3). | "first_poa" |
warnings | массив | Нет | См. Объект предупреждения. | [] |
{
"status": "Approved",
"issuing_state": "ESP",
"document_type": "UTILITY_BILL",
"document_subtype": "ELECTRICITY_BILL",
"issuer": "Iberdrola",
"issue_date": "2026-04-15",
"expiration_date": null,
"poa_address": "Calle Mayor 1, 28001 Madrid",
"poa_formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"poa_parsed_address": { "street_1": "Calle Mayor 1", "city": "Madrid", "postal_code": "28001", "country": "ES" },
"document_file": "https://<media-host>/.../poa.pdf?signature=...",
"document_language": "es",
"document_metadata": {
"file_size": 184221,
"content_type": "application/pdf",
"creation_date": "2026-04-15T08:11:32Z",
"modified_date": "2026-04-15T08:11:32Z",
"creator": "Iberdrola Billing",
"producer": "Adobe PDF Library 15.0",
"software": null,
"encryption": null,
"is_signed": true,
"is_tampered": false,
"signature_info": { "signer_name": "Iberdrola Clientes", "date": "2026-04-15T08:11:32Z" },
"exif_original_date": null,
"exif_digitized_date": null,
"processed_by_known_editor": false,
"has_different_creation_mod_date": false,
"overlay_manipulation": null
},
"extra_fields": {
"bank_account_number": null,
"bank_iban": null,
"bank_sort_code": null,
"bank_routing_number": null,
"bank_swift_bic": null,
"bank_branch_name": null,
"bank_branch_address": null,
"document_phone_number": null,
"additional_names": []
},
"name_on_document": "María García López",
"expected_details_address": "Calle Mayor 1, Madrid",
"expected_details_formatted_address": "Calle Mayor 1, 28001 Madrid, Spain",
"expected_details_parsed_address": { "city": "Madrid", "postal_code": "28001", "country": "ES" },
"name_match_score_expected_details": 94.0,
"name_match_score_id_verification": 100.0,
"extra_files": [],
"detected_codes": [
{
"type": "QR_CODE",
"page_number": 1,
"position": [[820, 1120], [1002, 1120], [1002, 1302], [820, 1302]],
"x": 820,
"y": 1120,
"width": 182,
"height": 182,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "aHR0cHM6Ly9pYmVyZHJvbGEuZXMvZmFjdHVyYS85OTgx",
"parsed_payload": "https://iberdrola.es/factura/9981"
},
{
"type": "CODE_128",
"page_number": 1,
"position": [[112, 1480], [560, 1480], [560, 1540], [112, 1540]],
"x": 112,
"y": 1480,
"width": 448,
"height": 60,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "MDA5OTgxMDAwNDI=",
"parsed_payload": "0099810042"
}
],
"node_id": "first_poa",
"warnings": []
}
Проверка телефона
Возвращается для каждой попытки верификации телефона. Появляется какphone_verifications[] в GET /v3/session/{sessionId}/decision/ для сессий KYC и KYB. Источник: phone/serializers/phone.py:251-266 (PhoneV3Serializer, наследует PhoneV2Serializer в phone/serializers/phone.py:103-248).
| Поле | Тип | Допускает значение null | Описание | Пример |
|---|---|---|---|---|
status | строка | Нет | См. Перечисление статусов. | "Approved" |
phone_number_prefix | строка | Нет | Код страны E.164 (с +). | "+34" |
phone_number | строка | Нет | Абонентский номер без префикса. | "612345678" |
full_number | строка | Нет | Полный номер в формате E.164 (phone_number_prefix + phone_number). | "+34612345678" |
country_code | строка (ISO 3166-1 alpha-2) | Да | Страна номера. | "ES" |
country_name | строка | Да | Локализованное название страны. | "Spain" |
carrier | объект | Нет | { name, type }, где type является значением LineTypeChoices (common/config/choices.py:648-667): mobile, fixed_line, voip, isp, vpn, toll_free, premium_rate, satellite, pager, payphone, voice_mail, unknown и другие классы линий. | { "name": "Movistar", "type": "mobile" } |
is_disposable | boolean | Нет | true, если оператор связи помечает номер как временный или одноразовый. | false |
is_virtual | boolean | Нет | true, если carrier.type является одним из значений voip, isp, vpn. | false |
verification_method | строка | Нет | Канал доставки OTP (whatsapp, sms, …). Берётся из actual_channel последней попытки отправки (если его нет, используется запрошенный channel, затем sms). | "whatsapp" |
verification_attempts | целое число | Нет | Общее число попыток отправки OTP (первичная отправка плюс повторные). | 1 |
verified_at | строка (ISO 8601) | Да | Время, когда OTP был успешно введён. | "2026-05-17T10:14:02Z" |
lifecycle | массив объектов | Нет | События в хронологическом порядке: попытки отправки, callback-уведомления о доставке, проверки кода и итоговое событие статуса. Каждое событие имеет вид { type, timestamp, details, fee }. Типы событий берутся из PhoneEventChoices. | […] |
matches | массив объектов | Нет | Совпадения номера телефона между сессиями. Каждый элемент: { session_id, session_number, vendor_data, verification_date, phone_number, status, is_blocklisted, api_service, source }. source принимает значения session или list_entry. | [] |
node_id | строка | null | Да | Идентификатор узла сценария (V3). | "first_phone" |
warnings | массив | Нет | См. Объект предупреждения. | [] |
phone_intelligence | объект | Да | Сигналы анализа телефона. Присутствует только в случае, если для номера выполнялся дополнительный модуль анализа. | |
phone_social | объект | Да | Социальный след номера. Присутствует только при выполнении дополнительного модуля анализа социального профиля. |
{
"status": "Approved",
"phone_number_prefix": "+34",
"phone_number": "612345678",
"full_number": "+34612345678",
"country_code": "ES",
"country_name": "Spain",
"carrier": { "name": "Movistar", "type": "mobile" },
"is_disposable": false,
"is_virtual": false,
"verification_method": "whatsapp",
"verification_attempts": 1,
"verified_at": "2026-05-17T10:14:02Z",
"lifecycle": [
{
"type": "PHONE_VERIFICATION_MESSAGE_SENT",
"timestamp": "2026-05-17T10:13:51Z",
"details": { "status": "Success", "reason": null, "channel": "whatsapp", "actual_channel": "whatsapp" },
"fee": 0.02
},
{
"type": "PHONE_DELIVERY_DELIVERED",
"timestamp": "2026-05-17T10:13:52Z",
"details": { "channel": "whatsapp", "status": "delivered" },
"fee": 0
},
{
"type": "VALID_CODE_ENTERED",
"timestamp": "2026-05-17T10:14:02Z",
"details": { "code_tried": "482917", "status": "Approved" },
"fee": 0
},
{
"type": "PHONE_VERIFICATION_APPROVED",
"timestamp": "2026-05-17T10:14:02Z",
"details": null,
"fee": 0
}
],
"matches": [],
"node_id": "first_phone",
"warnings": []
}
Проверка электронной почты
Возвращается для каждой попытки верификации адреса электронной почты. Появляется какemail_verifications[] в GET /v3/session/{sessionId}/decision/ для сессий KYC и KYB. Источник: email_verification/serializers/email.py:149-164 (EmailV3Serializer, наследует EmailV2Serializer в email_verification/serializers/email.py:38-146).
| Поле | Тип | Допускает значение null | Описание | Пример |
|---|---|---|---|---|
status | строка | Нет | См. Перечисление статусов. | "Approved" |
email | строка | Нет | Указанный адрес электронной почты. | "maria.garcia@example.com" |
is_breached | boolean | Нет | true, если адрес присутствует в известных утечках данных. | false |
breaches | массив объектов | Нет | Подробности по каждой утечке, если is_breached равно true: { name, domain, logo_path, breach_date, description, is_verified, data_classes, breach_emails_count }. | [] |
is_disposable | boolean | Нет | true, если адрес принадлежит сервису одноразовой почты. | false |
is_undeliverable | boolean | Нет | true, если проверка доставки по SMTP показывает, что почтовый ящик не принимает письма. | false |
verification_attempts | целое число | Нет | Общее число попыток проверки OTP. | 1 |
verified_at | строка (ISO 8601) | Да | Время, когда OTP был успешно введён. | "2026-05-17T10:15:22Z" |
lifecycle | массив объектов | Нет | События в хронологическом порядке: попытки отправки, проверки кода и итоговое событие статуса. Каждое событие имеет вид { type, timestamp, details, fee }. Типы событий берутся из EmailEventChoices. | […] |
matches | массив объектов | Нет | Совпадения адреса электронной почты между сессиями. Каждый элемент: { session_id, session_number, vendor_data, verification_date, email, status, is_blocklisted, api_service, source }. source принимает значения session или list_entry. | [] |
node_id | строка | null | Да | Идентификатор узла сценария (V3). | "first_email" |
warnings | массив | Нет | См. Объект предупреждения. | [] |
email_intelligence | объект | Да | Сигналы анализа электронной почты. Присутствует только в случае, если для адреса выполнялся дополнительный модуль анализа. | |
email_social | объект | Да | Социальный след адреса. Присутствует только при выполнении дополнительного модуля анализа социального профиля. |
{
"status": "Approved",
"email": "maria.garcia@example.com",
"is_breached": false,
"breaches": [],
"is_disposable": false,
"is_undeliverable": false,
"verification_attempts": 1,
"verified_at": "2026-05-17T10:15:22Z",
"lifecycle": [
{
"type": "EMAIL_VERIFICATION_MESSAGE_SENT",
"timestamp": "2026-05-17T10:15:11Z",
"details": { "status": "Success", "reason": null },
"fee": 0.02
},
{
"type": "VALID_CODE_ENTERED",
"timestamp": "2026-05-17T10:15:22Z",
"details": { "code_tried": "739204", "status": "Approved" },
"fee": 0
},
{
"type": "EMAIL_VERIFICATION_APPROVED",
"timestamp": "2026-05-17T10:15:22Z",
"details": null,
"fee": 0
}
],
"matches": [],
"node_id": "first_email",
"warnings": []
}
Проверка по базам данных
Возвращается для каждого поиска по базам данных, выполненного по данным, которые отправил пользователь. Появляется какdatabase_validations[] в GET /v3/session/{sessionId}/decision/. Источник: database_validation/serializers/database_validation.py:21-142 (DatabaseValidationV3Serializer, наследует DatabaseValidationV2Serializer).
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
issuing_state | string (ISO 3166-1 alpha-3) | Да | Страна, в реестре которой выполнялся запрос. | "ESP" |
validation_type | string (enum) | Нет | Как подтвержден результат: one_by_one (результат одного сервиса), two_by_two (два или более разных сервиса независимо подтвердили полное совпадение идентификационного номера) или not_enabled (валидатор был пропущен или ни один провайдер не ответил; окончательный no_match все равно дает one_by_one). Никогда не null. Источник: DatabaseValidationChoices (common/config/choices.py:1097-1100). | "one_by_one" |
screened_data | object | Нет | Данные, отправленные в реестр. Файловые поля (selfie, cnh_qr_code_image, document_image) предоставляются в виде предварительно подписанных URL на момент чтения. | { "document_number": "99999999R", "date_of_birth": "1990-05-12" } |
validations | array of objects | Нет | Одна запись на каждый сервис из каталога, который дал совпадение. Каждая запись может включать service_id, service_name, validation (объект с вердиктом провайдера), outcome_code, outcome_detail и source_data (очищенный профиль гражданина: full_name, gender, date_of_birth, photo (предварительно подписанный URL), signature (предварительно подписанный URL), …). | […] |
errors | array of objects | Да | Ошибки по сервисам, если запрос к сервису завершился неудачно; ключ полностью опускается, если список пуст. Каждая запись содержит объект ошибки вышестоящего сервиса и service_id сервиса, который ее вернул. | [] |
match_type | string (enum) | Да | Итоговый вердикт совпадения по всем запрошенным сервисам: full_match, partial_match или no_match (DatabaseValidationMatchTypeChoices, common/config/choices.py:1103-1106). null, пока не выполнена оценка. | "full_match" |
status | string | Нет | См. Перечисление статусов. | "Approved" |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_db_validation" |
warnings | array | Нет | См. Объект предупреждения. | [] |
{
"issuing_state": "ESP",
"validation_type": "one_by_one",
"screened_data": {
"document_number": "99999999R",
"date_of_birth": "1990-05-12",
"first_name": "María",
"last_name": "García López"
},
"validations": [
{
"service_id": "esp_dni",
"service_name": "Spain - DNI/NIE verification",
"validation": { "is_valid": true, "match_score": 100 },
"outcome_code": "MATCH",
"outcome_detail": "All identifiers match the registry record.",
"source_data": {
"full_name": "María García López",
"gender": "F",
"date_of_birth": "1990-05-12",
"photo": "https://<media-host>/.../registry_photo.jpg?signature=...",
"signature": null
}
}
],
"match_type": "full_match",
"status": "Approved",
"node_id": "first_db_validation",
"warnings": []
}
Ответ на анкету
Возвращается для каждой отправки анкеты. Появляется какquestionnaire_responses[] в GET /v3/session/{sessionId}/decision/ для сессий KYC и KYB. Источник: questionnaires/serializers/questionnaire.py:591-597 (QuestionnaireResponseV3Serializer, расширяет QuestionnaireResponseSerializer из questionnaires/serializers/questionnaire.py:520-588).
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
questionnaire_id | string (UUID) | Нет | Идентификатор версии анкеты, на которую был дан ответ. | "6a0f1c2c-…" |
title | string | Нет | Название анкеты, как оно задано в Console. | "Customer risk profile" |
description | string | Да | Описание анкеты. | "Short risk-profile questions." |
languages | array of strings | Нет | Коды языков, на которых опубликована анкета. | ["en", "es"] |
default_language | string | Нет | Код языка по умолчанию. | "en" |
is_active | boolean | Нет | Является ли эта версия анкеты активной. | true |
is_simple_questionnaire | boolean | Нет | true, если в анкете нет ветвления (плоский список). | true |
questionnaire_group_id | string (UUID) | Нет | Идентификатор, общий для всех версий одной и той же анкеты. | "a7c2c2c2-…" |
version | integer | Нет | Номер версии активного шаблона. | 3 |
status | string | Нет | Одно из значений: Approved, In Review, Not Finished (отказ на уровне анкеты соответствует In Review). | "Approved" |
published_at | string (ISO 8601) | Да | Когда был опубликован шаблон. | "2026-01-12T11:00:00Z" |
sections | array of objects | Нет | Упорядоченные разделы после применения обхода графа и фильтрации по видимости. Каждый раздел имеет вид { title, description, items[] } (title/description берутся из открывающего SECTION_HEADER и уже переведены). Каждый элемент — это элемент формы (uuid, value (идентификатор узла), element_type, is_required, title, description, placeholder, choices, max_files, required_if, repeatable_config, а также поле answer: null, если ответа нет, и отсутствует у элементов макета HEADING/PARAGRAPH/SEPARATOR). Файловые ответы содержат { files: [<presigned URL>, …] }. | […] |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_questionnaire" |
{
"questionnaire_id": "6a0f1c2c-3b7d-4d2c-9eb6-fdc6c7c92ef9",
"title": "Customer risk profile",
"description": "Short risk-profile questions.",
"languages": ["en", "es"],
"default_language": "en",
"is_active": true,
"is_simple_questionnaire": true,
"questionnaire_group_id": "a7c2c2c2-1111-4d2c-9eb6-fdc6c7c92ef9",
"version": 3,
"status": "Approved",
"published_at": "2026-01-12T11:00:00Z",
"sections": [
{
"title": "Source of funds",
"description": null,
"items": [
{
"uuid": "4f1d5e2c-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"value": "q_source_of_funds",
"element_type": "SINGLE_CHOICE",
"is_required": true,
"title": "What is your main source of funds?",
"description": null,
"placeholder": null,
"choices": [
{ "label": "Salary", "value": "salary" },
{ "label": "Business income", "value": "business" },
{ "label": "Investments", "value": "investments" }
],
"max_files": 1,
"required_if": null,
"repeatable_config": null,
"answer": { "value": "salary" }
}
]
}
],
"node_id": "first_questionnaire"
}
Электронная подпись
Возвращается для каждого подписанта шага Электронной подписи. Появляется какsignatures[] в GET /v3/session/{sessionId}/decision/ для сессий KYC и KYB, только если в сценарии есть этот шаг. В отличие от других объектов отчетов, его status означает этап подписания, а результат находится в verdict. Элементы warnings[] имеют вид { code, node_id }, а не вид объектов предупреждений.
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
id | string (UUID) | Нет | Идентификатор подписи подписанта. Используйте его как signature_id для маршрутов evidence и validate. | "0e6c2a8e-…" |
node_id | string | Нет | Идентификатор узла сценария. | "feature_signature" |
status | string | Нет | Этап подписания: intro, review, code, signing, signed или declined. Только signed означает, что документы подписаны. | "signed" |
verdict | string | Нет | Not Finished, Approved, In Review или Declined. | "Approved" |
level | string | Нет | simple (по умолчанию), aes или qes (квалифицированная, дополнительная опция). | "aes" |
format | string | Нет | pdf для простой подписи, pades для усиленной (AES) и квалифицированной (QES). | "pades" |
profile | string | Да | PAdES-B-LT после подписания усиленной (AES) или квалифицированной (QES) подписью, иначе null. | "PAdES-B-LT" |
signer | object | Нет | { name, capacity, company, role, roles, identity_session_id }. capacity имеет значение self (KYC) или company (KYB). | { "name": "Jane Doe", "capacity": "self", … } |
identity_used | object | Нет | { session_id, kyc_id, verified, expected_name }: проверенная личность, на которую опирается подпись. Пусто для простой подписи без проверенной личности. | { "verified": true, … } |
certificate | object | Да | { issuer, issued_to, serial, valid_from, valid_until }. null до подписания и всегда null для простой подписи. | { "serial": "5A3F9C21", … } |
confirmation | объект | Нет | { channel, destination, confirmed_at, attempts }. destination маскируется; attempts считает введённые коды, включая правильный. У простой подписи кода нет, поэтому channel и destination равны null. | { "channel": "email", … } |
timestamp | объект | Да | { time, qualified, valid }. qualified всегда false для AES, где метку времени выдаёт Didit; для QES её выдаёт квалифицированный поставщик доверенных услуг. null, пока документ не подписан, и всегда null для простой подписи. | { "qualified": false, … } |
documents | массив объектов | Нет | { id, uuid, title, language, source_revision, translation_id, file_name, pages, size_bytes, sha256_original, sha256_signed, status, opened_at, read_at, read_to_end, consented_at, consent, signed_file, mode, source_format, conversion, fields }. status может быть signed, declined, not_signed или not_reached. mode может быть fields или read_and_agree. source_format может быть pdf или docx; conversion описывает исходный файл Word или равен null для PDF. | […] |
documents[].language | строка | Да | Язык версии, выбранной на момент начала попытки, или null, если он не задан. Используется полностью совпадающий перевод, иначе оригинал. После подписания здесь указан язык, на котором документ фактически подписан. | "en" |
documents[].source_revision | строка (UUID) | Нет | Исходная ревизия, скопированная в попытку, в том числе когда выбран перевод. Отличается от id документа подписывающего. | "22222222-2222-4222-8222-222222222222" |
documents[].translation_id | строка (UUID) | Да | Выбранный перевод или null для оригинала. Копия документа и выбор языка фиксируются после начала попытки. | null |
documents[].fields | массив объектов | Нет | { key, type, role, label, page, x, y, width, height, required, value, display_value, value_source, filled_at, image_url, value_unavailable_reason } для каждого поля в документе. value — строка, логическое значение для флажка или true для применённой подписи или инициалов. Пусто для документа без полей. | […] |
adopted_signature | объект | Да | { method, font, adopted_at }: подпись и инициалы, которые принял подписывающий. method может быть typed или drawn; font задаёт стиль рукописного начертания для напечатанной подписи. null, пока подпись не принята. | { "method": "drawn", … } |
electronic_signature_consent_at | строка (ISO 8601) | Да | Когда подписывающий согласился подписывать документы электронно. Заполняется, если у любого документа есть поля. | "2026-11-03T10:41:40Z" |
evidence_file | строка | Да | Путь к PDF с доказательствами после подписания. | "/v3/session/…/evidence/?signature_id=…" |
warnings | массив объектов | Нет | { code, node_id }, где code принимает одно из значений: SIGNATURE_DECLINED, SIGNATURE_OTP_FAILED, SIGNATURE_NAME_MISMATCH, SIGNATURE_IDENTITY_NOT_VERIFIED, SIGNATURE_DOCUMENT_CHANGED. | [] |
validation | объект | Да | { valid, checked_at, documents[] }: последняя криптографическая проверка подписанных документов. null, пока документы не подписаны. { valid: null, reason: "signature_provider_outcome_unknown", checked_at }, если результат подписания не удалось подтвердить. | { "valid": true, … } |
declined_at | строка (ISO 8601) | Да | Когда подписывающий отказался. | null |
declined_action | строка | Нет | Значение signature_declined_action этого шага. | "REVIEW" |
signed_at | строка (ISO 8601) | Да | Когда документы были подписаны. | "2026-11-03T10:42:24Z" |
expires_at | строка (ISO 8601) | Нет | Когда ссылка для подписания перестаёт работать. | "2026-11-10T10:30:00Z" |
email_sent_at | строка (ISO 8601) | Да | Когда подписывающему отправили подписанную копию по электронной почте. | "2026-11-03T10:42:30Z" |
email_unavailable_reason | строка | Да | Почему копия не отправлена по электронной почте, если её запрашивали. | null |
ip_address | строка | Да | IP-адрес подписывающего, когда он запросил код. | "203.0.113.10" |
place | строка | Да | Не собирается: всегда null. | null |
place_unavailable_reason | строка | Да | not_collected. | "not_collected" |
Оценка возраста
Возвращается отдельным API оценки возраста (POST /v3/age-estimation/). Ответ содержит подмножество структуры Liveness check внутри конверта age_estimation: status, method, score, age_estimation, warnings, а также блок обнаружения лица user_image, доступный только в автономном API. Он не включает reference_image, video_url, matches, face_quality и face_luminance. В сессиях сценария отдельного массива нет: расчётный возраст выводится в поле liveness_checks[].age_estimation в ответе GET /v3/session/{sessionId}/decision/. Источник: apis/serializers/age_estimation.py:50-55 (AgeEstimationResponseSerializer), конверт собирается в apis/views/age_estimation.py:138-174.
| Поле | Тип | Может быть null | Описание | Пример |
|---|---|---|---|---|
request_id | строка (UUID) | Нет | Сохранённый id сессии, если save_api_request=true (по умолчанию); иначе временный корреляционный UUID. | "3b1f1e2c-…" |
age_estimation | объект | Нет | Конверт результата: status (Approved / Declined), method (всегда PASSIVE), score (оценка живости от 0 до 100, может быть null), age_estimation (предсказанный возраст в годах для самого крупного лица, может быть null), user_image (entities[] с полями age, bbox [x_min, y_min, x_max, y_max], confidence и gender для каждого лица; а также best_angle), warnings[]. | { … } |
vendor_data | строка | Да | Значение vendor_data из запроса. | null |
metadata | объект | Да | Значение metadata из запроса. | null |
created_at | строка (ISO 8601) | Нет | Серверная временная метка запроса. | "2026-05-17T10:22:13.512941+00:00" |
{
"request_id": "3b1f1e2c-7777-4d2c-9eb6-fdc6c7c92ef9",
"age_estimation": {
"status": "Approved",
"method": "PASSIVE",
"score": 94.10,
"age_estimation": 28.7,
"user_image": {
"entities": [
{ "age": 28.7, "bbox": [40, 40, 100, 100], "confidence": 0.72, "gender": "male" }
],
"best_angle": 0
},
"warnings": []
},
"vendor_data": null,
"metadata": null,
"created_at": "2026-05-17T10:22:13.512941+00:00"
}
Биометрическая аутентификация
Биометрическая аутентификация выполняет тот же конвейер проверки живости и сравнения лиц, что и стандартная KYC-верификация, но настроена на сравнение снятого лица с эталонным изображением существующего пользователя, а не с портретом из документа, извлечённым через OCR. Отдельного сериализатора нет:GET /v3/session/{sessionId}/decision/ возвращает стандартные объекты Проверка живости и Сравнение лиц в полях liveness_checks[] и face_matches[]. Сценарий сессии настраивается с workflow_type = "biometric_authentication" (WorkflowTypeChoices, common/config/choices.py:636).
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
liveness_checks | массив объектов Проверка живости | Нет | Результат проверки живости для попытки аутентификации. | [ { "status": "Approved", … } ] |
face_matches | массив объектов Сравнение лиц | Нет | Результат сравнения с зарегистрированным эталоном. source_image_session_id устанавливается равным собственному session_id сессии: эталонное лицо (переданный portrait_image или сохранённое лицо, повторно использованное через vendor_data, если portrait_image не передан) записывается в саму сессию аутентификации (face/views/face.py:656-659). | [ { "status": "Approved", "source_image_session_id": "…", … } ] |
status | string | Нет | Верхнеуровневый статус сессии (см. Перечисление статусов). | "Approved" |
{
"session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"status": "Approved",
"liveness_checks": [
{
"status": "Approved",
"method": "PASSIVE",
"score": 95.10,
"reference_image": "https://<media-host>/.../reference.jpg?signature=...",
"video_url": null,
"age_estimation": null,
"matches": [],
"face_quality": 91.20,
"face_luminance": 53.10,
"node_id": "biometric_auth_liveness",
"warnings": []
}
],
"face_matches": [
{
"status": "Approved",
"score": 98.42,
"source_image_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"source_image": "https://<media-host>/.../source.jpg?signature=...",
"target_image": "https://<media-host>/.../target.jpg?signature=...",
"node_id": "biometric_auth_face_match",
"warnings": []
}
]
}
Реестр KYB
Возвращается для каждой компании, подтверждённой реестром, в сценарии KYB. Отображается какregistry_checks[] в GET /v3/session/{sessionId}/decision/ для сессий компаний. Источник: kyb/serializers/kyb.py:939-964 (RegistryCheckV3Serializer).
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
status | string | Нет | См. Перечисление статусов. | "Approved" |
node_id | string | null | Да | Идентификатор узла сценария (V3). | "first_registry" |
data_resolved | boolean | Нет | true, когда получение данных из реестра завершено (или когда is_from_registry равно false, что означает, что данные введены вручную). | true |
company | object | Нет | Полный payload компании: см. Объект компании ниже. | { … } |
ownership_structure | object | Да | Таблица капитализации, подтверждённая реестром: shareholders[] и beneficial_owners[], где у каждого владельца указаны его идентификатор в реестре, доля и каноническое значение shareholding. | { "shareholders": [...], "beneficial_owners": [] } |
warnings | array | Нет | См. Объект предупреждения. | [] |
Объект компании
Источник:kyb/serializers/kyb.py:220-321 (KYBCompanyResponseSerializer).
| Поле | Тип | Допускает null | Описание |
|---|---|---|---|
uuid | string (UUID) | Нет | Внутренний идентификатор компании. |
node_id | string | null | Да | Идентификатор узла сценария. |
status | string | Нет | Статус функции (FeatureStatusChoices). |
registry_status | string | Да | Статус компании в реестре (active, dissolved и др.). |
data_resolved | boolean | Нет | Определение то же, что и у родительского объекта. |
company_name | string | Да | Зарегистрированное название компании. |
registration_number | string | Да | Идентификатор в реестре. |
country_code | string (ISO 3166-1 alpha-2) | Да | Страна регистрации. |
region | string | Да | Субъект ISO 3166-2, если применимо (например, US-CA). |
company_type | string | Да | Организационно-правовая форма (LLC, SL и др.). |
incorporation_date | string (YYYY-MM-DD) | Да | Дата регистрации компании. |
registered_address | string | Да | Зарегистрированный юридический адрес. |
tax_number | string | Да | Налоговый идентификатор / идентификатор НДС. |
risk_level | string | Да | Уровень риска, предоставленный провайдером. |
verification_status | string | Да | Внутреннее перечисление статусов верификации. |
is_from_registry | boolean | Нет | true, если данные получены из реестра (а не введены вручную). |
fetch_status | string | Да | pending, resolved, failed. |
alternative_names | string | Да | Альтернативные торговые названия через запятую. |
nature_of_business | string | Да | Описание вида деятельности в свободной форме. |
registered_capital | string | Да | Зарегистрированный капитал в виде строки, понятной человеку. |
registered_capital_amount | string (decimal) | Да | Разобранная сумма зарегистрированного капитала. |
registered_capital_currency | string (ISO 4217) | Да | Код валюты. |
website | string (URL) | Да | Веб-сайт компании. |
email | string | Да | Публичный контактный адрес электронной почты. |
phone | string | Да | Публичный контактный телефон. |
legal_entity_identifier | string | Да | LEI, если доступен. |
location_of_registration | string | Да | Офис или регион регистрации в реестре. |
vat_number | string | Да | Номер НДС, указанный для компании. |
vat_validation_status | string | Нет | Результат проверки номера НДС или, если его нет, tax_number: valid, invalid, format_valid, invalid_format, could_not_validate или not_applicable. См. Проверка НДС и налогового идентификатора. |
vat_validated_number | string | Да | Номер, который был проверен, в том виде, в котором он представлен в источнике. |
vat_validation_source | string | Да | Источник, определивший статус: eu_vies, pl_vat_white_list, no_brreg, ch_uid_register, br_receita_federal, co_rues, cr_hacienda, ec_sri, py_dnit или format_rules. |
vat_validated_name | string | Да | Название, зарегистрированное в источнике (пусто, если источник его не раскрывает). |
vat_validated_address | string | Да | Адрес, зарегистрированный в источнике (пусто, если не раскрыт). |
vat_checked_at | string (ISO 8601) | Да | Время проверки; null, если проверка не выполнялась. |
financial_summary | object | Да | Снимок последних финансовых показателей, если они предоставлены реестром. |
officers | массив объектов | Нет | Список должностных лиц, безопасный для B2C: { uuid, name, designation, role, nationality, is_active, kyc_status, kyc_session_url }. |
beneficial_owners | массив объектов | Нет | Список бенефициарных владельцев, безопасный для B2C: { uuid, name, first_name, last_name, entity_type, roles, ownership_min_shares, ownership_max_shares, is_active, kyc_status, kyc_session_url, effective_ownership_percent }. |
addresses | массив объектов | Да | Подробные данные по адресам из реестра. |
industries | массив объектов | Да | Классификации в стиле SIC/NAICS. |
accounts | массив объектов | Да | Метаданные поданной отчётности. |
registry_data | object | Да | Нормализованные данные реестра Didit (итог по структуре владения, исправления из консоли, сведения из реестра, для которых нет отдельного поля). Не является стабильным контрактом. |
user_provided_data | object | Да | Снимок полей, отредактированных пользователем. |
confirmed_by_user_at | string (ISO 8601) | Да | Время, когда пользователь подтвердил извлечённые данные. |
last_console_edit_at | строка (ISO 8601) | Да | Временная метка последнего редактирования в консоли. |
is_editable | логический | Нет | true, пока конечный пользователь ещё может редактировать данные из реестра. |
{
"status": "Approved",
"node_id": "first_registry",
"data_resolved": true,
"company": {
"uuid": "b1f1e2c2-9999-4d2c-9eb6-fdc6c7c92ef9",
"node_id": "first_registry",
"status": "Approved",
"registry_status": "active",
"data_resolved": true,
"company_name": "Sante Clinics SL",
"registration_number": "B12345678",
"country_code": "ES",
"region": null,
"company_type": "SL",
"incorporation_date": "2018-03-22",
"registered_address": "Calle Mayor 1, 28001 Madrid, Spain",
"tax_number": "B12345678",
"risk_level": "low",
"verification_status": "verified",
"is_from_registry": true,
"fetch_status": "resolved",
"alternative_names": "Sante Clinics",
"nature_of_business": "Medical clinic operations",
"registered_capital": "EUR 50,000",
"registered_capital_amount": "50000.00",
"registered_capital_currency": "EUR",
"website": "https://santeclinics.com",
"email": "info@santeclinics.com",
"phone": "+34911223344",
"legal_entity_identifier": null,
"location_of_registration": "Registro Mercantil de Madrid",
"vat_number": "ESB12345678",
"vat_validation_status": "valid",
"vat_validated_name": "SANTE CLINICS SL",
"vat_validated_address": "CALLE MAYOR 1, 28001 MADRID",
"vat_checked_at": "2026-05-17T10:11:05Z",
"financial_summary": null,
"officers": [
{
"uuid": "c1f1e2c2-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"designation": "Administrador único",
"role": "Director",
"nationality": "ESP",
"is_active": true,
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…"
}
],
"beneficial_owners": [
{
"uuid": "d1f1e2c2-bbbb-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"first_name": "María",
"last_name": "García López",
"entity_type": "person",
"roles": ["UBO"],
"ownership_min_shares": "75.00",
"ownership_max_shares": "75.00",
"is_active": true,
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"effective_ownership_percent": 75.0
}
],
"addresses": [],
"industries": [],
"accounts": [],
"registry_data": {},
"user_provided_data": {},
"confirmed_by_user_at": "2026-05-17T10:11:02Z",
"last_console_edit_at": null,
"is_editable": false
},
"ownership_structure": null,
"warnings": []
}
KYB-документ
Возвращается для каждого узла, который собирает подтверждающие KYB-документы. Появляется какdocument_verifications[] в GET /v3/session/{sessionId}/decision/ для сессий компаний: один элемент на каждый node_id, а в items[] перечислен каждый загруженный документ. Источник: kyb/serializers/kyb.py:1053-1068 (DocumentVerificationV3Serializer); каждый элемент соответствует kyb/serializers/kyb.py:811-851 (KYBDocumentResponseSerializer).
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
status | строка | Нет | Совокупный статус документов этого узла: Approved только тогда, когда одобрены все документы конвейера; Declined, если отклонён хотя бы один; In Review в остальных случаях; Not Finished, пока документ находится в ожидании. См. Перечисление статусов. | "Approved" |
node_id | строка | null | Да | Идентификатор узла сценария (V3). | "first_kyb_documents" |
items | массив объектов элементов KYB-документа | Нет | Одна запись на каждый загруженный или запрошенный документ. | […] |
groups | объект | Нет | Количество по группам документов: { <group_name>: { total, approved, pending, declined, in_review, other, missing } }. | { "incorporation_certificate": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 } } |
required_groups | массив строк | Нет | Группы документов, обязательные по конфигурации сценария. | ["incorporation_certificate", "shareholder_register"] |
warnings | массив | Нет | См. Объект предупреждения. | [] |
Объект элемента KYB-документа
| Поле | Тип | Допускает null | Описание |
|---|---|---|---|
uuid | строка (UUID) | Нет | Внутренний идентификатор документа. |
document_type | строка | Да | Группа верхнего уровня (incorporation_certificate, shareholder_register, …). |
document_subtype | строка | Да | Подтип, специфичный для провайдера. |
document_group | строка | Да | Дубликат document_type (псевдоним сохранён для наглядности). |
file_url | строка (URL) | Да | Предварительно подписанный URL очищенного файла. |
original_filename | строка | Да | Имя файла в том виде, в котором он был загружен. |
file_size | целое число | Да | Размер файла в байтах. |
status | строка | Нет | Статус документа (FeatureStatusChoices). |
created_at | строка (ISO 8601) | Нет | Временная метка загрузки. |
cross_check_result | объект | Да | Результат перекрёстной проверки с реестром и другими документами. |
document_metadata | объект | Да | Тот же отфильтрованный набор метаданных, что и у document_metadata в подтверждении адреса. |
description | строка | Да | Описание, добавленное проверяющим или системой. |
is_requested | логический | Нет | true, если сценарий ожидал этот документ. |
ocr_data | объект | Да | Поля, извлечённые с помощью OCR, когда они доступны. |
is_console_upload | логический | Нет | true, если документ загружен проверяющим в консоли (исключён из совокупного вердикта). |
is_confirmed | логический | Нет | true, если проверяющий явно подтвердил документ. |
{
"status": "Approved",
"node_id": "first_kyb_documents",
"items": [
{
"uuid": "e1f1e2c2-cccc-4d2c-9eb6-fdc6c7c92ef9",
"document_type": "incorporation_certificate",
"document_subtype": "registro_mercantil_extract",
"document_group": "incorporation_certificate",
"file_url": "https://<media-host>/.../incorporation.pdf?signature=...",
"original_filename": "incorporation_certificate.pdf",
"file_size": 256412,
"status": "Approved",
"created_at": "2026-05-17T10:08:00Z",
"cross_check_result": { "matches_registry_name": true, "matches_registration_number": true },
"document_metadata": {
"file_size": 256412,
"content_type": "application/pdf",
"is_signed": true,
"is_tampered": false
},
"description": null,
"is_requested": true,
"ocr_data": { "company_name": "Sante Clinics SL", "registration_number": "B12345678" },
"is_console_upload": false,
"is_confirmed": true
}
],
"groups": {
"incorporation_certificate": { "total": 1, "approved": 1, "pending": 0, "declined": 0, "in_review": 0, "other": 0, "missing": 0 }
},
"required_groups": ["incorporation_certificate", "shareholder_register"],
"warnings": []
}
KYB: ключевое лицо
Возвращается для каждого узла «Ключевые лица» в сценарии KYB. Появляется какkey_people_checks[] в GET /v3/session/{sessionId}/decision/ для сессий компаний. Источник: kyb/serializers/kyb.py:967-1050 (KeyPeopleCheckV3Serializer).
| Поле | Тип | Допускает null | Описание | Пример |
|---|---|---|---|---|
status | строка | Нет | См. Перечисление статусов. | "Approved" |
node_id | строка | null | Да | Идентификатор узла сценария (V3). | "first_key_people" |
registry | объект | Нет | { officers[], beneficial_owners[] }, извлечённые из реестра. Руководители соответствуют KYBPersonResponseSerializer (kyb/serializers/kyb.py:533-645); бенефициарные владельцы соответствуют KYBBeneficialOwnerResponseSerializer (kyb/serializers/kyb.py:648-788), который добавляет date_of_birth, country_of_birth, email, company_name, registration_number, entity_type, roles, ownership_min_shares, ownership_max_shares, child_beneficial_owners, effective_ownership_percent. Оба включают обогащение AML и KYC для каждой стороны (aml_status, kyc_status, kyc_session_url, kyc_session_id, verification_workflow_type, verification_workflow_id, verification_workflow_label, verification_workflow_features, didit_internal_id, kyc_document_type, kyc_nationality, kyc_liveness_passed, kyc_verified_at, kyc_aml_categories, kyc_notification_sent_at). | { "officers": [...], "beneficial_owners": [...] } |
submitted | объект | Нет | { parties[] }: записи, которые компания подтвердила или отправила через поток ключевых лиц (строки BusinessParty с source=USER). Каждая сторона соответствует BusinessPartySubmissionResponseSerializer (kyb/serializers/party.py:146-194): uuid, entity_type, source, name, first_name, last_name, company_name, registration_number, email, nationality, phone_number, date_of_birth, position, custom_fields, is_active, is_skipped, requires_verification, roles[] ({ role, ownership_percent, voting_percent }), kyc_session_id, kyc_session_status, kyc_session_url, kyc_session_deleted, kyb_sub_session_id, kyb_sub_session_status, kyb_sub_session_url, kyb_sub_session_deleted, verification_workflow_type, verification_workflow_id, verification_workflow_label, verification_workflow_features, didit_internal_id. kyc_session_deleted и kyb_sub_session_deleted отмечают удалённую дочернюю сессию: её статус остаётся замороженным на последнем значении, соответствующий *_session_url возвращается как null, так как ссылка больше не работает, и сторона перестаёт блокировать родительскую сессию (вместо этого проверка переходит в In Review). Сбросить этот флаг можно с помощью PATCH /v3/session/{id}/kyb/parties/{party_uuid}/. | { "parties": [...] } |
ubo_kyc_summary | объект | Да | Количество по активным UBO с привязанным KYC: { total, approved, flagged, pending }. null, если к активным UBO не привязан KYC. | { "total": 2, "approved": 2, "flagged": 0, "pending": 0 } |
warnings | массив | Нет | См. Объект предупреждения. | [] |
{
"status": "Approved",
"node_id": "first_key_people",
"registry": {
"officers": [
{
"uuid": "c1f1e2c2-aaaa-4d2c-9eb6-fdc6c7c92ef9",
"name": "María García López",
"designation": "Administrador único",
"role": "Director",
"nationality": "ESP",
"appointment_date": "2018-03-22",
"termination_date": null,
"is_active": true,
"address": "Calle Mayor 1, 28001 Madrid",
"aml_status": "Approved",
"kyc_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"kyc_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"verification_workflow_type": "kyc",
"verification_workflow_id": "11111111-1111-1111-1111-111111111111",
"verification_workflow_label": "KYB officer KYC",
"verification_workflow_features": [
{ "feature": "ID_VERIFICATION", "status": "Approved" },
{ "feature": "LIVENESS", "status": "Approved" },
{ "feature": "FACE_MATCH", "status": "Approved" }
],
"didit_internal_id": "user-12345",
"kyc_document_type": "Passport",
"kyc_nationality": "ESP",
"kyc_liveness_passed": true,
"kyc_verified_at": "2026-05-17T10:10:11Z",
"kyc_aml_categories": [],
"kyc_notification_sent_at": "2026-05-15T08:00:00Z"
}
],
"beneficial_owners": []
},
"submitted": {
"parties": [
{
"uuid": "d1f1e2c2-bbbb-4d2c-9eb6-fdc6c7c92ef9",
"entity_type": "person",
"source": "USER",
"name": "María García López",
"first_name": "María",
"last_name": "García López",
"company_name": null,
"registration_number": null,
"email": "maria.garcia@example.com",
"nationality": "ESP",
"phone_number": null,
"date_of_birth": "1990-05-12",
"position": "Administrador único",
"custom_fields": {},
"is_active": true,
"is_skipped": false,
"requires_verification": true,
"roles": [
{ "role": "UBO", "ownership_percent": 75.0, "voting_percent": null }
],
"kyc_session_id": "9b1f1e2c-8888-4d2c-9eb6-fdc6c7c92ef9",
"kyc_session_status": "Approved",
"kyc_session_url": "https://verify.didit.me/s/…",
"kyb_sub_session_id": null,
"kyb_sub_session_status": null,
"kyb_sub_session_url": null,
"verification_workflow_type": "kyc",
"verification_workflow_id": "11111111-1111-1111-1111-111111111111",
"verification_workflow_label": "KYB officer KYC",
"verification_workflow_features": [
{ "feature": "ID_VERIFICATION", "status": "Approved" },
{ "feature": "LIVENESS", "status": "Approved" }
],
"didit_internal_id": "user-12345"
}
]
},
"ubo_kyc_summary": { "total": 1, "approved": 1, "flagged": 0, "pending": 0 },
"warnings": []
}
Поля уровня решения
Эти ключи находятся рядом с массивами функций вGET /v3/session/{sessionId}/decision/ и внутри decision в webhook.
| Поле | Тип | Может быть null | Описание |
|---|---|---|---|
status_override | object | Да | { overridden_at, automatic_status } после того, как проверяющий вручную установил status; null, если статус автоматический. |
decision_trace | object | Нет | Как был получен статус: status, decided_by (manual, automatic или investigator), decided_at, automatic_status, terminal_node_id, actor, warning_counts и status_warnings. |
linked_records | object | Да | Сводки same_face, earlier_verifications и networks; null, если показывать нечего. |
biometric_retention | object | Нет | { jurisdictions, deletes_at }. deletes_at: дата, когда удаляются полученные в реальном времени биометрические данные сессии; null, если дата пока не применима. |
database_validation_not_performed_reason | object | Да | { code, message }, объясняющий, почему настроенная проверка по базам данных не дала результата. |
assignee, waiting_since, sla_due_at | object, datetime | Да | Проверяющий Console, которому назначена сессия, и её временной отсчёт проверки; отсчёт равен null, если сессия не находится в статусе In Review. |
shared_from_session, shared_from_session_number | UUID, integer | Да | Исходная сессия, из которой была импортирована текущая сессия. |
sandbox_scenario | string | Да | Сценарий, с которым была создана сессия песочницы. |
fraud_check | object | Да | Результат Fraud Check API; null для всех остальных сессий. |
full_session_video, full_session_video_recorded_at | URL, datetime | Да | Запись и время её создания. Возвращаются только в том случае, если ваша организация записывает видео всей сессии. |
Согласие на биометрические данные
Каждое решение по проверке пользователей и webhook сессии содержат один объектbiometric_consent (не массив). В нём указано, требовалось ли для сессии явно получить согласие на обработку биометрических данных, по какой причине и какие данные подтверждают этот ответ. Значение null, если сессия никогда не оценивалась, например для сценария без захвата лица. Источник: BiometricConsentDecisionSerializer (sessions/serializers/biometric_consent.py). Когда появляется этот шаг и что означает каждый случай, описано в разделе Согласие на биометрические данные.
Поля без записанного значения равны null, но никогда не являются пустой строкой.
| Поле | Тип | Описание |
|---|---|---|
required | логическое значение | Должна ли сессия получить явное согласие на обработку биометрических данных. Никогда не возвращается к false. |
trigger | строка (перечисление) | null | Почему требуется согласие или каким образом оно было получено: declared_state, ip_state, ip_unknown, document_issuer, forced (режим приложения: Always), customer_collected (вы передали biometric_consent при создании сессии). null, пока согласие не требуется. |
status | строка (перечисление) | not_required, pending (требуется, но не дано), given, declined (отказ зафиксирован; ни один экран Didit сейчас не предлагает отказ). |
given_at | строка (ISO 8601) | null | Когда было дано согласие. Для customer_collected это given_at, который вы передали. |
declined_at | строка (ISO 8601) | null | Когда был зафиксирован отказ. |
text_version | строка | null | Идентификатор версии текста согласия, на который ответил человек, или версии, которую вы передали. |
text_hash | строка | null | SHA-256 (в шестнадцатеричном виде) точного показанного текста на языке, на котором он был показан. |
locale | строка | null | Язык, на котором был показан текст. |
policy_url | строка | null | Политика обработки биометрических данных, на которую ссылался этот шаг. |
step | строка | null | Шаг сценария, на котором находилась сессия, когда человек ответил (например, LIVENESS). |
node_id | строка | null | Узел графа сценария, на котором находилась сессия, когда человек ответил. |
ip_address | строка | null | IP-адрес, с которого пришёл ответ. |
ip_country_code | строка | null | Страна IP-адреса ответа в формате ISO 3166-1 alpha-2. |
ip_state | строка | null | Административная единица IP-адреса ответа по ISO 3166-2 (например, US-IL). |
ip_city | строка | null | Город IP-адреса ответа. |
user_agent | строка | null | Агент пользователя запроса, содержащего ответ. |
detected_ip_address | строка | null | IP-адрес человека, с которого в последний раз оценивалось требование. Может отличаться от ip_address, если человек ответил с другого устройства. |
detected_country_code | строка | null | Страна обнаруженного IP-адреса в формате ISO 3166-1 alpha-2. |
detected_state | строка | null | Административная единица обнаруженного IP-адреса по ISO 3166-2. |
detected_city | строка | null | Город обнаруженного IP-адреса. |
declared_state | строка | null | Административная единица по ISO 3166-2, которую вы указали: user_state или штат адреса в США из expected_details. |
document_state | строка | null | Административная единица по ISO 3166-2, которая выдала удостоверение личности. Считывается при съёмке документа. |
jurisdictions | массив строк | Штаты США (коды USPS, например IL), на которые распространяется биометрическое законодательство, действующее для этого человека. US, если данные указывают, что человек находится в США, но штат неизвестен. Пустой массив, если ничего не применимо. |
retention_months | целое число | null | Наименьший срок хранения биометрических данных в месяцах среди jurisdictions. null, если ничего не применимо. |
reason | строка (перечисление) | null | BIOMETRIC_CONSENT_UNSUPPORTED_SDK: согласие требовалось, а нативный SDK версии ниже 4.10.0 (или SDK, не сообщивший свою версию) выполнил захват лица без этого шага. status остаётся pending, либо становится given, если человек позже согласился на размещённой странице верификации. BIOMETRIC_CONSENT_DECLINED: зафиксирован отказ (он заменяет причину, связанную с SDK). В остальных случаях null. Всегда null, если сессия не требовала согласия. |
decline_reason | строка | null | BIOMETRIC_CONSENT_DECLINED, когда зафиксированный отказ завершил сессию, иначе null. |
face_data_deleted_at | строка (ISO 8601) | null | Когда вследствие отказа были удалены изображения лица, видео и биометрические шаблоны лица сессии. null, если отказ не был зафиксирован. |
{
"required": true,
"trigger": "ip_state",
"status": "pending",
"given_at": null,
"declined_at": null,
"text_version": null,
"text_hash": null,
"locale": null,
"policy_url": null,
"step": null,
"node_id": null,
"ip_address": null,
"ip_country_code": null,
"ip_state": null,
"ip_city": null,
"user_agent": null,
"detected_ip_address": "203.0.113.42",
"detected_country_code": "US",
"detected_state": "US-IL",
"detected_city": "Chicago",
"declared_state": null,
"document_state": null,
"jurisdictions": ["IL"],
"retention_months": 36,
"reason": "BIOMETRIC_CONSENT_UNSUPPORTED_SDK",
"decline_reason": null,
"face_data_deleted_at": null
}
{
"required": true,
"trigger": "declared_state",
"status": "given",
"given_at": "2026-10-13T18:31:07.412000Z",
"declined_at": null,
"text_version": "bio-consent-2026-10-12",
"text_hash": "9b2f0c5e4d8a7f61c3e2b4a5d6f7081923a4b5c6d7e8f90a1b2c3d4e5f6a7b8c",
"locale": "en",
"policy_url": "https://didit.me/legal/biometric-data-policy",
"step": "LIVENESS",
"node_id": "feature_liveness_1",
"ip_address": "198.51.100.23",
"ip_country_code": "ES",
"ip_state": "ES-M",
"ip_city": "Madrid",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.0 Mobile/15E148 Safari/604.1",
"detected_ip_address": "198.51.100.23",
"detected_country_code": "ES",
"detected_state": "ES-M",
"detected_city": "Madrid",
"declared_state": null,
"document_state": null,
"jurisdictions": ["IL"],
"retention_months": 36,
"reason": null,
"decline_reason": null,
"face_data_deleted_at": null
}
Справочник значений перечисления status
Два связанных набора значений используют одно и то же имя поляstatus. Каждый объект отчёта по отдельной функции на этой странице использует перечисление уровня функции. Верхнеуровневое поле status родительской сессии использует более широкое перечисление уровня сессии.
Статусы на уровне функций
Используется в полеstatus каждого объекта отчёта. Источник: common/config/choices.py:343-348 (FeatureStatusChoices).
| Значение | Описание |
|---|---|
Not Finished | Функция подготовлена, но пользователь ещё не завершил её. |
Approved | Функция прошла все проверки. |
Declined | Функция не прошла как минимум одну жёсткую проверку (см. warnings[] с log_type: "error"). |
In Review | Функция вызвала сигналы мягкого отказа и ожидает ручной проверки (см. warnings[] с log_type: "warning"). |
Resub Requested | Проверяющий запросил у пользователя повторно пройти эту функцию. |
Expired, когда истекает время, отведённое на соответствующий шаг (PhoneStatusChoices в common/config/choices.py:377-382, EmailStatusChoices в common/config/choices.py:434-439).
Статусы на уровне сессии
Используется в верхнеуровневом полеstatus родительской сессии. Источник: common/config/choices.py:106-117 (StatusChoices).
| Значение | Описание |
|---|---|
Not Started | Сессия создана, но пользователь ещё не начал её. |
In Progress | Пользователь начал процесс; результат ещё не окончательный. |
Approved | Сессия прошла все проверки. |
Declined | Сессия не прошла как минимум одну жёсткую проверку. |
In Review | Сессия ожидает ручной проверки. |
Expired | Сессия истекла до завершения. |
Abandoned | Пользователь покинул процесс, не завершив его. |
Kyc Expired | Истёк срок действия KYC (используется в потоках повторной верификации). |
Resubmitted | Пользователь повторно отправил данные после предыдущего отказа; эта сессия заменена более новой. |
Awaiting User | Система ожидает действия пользователя (например, ввода одноразового кода OTP). |
Конечными значениями сессии являются
Approved, Declined, In Review, Expired, Kyc Expired и Abandoned. Сессия может получить общее решение, пока отдельная функция остаётся в статусе In Review.