跳转到主要内容

概述

每个针对具体功能的报告均遵循 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)。

报告对象

其余章节分别介绍各功能对应的报告对象。三级标题文字特意保持稳定,以便其他文档直接深度链接到这些标题。

身份证件验证

用户每提交一份 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 电子护照或电子身份证芯片,或通过 JPKI 读取的日本 My Number 卡(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)。

活体检测

按活体会话返回。以 liveness_checks[] 的形式出现在 GET /v3/session/{sessionId}/decision/ 中。来源:face/serializers/face.py:301-320(LivenessV3Serializer,继承自 face/serializers/face.py:216-298 中的 LivenessV2Serializer)。
当 PASSIVE 会话的采集保存了录像时,会返回此字段;若会话未保留录像,则返回 null。上面的示例是一个未保留录像的会话。

人脸比对

每次人脸比对(通常是用户的活体人脸与证件照片的比对)返回一次。以 face_matches[] 的形式出现在 GET /v3/session/{sessionId}/decision/ 中。来源: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 条目出现,并在 liveness_checks[] 中包含一个保存了 matches 的条目。来源:apis/serializers/face_search.py:8-79(FaceSearchResponseSerializer 包装 FaceSearchDetailsSerializer);匹配字典构建于 face/utils/utils.py:869-884。 顶层响应: face_search 对象:

人脸搜索匹配对象

AML 筛查

按每个被筛查的实体返回。对于 KYC 和 KYB 会话,均会以 aml_screenings[] 的形式出现在 GET /v3/session/{sessionId}/decision/ 中。来源:aml/serializers/aml.py:63-85(AMLV3Serializer,继承自 aml/serializers/aml.py:28-60 中的 AMLV2Serializer)。

IP 分析

按每个采集的网络位置返回。在 KYC 和 KYB 会话的 GET /v3/session/{sessionId}/decision/ 中,以 ip_analyses[] 形式出现。来源:kyc/serializers/location.py:196-243(IPAnalysisSerializerV3)。

位置验证

按每个 位置验证 步骤返回。在 GET /v3/session/{sessionId}/decision/ 中,以 geolocation_checks[] 形式出现:每个步骤一项,即其被接受的那次尝试。geolocation_attempts[] 列出每个步骤的每次尝试,最早的在前。对于不包含该步骤的工作流,两者均为 null。来源:GeolocationDecisionSerializer。 所有字段和示例均见位置验证报告。

地址证明

每份提交的地址证明文件返回一条记录。以 poa_verifications[] 的形式出现在 GET /v3/session/{sessionId}/decision/ 中。来源: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 登记信息

针对每家经公司登记机构确认的公司返回。在企业会话的 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月14日