跳转到主要内容

概述

每个针对具体功能的报告均遵循 service-didit-verification 中定义的 V3 序列化器结构。同一对象出现在三个位置,因此您在此处看到的架构是这些位置之间唯一的真实信息来源:
  • 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[])。
  • Webhook payload(status.updated、data.updated):在 decision 外层结构中使用相同的格式。
  • 独立 API:单对象响应(人脸搜索、年龄估算、生物识别认证)复用相同的字段集。
V3 引入了多实例工作流:每个功能对象都包含一个 node_id,用于将报告锚定到生成它的工作流图谱节点。V2 endpoint(单数形式的 kyc、face、aml 等)保持向后兼容,但仅返回第一个实例。

常见字段

每个报告对象都会公开以下字段: 媒体字段(portrait_image、front_image、document_file,…)是具有有限有效期的预签名 URL,请及时下载它们,而不是持久保存该 URL。示例中将其显示为 https://<media-host>/...。

警告对象

每个 warnings[] 数组中都会返回。架构来自 logs/serializers/log.py:8-65(LogV3Serializer)。

报告对象

其余部分涵盖每个功能的报告对象。H3 标题文本保持稳定,以便其他文档进行深度链接。

身份证件验证

针对用户提交的每份 KYC/身份证件返回。在 GET /v3/session/{sessionId}/decision/ 中显示为 id_verifications[],并出现在 V2 响应的 kyc 字段中。代码来源:kyc/serializers/kyc.py:383-414(IDVerificationV3Serializer,继承位于 kyc/serializers/kyc.py:320-380 的 IDVerificationV2Serializer)。
采用非证件方式时的同一对象。仅与方法相关的键会发生变化:证件读取所填充的全部内容将改由登记库记录或钱包属性填充,不适用的键则为 null。

NFC 验证

针对身份证件的每次芯片读取返回:ICAO 9303 电子护照或 eID 芯片,或通过 JPKI 读取的日本个人编号卡(My Number Card,chip_protocol: "jpki")。在 GET /v3/session/{sessionId}/decision/ 中体现为 nfc_verifications[](每个父级 KYC 记录对应一项)。代码源自:kyc/serializers/epassport.py:121-139(NFCV3Serializer,继承自 kyc/serializers/epassport.py:83-118 的 NFCV2Serializer)。

活体检测

每个活体检测会话返回一次。在 GET /v3/session/{sessionId}/decision/ 中体现为 liveness_checks[]。源码:face/serializers/face.py:301-320(LivenessV3Serializer,继承位于 face/serializers/face.py:216-298 的 LivenessV2Serializer)。

人脸比对

每次人脸比对返回一次(通常为用户的活体人脸与证件人像比对)。在 GET /v3/session/{sessionId}/decision/ 中体现为 face_matches[]。源码:face/serializers/face.py:367-389(FaceMatchV3Serializer,继承位于 face/serializers/face.py:323-364 的 FaceMatchV2Serializer)。

人脸搜索

由独立的人脸搜索 API(POST /v3/face-search/)返回。人脸搜索绝不会以复数数组形式出现在 /v3/session/{sessionId}/decision/ 中 — 当通过 save_api_request=true 持久化时,该会话会在其中显示为 features[] 中的一个 FACE_SEARCH 条目,以及一个携带已存储 matches 的 liveness_checks[] 项。源码:apis/serializers/face_search.py:8-79(包装 FaceSearchDetailsSerializer 的 FaceSearchResponseSerializer);匹配字典构建于 face/utils/utils.py:869-884。 顶层响应: face_search 对象:

人脸搜索匹配对象

AML 筛查

按被筛查实体返回。在 KYC 和 KYB 会话的 GET /v3/session/{sessionId}/decision/ 中均显示为 aml_screenings[]。源码:aml/serializers/aml.py:63-85(AMLV3Serializer,继承位于 aml/serializers/aml.py:28-60 的 AMLV2Serializer)。

IP 分析

针对每个捕获的网络位置返回。在 KYC 和 KYB 会话中均作为 ip_analyses[] 出现在 GET /v3/session/{sessionId}/decision/ 中。来源:kyc/serializers/location.py:196-243(IPAnalysisSerializerV3)。

位置验证

针对每个位置验证步骤返回。在 GET /v3/session/{sessionId}/decision/ 中显示为 geolocation_checks[]:每个步骤一个条目,即其已接受的尝试。geolocation_attempts[] 列出每个步骤的每次尝试,按时间由早到晚排序。对于不包含该步骤的工作流,两者均为 null。来源:GeolocationDecisionSerializer。 所有字段和示例请参见位置验证报告。

地址证明

按提交的每个地址证件返回。在 GET /v3/session/{sessionId}/decision/ 中显示为 poa_verifications[]。来源:poa/serializers/poa.py:212-227(POAV3Serializer,继承位于 poa/serializers/poa.py:173-209 的 POAV2Serializer)。

电话验证

针对每次电话验证尝试返回。在 KYC 和 KYB 会话的 GET /v3/session/{sessionId}/decision/ 中显示为 phone_verifications[]。来源:phone/serializers/phone.py:251-266(PhoneV3Serializer,继承自 phone/serializers/phone.py:103-248 的 PhoneV2Serializer)。

邮箱验证

针对每次邮箱验证尝试返回。在 KYC 和 KYB 会话的 GET /v3/session/{sessionId}/decision/ 中显示为 email_verifications[]。来源:email_verification/serializers/email.py:149-164(EmailV3Serializer,继承自 email_verification/serializers/email.py:38-146 的 EmailV2Serializer)。

数据库核验

针对基于用户提交数据运行的每次数据库查询返回。在 GET /v3/session/{sessionId}/decision/ 中显示为 database_validations[]。来源:database_validation/serializers/database_validation.py:21-142(DatabaseValidationV3Serializer,继承自 DatabaseValidationV2Serializer)。

问卷响应

每次提交问卷时返回。在 KYC 和 KYB 会话的 GET /v3/session/{sessionId}/decision/ 中以 questionnaire_responses[] 形式出现。来源:questionnaires/serializers/questionnaire.py:591-597(QuestionnaireResponseV3Serializer,继承自 questionnaires/serializers/questionnaire.py:520-588 中的 QuestionnaireResponseSerializer)。

电子签名

针对电子签名步骤的每位签署人返回。仅当工作流包含该步骤时,在 KYC 和 KYB 会话的 GET /v3/session/{sessionId}/decision/ 中以 signatures[] 形式出现。与其他报告对象不同,其 status 代表签署阶段,结果在 verdict 中,且其 warnings[] 条目为 { code, node_id },而非警告对象。 电子签名报告提供了完整示例和所有嵌套字段。

年龄估算

由独立的年龄估算 API(POST /v3/age-estimation/)返回。响应在 age_estimation 外层对象下包含 Liveness check 结构的子集(status、method、score、age_estimation、warnings),外加仅独立接口拥有的 user_image 人脸检测块;它不包含 reference_image、video_url、matches、face_quality 或 face_luminance。在工作流会话中不存在单独的数组,估算的年龄在 GET /v3/session/{sessionId}/decision/ 中作为 liveness_checks[].age_estimation 呈现。来源:apis/serializers/age_estimation.py:50-55(AgeEstimationResponseSerializer),外层对象组装位于 apis/views/age_estimation.py:138-174。

生物识别认证

生物识别认证运行标准 KYC 中使用的相同活体检测 + 人脸比对流水线,但配置为将采集到的人脸与现有用户的参考图像进行比对,而不是与刚通过 OCR 识别的证件头像进行比对。没有专门的序列化器:GET /v3/session/{sessionId}/decision/ 在 liveness_checks[] 和 face_matches[] 下返回标准的 活体检测 和 人脸比对 对象。该会话的工作流配置为 workflow_type = "biometric_authentication"(WorkflowTypeChoices,common/config/choices.py:636)。

KYB 公司登记

在 KYB 工作流中针对每个经公司登记确认的公司返回。在用于企业会话的 GET /v3/session/{sessionId}/decision/ 中显示为 registry_checks[]。来源:kyb/serializers/kyb.py:939-964(RegistryCheckV3Serializer)。

公司对象

来自 kyb/serializers/kyb.py:220-321(KYBCompanyResponseSerializer)。

KYB 证件

按收集 KYB 支持性证件的节点返回。在用于企业会话的 GET /v3/session/{sessionId}/decision/ 中显示为 document_verifications[] — 每个 node_id 一个条目,其中 items[] 列出每个上传的证件。来源:kyb/serializers/kyb.py:1053-1068(DocumentVerificationV3Serializer);每个项目的结构遵循 kyb/serializers/kyb.py:811-851(KYBDocumentResponseSerializer)。

KYB 证件项对象

KYB 关键人员

在 KYB 工作流中按关键人员节点返回。在企业会话的 GET /v3/session/{sessionId}/decision/ 中显示为 key_people_checks[]。源码来源:kyb/serializers/kyb.py:967-1050(KeyPeopleCheckV3Serializer)。

决策层级字段

这些字段位于 GET /v3/session/{sessionId}/decision/ 响应及 Webhook 的 decision 内部,与功能数组并列。 有关如何读取这些字段,请参阅获取会话。

生物识别同意

每个用户验证决策和会话 Webhook 都包含一个单一的 biometric_consent 对象(非数组):说明该会话是否需要明确的生物识别同意、原因以及该答复的证据。当会话从未被评估时(例如不含人脸采集的工作流),该字段为 null。来源:BiometricConsentDecisionSerializer(sessions/serializers/biometric_consent.py)。何时出现此步骤以及各种情况的具体含义,请参阅生物识别同意。 没有记录值的字段为 null,绝不会是空字符串。 在伊利诺伊州由低于 4.10.0 版本的原生 SDK 提供服务、并在未执行该步骤的情况下采集了自拍照的会话:
使用出口位于美国境外的 VPN、并在托管流程中表示同意的用户:

状态枚举参考

两个相关的值空间共用 status 字段名。本页中的每个功能报告对象均使用功能级枚举;父会话的顶层 status 则使用更广泛的会话枚举。

功能级状态

供每个报告对象的 status 字段使用。来源:common/config/choices.py:343-348(FeatureStatusChoices)。 当其对应步骤超时时,电话验证、邮箱验证和身份证件验证还可能呈现 Expired(PhoneStatusChoices 见 common/config/choices.py:377-382,EmailStatusChoices 见 common/config/choices.py:434-439)。

会话级状态

供父会话的顶层 status 使用。来源:common/config/choices.py:106-117(StatusChoices)。
会话的终止状态值为 Approved、Declined、In Review、Expired、Kyc Expired 和 Abandoned。即使单个功能仍处于 In Review 状态,会话也可以得出其总体决策。
最后修改于 2026年11月7日