跳转到主要内容
邮箱验证报告记录了邮箱 OTP 验证的完整结果:消息发送对象、该地址是否为一次性邮箱或无法送达、是否出现在已知数据泄露事件中、用户尝试了多少次,以及与您的黑名单或其他已通过验证的用户的跨会话匹配项。 本页面介绍了决策 endpoint 返回的 JSON 结构,以便您解析每个已验证地址的 OTP 结果、数据泄露情况和风险标记。
Didit 邮箱验证报告,展示 OTP 结果、泄露数据和风险标记

概述

工作流节点每次运行邮箱验证功能时,都会生成一份邮箱报告。每份报告代表针对一个地址的一次 OTP 验证,包含以下内容:
  • 已验证的 email 地址。
  • 布尔值风险标记(is_breached、is_disposable、is_undeliverable)以及来自泄露情报数据库的辅助 breaches[] 数组。
  • OTP 发送尝试次数(verification_attempts)和通过时间戳。
  • 记录每次发送、重试和验证码核验尝试的按时间排序的 lifecycle[] 日志。
  • 呈现同一地址在其他已通过邮箱验证或您的黑名单中出现的 matches[] 数组。
  • warnings[] 数组:验证期间产生的风险事件(请参阅邮箱验证警告)。
  • 标识生成该报告的工作流图谱节点的 node_id(仅限 V3 会话)。
在托管工作流会话中,OTP 验证在 Didit 验证界面内运行,您只需从决策 payload 中读取结果。对于无需托管流程的服务器到服务器 OTP,请使用独立的 Email API:POST /v3/email/send/ 投递验证码,POST /v3/email/check/ 校验用户输入;最终完成的独立验证会以相同的报告结构呈现。 托管会话默认对用户限制为最多输入 2 次错误验证码(email_max_check_attempts)以及最多发送 2 次 OTP(初始发送加一次重新发送)(email_max_retries),可在每个工作流节点中进行调整。超过任一上限都会将该步骤最终判定为 Declined,并带有 EMAIL_CODE_ATTEMPTS_EXCEEDED。

在 API 响应中的位置

决策 endpoint(GET /v3/session/{sessionId}/decision/)在复数数组键 email_verifications 下返回邮箱报告。该数组在工作流图谱中每个邮箱验证节点包含一个条目,通常为一个,但升级流程可能会生成多个。
null 值表示尚未运行邮箱验证步骤。当您的工作流可以收集多个邮箱地址时,请遍历该数组(而不是直接读取 email_verifications[0])。

数据结构

权威且逐字段详细说明的数据结构请参见数据模型页面。
无法投递的地址 — 无论是语法无效、域名不存在、缺少 MX 记录,还是 OTP 投递失败 — 都会将该步骤最终判定为 Declined,并触发自动拒绝警告 UNDELIVERABLE_EMAIL_DETECTED。唯一的例外情况是:当用户自行输入邮箱地址(而非在创建会话时预填充)时,投递失败会返回内联错误,以便用户可以使用其他地址重试,而不会被立即拒绝。

状态值

生命周期事件类型

lifecycle[] 按时间先后顺序排序。每个事件都包含 type、timestamp、details 以及计费 fee(如适用): details payload 取决于事件类别:
  • 发送事件(EMAIL_VERIFICATION_MESSAGE_SENT、EMAIL_VERIFICATION_RETRY_MESSAGE_SENT)— { status, reason }。status 为 Success、Retry 或 Undeliverable;reason 为 null,除非发送失败(email_can_not_be_delivered,或未识别的历史遗留值为 unknown)。
  • 核验事件(VALID_CODE_ENTERED、INVALID_CODE_ENTERED)— { code_tried, status },其中 status 为 Approved、Failed、Expired or Not Found 或 Declined。
  • 最终状态事件 — 为 null,但 EMAIL_VERIFICATION_DECLINED / EMAIL_VERIFICATION_IN_REVIEW 除外,它们会携带 { "reason": "<risk code>" }(例如 UNDELIVERABLE_EMAIL_DETECTED)。
status 为 Success 或 Undeliverable 的发送会记录 $0.02 邮箱验证费用;Retry 发送、核验事件和状态事件始终带有 fee: 0。

跨会话匹配

matches[] 记录同一应用内先前已通过的邮箱验证中的相同地址 — 跨越 KYC、KYB 和独立 API 会话 — 以及在管理 API 列表中配置的命中黑名单项。与当前会话共享相同 vendor_data 的验证将被排除(同一终端用户不会与自身匹配),该数组最多包含 5 条记录,按时间从早到晚排序。当该地址存在于您的黑名单中但匹配的会话均未被列入黑名单时,数组最前面会预先添加一条 source: "list_entry" 的合成记录(所有会话字段均为 null)。

示例

已通过 - 正常的 OTP 且包含一条信息级别的违规

已拒绝 - 无法投递的地址

预填充的地址如果未能通过语法或 DNS(MX)验证 — 或者其 OTP 邮件无法投递 — 将立即最终判定为 Declined。由于验证码从未送达用户,因此不会出现验证码核验事件。

已拒绝 - 黑名单中的一次性邮箱

用户完成了 OTP,但该地址命中了您的邮箱黑名单(自动拒绝)。同时也触发了一次性邮箱标记 — 此处为 information 级别,因为 disposable_email_action 保持为默认的 NO_ACTION。

相关内容

最后修改于 2026年11月7日