config 字段用于 POST /v3/workflows/ 和 PATCH /v3/workflows/{settings_uuid}/ 的 features 数组中每个条目内。
features 数组构建线性的节点式工作流。请按照实际执行顺序发送各项功能。
某项功能由哪个引擎运行(Didit 自有引擎,还是第三方服务商)不在下列 config 字段之列。它通过控制台的 市场 管理,市场会为你在该功能的
config 对象上设置 provider_key 和 fallback_to_native。验证规则
- 省略
config.documents_allowed、将其设为null或{}时,OCR默认覆盖所有受支持的国家/地区和证件类型。如果你发送自定义的documents_allowed对象,它必须至少包含一个有效的国家/地区和一种已启用的证件类型。每个证件配置都可以将sides设为1(仅采集正面)或2(采集正反面)。 QUESTIONNAIRE需要config.questionnaire_uuid。KYB_DOCUMENTS需要config.kyb_required_document_groups。SIGNATURE在合格电子签名可用之前,会以qes_not_available拒绝signature_level: "qes"。当工作流上的signature_availability.aes为false时,新的signature_level: "aes"步骤会以aes_not_available被拒绝。其文件必须在创建会话时已存在:当signature_documents_source设为workflow时,该步骤需要在控制台中上传文件,没有文件的步骤可以保留为草稿,但无法上线;设为session时,每次创建调用都必须发送sign.documents。FACE_MATCH在简单工作流请求中必须位于OCR之后。- 同一工作流中同时出现
NFC和DATABASE_VALIDATION时,二者都需要OCR。AML之前需要有OCR、KYB_REGISTRY或DOCUMENT_AI之一。如果其前面只有DOCUMENT_AI,则待筛查的full_name必须能够被填充:它可以来自前面已将键设为full_name的 Document AI 字段(系统会为你自动映射),也可以来自显式的config.aml_field_sources条目(参见 AML)。 KYB_DOCUMENTS和KYB_KEY_PEOPLE等 KYB 子功能要求工作流中更早的位置已有KYB_REGISTRY。- 工作流只能是个人(KYC)工作流或企业(KYB)工作流,二者不能同时存在。使用了任一 KYB 功能(
KYB_REGISTRY、KYB_DOCUMENTS、KYB_KEY_PEOPLE)的工作流,只能与AML、DOCUMENT_AI、QUESTIONNAIRE、PHONE_VERIFICATION、EMAIL_VERIFICATION、IP_ANALYSIS和SIGNATURE组合。它不能包含仅适用于个人的功能,例如OCR、LIVENESS、FACE_MATCH、NFC、PROOF_OF_ADDRESS、DATABASE_VALIDATION或AGE_ESTIMATION;个人工作流也不能包含 KYB 功能。在企业工作流中,DOCUMENT_AI会将任何标记为is_full_name的字段与已核验的公司进行比对,而不是与个人比对。若要核验公司背后的人员,请单独创建一个 KYC 工作流,并在KYB_KEY_PEOPLE节点中通过kyb_ubo_verification_workflow、kyb_officer_verification_workflow或kyb_shareholder_verification_workflow引用该工作流。 - 操作字段使用
DECLINE、REVIEW或NO_ACTION,除非下文说明某字段受到限制。 - 分数和阈值字段为
0到100之间的数字,除非列出了更窄的范围。
通用状态规则
每个功能都支持可选的status_rules 数组。当字段条件匹配时,可使用它覆盖功能状态。
按如下方式理解上面的示例:
kyc.extra_fields.profession 以 80 为最低分数进行模糊匹配 Soft. Engineer,则将功能状态设置为 Declined。
对于身份证件验证,可以指定提取的 extra_fields 值,例如 kyc.extra_fields.profession;驾照类别的有效期日期,例如 kyc.extra_fields.dl_class_code_b_from 和 kyc.extra_fields.dl_class_code_b_to;或各类别的限制/说明代码,例如 kyc.extra_fields.dl_class_code_b_notes(英国驾照的第 12 列)。这些值来自 OCR 结果的 extra_fields 对象,不属于 expected_details。
dl_class_code_*_from 和 dl_class_code_*_to 始终是有效的 ISO 日期,或者不会出现在 extra_fields 中。Didit 绝不会在日期字段中返回无法识别的 OCR 文本。如果无法读取类别表中的单元格,该字段将被省略,而不会以原始字符串形式发送。因此,请使用 is_empty 运算符将无法识别的类别日期路由到相应的处理流程,而不要假设该字段始终存在。value_type: "relative_date",并将值设置为如下结构的对象:{ "direction": "past" | "future", "amount": number, "unit": "days" | "months" | "years" }。例如,使用 operator: "less_than" 和 { "direction": "past", "amount": 3, "unit": "years" },可匹配从今天起三年以前的日期。
与特定步骤比较
图形化工作流可以多次运行同一功能,例如运行三个身份证件验证步骤。 当使用value_type: "field" 时,在值后追加 @<node_id>,即可读取某个特定步骤的值。
被引用的节点必须是功能步骤,并且在到达该规则所在步骤的每条路径上,都必须始终先于该规则所在的步骤运行;或者它就是该规则所在的步骤本身。
不带后缀的值将从该规则所在的步骤读取。
kyc.full_name 以 80 为最低分数,模糊匹配步骤 ocr_1 读取的全名,则将功能状态设置为 Declined。
在控制台中,变量选择器会按画布上的编号列出每个符合条件的步骤,并自动为您存储后缀。
OCR / 身份证件验证
功能值:OCR。
以上六个
document_liveness_* 阈值用于配置证件活体检测,而不是按信号配置的判定字段。portrait_replacement_action、printed_copy_action 和 screen_capture_action 是账户级设置,不接受在工作流功能配置中设置:API 在保存时会去除未知的配置键,因此在此发送它们不会生效。每个信号都有拒绝阈值和审核阈值,取值范围为 0-100,分数越高表示证件越可能为真实。按国家/地区设置的方法
methods 以 ISO 3166-1 alpha-3 国家/地区代码为键。每个国家/地区最多包含三个方法对象;未填写的项目使用默认值。
wallet.on_failure 的取值为 fallback_to_document、decline 或 retry。retry(仅适用于钱包,且该国家/地区已关闭证件采集)会让登录未在钱包步骤完成的用户再次尝试;会话绝不会因此被拒绝,并会保持开放,直到用户完成或会话过期。id_lookup 开关仅接受 fallback_to_document 或 decline。
若要让证件不出现在第一屏,仅在钱包或查询未成功时才提供证件,请设置 document.fallback_only。示例使用芬兰,其中芬兰可信网络优先,证件采集作为备用。芬兰还需要在 documents_allowed 中启用其证件类型(例如护照和身份证),以便备用方案有可提供的证件。
available,因此该配置可按原样保存。本示例有意省略钱包部分:只有在目录将钱包标记为 available 的国家/地区,钱包配置才能保存;在其他国家/地区设置 wallet.enabled: true 会被拒绝,并导致整个保存失败,包括查询配置在内。若目录将某国家/地区的钱包标记为 available,请在该国家/地区添加钱包:
保存时 API 会执行以下验证:
- 未知的国家代码、国家内的未知键或方法内的未知键都会被拒绝,不会静默丢弃任何内容。
- 所有方法均未启用的国家/地区会被拒绝,因为该地区的用户无法完成验证。
- 只有在该国家/地区启用证件采集时,钱包或查询才能回退至证件采集。在
document.enabled为false的国家/地区,fallback_to_document会在运行时导致拒绝,因为没有可回退的目标。 - 除非
document.enabled为true,且该国家/地区至少有一个钱包或身份查询回退至证件采集,否则document.fallback_only: true会返回 HTTP 400 错误。
methods 之前,请先查看能力目录。您可以通过控制台的 国家 标签页查看,也可以使用 didit_workflow_get_id_verification_methods_catalog MCP 工具。行为、覆盖范围和计费信息见身份证件验证方法。
NFC / 电子护照
功能值:NFC。
活体检测
功能值:LIVENESS。
人脸比对
功能值:FACE_MATCH。
年龄估算
功能值:AGE_ESTIMATION。
电话验证
功能值:PHONE_VERIFICATION。
在组织完成首次充值之前,电话验证处于禁用状态。
电话情报增强是可选的附加功能。当
phone_enrichment_enabled 为 true 时,每次完成的电话验证都会附带电话情报增强,并在标准电话验证费用之外每次请求收取 $0.05。基于评分的操作只有在增强评分可用后才会生效;信任指数、电话类型和转网相关操作在增强运行后即会应用。社交足迹检查是第二个独立的附加功能。当 phone_social_enabled 为 true 时,每次完成的电话验证还会返回该号码注册的在线平台,包括即时通讯、社交媒体、电子商务和专业服务,并且每次请求收取 $0.05。它可以与 phone_enrichment_enabled 同时启用,也可以单独启用:两个附加功能的定价和计费相互独立。如果查询结果显示号码未在其覆盖的任何平台上注册,这同样是有效且计费的结果,并会触发 phone_no_social_presence_action。若要在工作流图谱中根据结果进行分支,请使用 phone.social_profiles_registered(号码注册的平台数量)。邮箱验证
功能值:EMAIL_VERIFICATION。
邮箱情报增强是可选的附加功能。当
email_enrichment_enabled 为 true 时,每次完成的邮箱验证都会进行邮箱情报增强,每次请求收取 $0.05,另加标准的邮箱验证费用。基于分数的操作会在情报增强评分可用后生效;泄露相关操作则在增强运行后立即生效。社交足迹检查是第二个独立的附加功能。当 email_social_enabled 为 true 时,每次完成的邮箱验证还会报告该地址在哪些在线平台上注册过,包括邮箱服务商、社交媒体、专业、电子商务和娱乐服务,并且每次请求收取 $0.05。它可以与 email_enrichment_enabled 同时启用,也可以单独启用,两项附加功能的定价和计费相互独立。如果查询发现该地址未在任何覆盖的平台上注册,这依然是有效且计费的结果,并会触发 email_no_social_presence_action。如需在工作流图中根据结果进行分支,请使用 email.social_profiles_registered(该地址已注册的平台数量)。数据库核验
功能值:DATABASE_VALIDATION。
示例:
400,错误信息会指明该 ID 并说明原因,且不会保存任何内容。这包括:ID 不在目录中、ID 属于其他国家、服务尚未开放,以及服务仅通过独立的 POST /v3/database-validation/ 提供。如果某个服务所需的输入无法由任何前面的步骤提供,同样会被拒绝,并列出缺失的输入。已保存的工作流中如果包含某个已无法运行的服务,重新保存时该服务会被移除。
例如,此阿根廷工作流从身份证件验证读取 DNI 号码和性别,并在不使用自拍照的情况下将其与 RENAPER 核对:
arg_renaper,并在 LIVENESS 步骤之后使用。其人脸比对分数和阈值参见 RENAPER。
银行验证
功能值:BANK_VERIFICATION。
用户验证银行账户,银行报告的账户持有人会与工作流中较早步骤确立的身份进行比对。用户可通过两种方式之一完成验证:银行登录(open_banking),即在自己的银行登录;或账户核验(account_lookup),即输入账户信息,由银行确认其上的户名。bank_method_order 以及每个国家/地区的 methods 决定某个国家/地区提供哪些方式,以及哪种方式排在最前;参见 银行验证方式。该步骤会生成证据,包括户名匹配分数、生成该分数的比对以及原因代码;bank_*_action 键则将这些证据转换为状态。
节点是否执行任何操作,取决于两个因素。bank_countries 是白名单,因此空映射不会提供任何银行,也不会执行任何检查。此外,持有人还需要有可供比对的依据:在该节点前放置 OCR、DATABASE_VALIDATION 或 QUESTIONNAIRE 步骤,在创建会话时发送 expected_details,或使用 bank_field_sources 自行映射字段。若以上条件均不满足,账户归属只能为 unknown,此时由 bank_reference_identity_missing_action 决定如何处理。
银行验证功能仍在逐步推出,因此只有在已为其启用该功能的账户上,
BANK_VERIFICATION 节点才会被接受。在其他账户上,保存会被拒绝,并会说明原因。此处同样不配置由哪条路由执行该步骤:路由由控制台 Marketplace 为您设置的 provider_key 与 fallback_to_native 这一组参数决定。连接账户
用户无法完成验证时
用户始终可以不通过银行继续,该步骤不会使用户陷入停滞。参见 用户无法验证其银行时。
用户选择继续时,会话会根据其继续的原因执行
bank_unsupported_action、bank_attempts_exhausted_action 或 bank_skipped_action 中对应的操作,除非此前已有某次尝试评估并已决定该步骤的结果:参见 判定操作。
比对账户持有人
账户核验
以下配置仅适用于账户核验。银行登录保留其自身的近似匹配以及bank_max_attempts。
财务数据
bank_expected_currencies 仅依赖默认的 ownership 授权范围即可使用。其他三个配置项读取真实的财务数据,因此每一项都需要在 bank_scopes 中配置对应的授权范围,否则保存会被拒绝。
存储内容
判定操作
除非标记为受限,否则此处每个键都接受DECLINE、REVIEW 或 NO_ACTION。省略或发送 null 时,将使用下方的默认值。凡不属于明确所有权证据的结果,默认都不会通过;只有能够证明与用户不符的证据才会导致拒绝。
更多控制
这些键均为可选。每个操作键接受DECLINE、REVIEW 或 NO_ACTION。
示例
config 对象,适用于已启用 Bank Verification 且所选通道覆盖您所列国家/地区的账户:
AML
功能值:AML。
对于 KYC 个人筛查,请使用以下字段:
对于 KYB 企业筛查,请使用以下字段:
筛查 Document AI 步骤提取的实体
AML 步骤通常从OCR 步骤(个人)或 KYB_REGISTRY 步骤(企业)读取其要筛查的对象。如果工作流唯一的提取步骤是 DOCUMENT_AI(例如税务证明或成立文件等非标准化文件),则两者都没有,因此必须说明每个筛查输入来自何处。
示例:筛查墨西哥 acta constitutiva(公司设立文件)中提到的公司,且工作流中没有任何身份证件:
设备与 IP 分析
功能值:IP_ANALYSIS。
示例:
recovered_device_action 与 duplicated_device_action 分开配置。这在上线推广期间很有用,因为已恢复设备匹配旨在检测欺诈团伙,但仍应结合您自身的流量进行校准。
位置验证
功能值:GEOLOCATION。
通过设备位置或连接的 IP 位置,检查用户在验证过程中所处的位置,并将其与允许区域、禁止区域、IP 位置和证件地址进行比对。
步骤的运行方式请参阅位置验证,决策字段请参阅其报告。
如果你需要计算与证件地址的距离,请将此步骤放在身份证件验证或地址证明之后,因为只有存在已登记地址时才会测量该距离。
当 geolocation_position_source 未设置时,与 IP 位置的距离需要同一工作流中包含设备与 IP 分析步骤。
所有字段均为可选:config 为空的步骤会要求设备提供精度在 250 米以内、时间不超过 120 秒的位置,允许用户尝试 3 次,并且不应用任何区域规则。
每个检测结果都有各自的操作字段。未设置的操作字段采用你所选 geolocation_preset 的默认值;若未选择预设,则采用下方列出的各字段默认值。
位置不确定或被拒绝时默认为 REVIEW,而不是 DECLINE,因为权限被拒绝或半径过大并不构成欺诈证据。
你显式设置的操作始终优先于预设。
重放的挑战(LOCATION_REPLAY_DETECTED)和失败的设备证明(LOCATION_INTEGRITY_FAILED)始终会拒绝,且没有操作字段。
区域形状
geolocation_areas 中的每一项都有一个 id(1 至 64 个字符,仅限 A-Z a-z 0-9 _ -,且在列表中唯一)、一个可选的 label(最多 80 个字符)、一个 type(取值为 allowed 或 blocked),以及一个用于选择形状的 kind。
一个列表最多包含 50 个区域,并且在
is_geolocation_geofencing_enabled 为 true 时,至少需要一个 allowed 区域。
geolocation_areas 与 geolocation_geofencing_by_country 不能同时发送,并且 geolocation_refusal_path: "end_session" 要求 geolocation_permission_denied_action 为 REVIEW 或 DECLINE。
对于永远无法匹配的区域(例如某个国家没有已发布边界的区域),API 会拒绝该区域,而不予保存。
示例:
地址证明
功能值:PROOF_OF_ADDRESS。
问卷
功能值:QUESTIONNAIRE。
KYB 公司登记
功能值:KYB_REGISTRY。
kyb_registry_fields_config 将每个可配置字段键映射为 {"enabled": bool, "required": bool}。enabled: false 隐藏该字段,enabled: true, required: false 将其显示为可选,enabled: true, required: true 则使其在提交时必填。company_name、country_code 和 region 始终显示且必填,无法配置。当该对象被省略、为 null 或为 {} 时,采用默认设置:仅 incorporation_date 为必填,其余字段均为可选。
registration_number、incorporation_date、legal_address、vat_number、alternative_names、tax_number、company_type、legal_entity_identifier、location_of_registration、nature_of_business、registered_capital_amount、registered_capital_currency、website、email、phone、control_scheme。有关终端用户的行为,请参阅可配置的登记表单字段;有关 vat_number 和 tax_number 的检查方式,请参阅增值税号与税号验证。
KYB 证件
功能值:KYB_DOCUMENTS。
KYB 关键人员
功能值:KYB_KEY_PEOPLE。
Document AI
功能值:DOCUMENT_AI。
向用户请求一份或多份证件,并借助视觉模型提取您定义的指定字段。每个已配置的字段都会成为可用于分支的值 document_ai.<key>,该步骤的结果为 document_ai.status。
document_ai_documents 中的每一项都是一个证件:
证件
fields 中的每一项都是一个字段:
示例:
电子签名
功能值:SIGNATURE。
让已验证的个人或企业的关键人员,在文档上签名。签名级别可选简单(默认)或高级(AES)。请将其放在验证签署人的步骤之后:身份证件验证,以及用于接收验证码的邮箱或电话验证。参见 电子签名。
工作流文档中的字段在控制台的模板编辑器中设置。对于会话文档,请在
sign.documents[].fields 中发送字段,并在 sign.field_values 中发送 api.<key> 字段的值。参见 创建会话。
示例,适用于每次会话都发送文档的情况: