curl -X POST https://verification.didit.me/v3/phone/risk/ \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"phone_number": "+14155552671",
"country_code": "US",
"vendor_data": "lead-123",
"metadata": {"source": "signup_prescreen"}
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.phone.assess_risk(
phone_number="+14155552671",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.phone.assessRisk({
phone_number: "+14155552671",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Phone.AssessRisk(ctx, didit.PhoneRiskRequest{
PhoneNumber: "+14155552671",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.PhoneRiskRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.phone().assessRisk(PhoneRiskRequest.builder()
.phoneNumber("+14155552671")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->phone->assessRisk([
'phone_number' => '+14155552671',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.phone.assess_risk(phone_number: "+14155552671")
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Phone.AssessRiskAsync(new PhoneRiskRequest
{
PhoneNumber = "+14155552671",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "4fd09d2e-9bc9-4c4e-9c46-7f625ac0ab62",
"status": "Approved",
"phone": {
"status": "Approved",
"phone_number_prefix": "+1",
"phone_number": "4155552671",
"full_number": "+14155552671",
"country_code": "US",
"country_name": "United States",
"carrier": {
"name": "Example Mobile",
"type": "mobile"
},
"is_disposable": false,
"is_virtual": false,
"verification_method": null,
"verification_attempts": 0,
"verified_at": null,
"warnings": [],
"lifecycle": [],
"matches": [],
"phone_intelligence": {
"score": 3,
"phone_type_risk": "Low",
"phone_trust_index": 97,
"network_stability_index": 95,
"is_disposable": false,
"is_ported": false,
"is_recently_ported": false,
"carrier_type": "mobile",
"reason_codes": []
},
"enrichment": {
"score": 3,
"phone_type_risk": "Low",
"phone_trust_index": 97,
"network_stability_index": 95,
"is_disposable": false,
"is_ported": false,
"is_recently_ported": false,
"carrier_type": "mobile",
"reason_codes": []
}
},
"vendor_data": "lead-123",
"metadata": {
"source": "signup_prescreen"
},
"created_at": "2026-09-01T10:30:00.123456+00:00"
}电话风险 API:运营商与欺诈信号
无需发送一次性验证码,即可对电话号码进行风险评分。一次服务器到服务器调用即可获取运营商、号码类型、携号转网、一次性号码和欺诈信号。由 Didit 提供。
curl -X POST https://verification.didit.me/v3/phone/risk/ \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"phone_number": "+14155552671",
"country_code": "US",
"vendor_data": "lead-123",
"metadata": {"source": "signup_prescreen"}
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.phone.assess_risk(
phone_number="+14155552671",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.phone.assessRisk({
phone_number: "+14155552671",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Phone.AssessRisk(ctx, didit.PhoneRiskRequest{
PhoneNumber: "+14155552671",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.PhoneRiskRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.phone().assessRisk(PhoneRiskRequest.builder()
.phoneNumber("+14155552671")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->phone->assessRisk([
'phone_number' => '+14155552671',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.phone.assess_risk(phone_number: "+14155552671")
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Phone.AssessRiskAsync(new PhoneRiskRequest
{
PhoneNumber = "+14155552671",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "4fd09d2e-9bc9-4c4e-9c46-7f625ac0ab62",
"status": "Approved",
"phone": {
"status": "Approved",
"phone_number_prefix": "+1",
"phone_number": "4155552671",
"full_number": "+14155552671",
"country_code": "US",
"country_name": "United States",
"carrier": {
"name": "Example Mobile",
"type": "mobile"
},
"is_disposable": false,
"is_virtual": false,
"verification_method": null,
"verification_attempts": 0,
"verified_at": null,
"warnings": [],
"lifecycle": [],
"matches": [],
"phone_intelligence": {
"score": 3,
"phone_type_risk": "Low",
"phone_trust_index": 97,
"network_stability_index": 95,
"is_disposable": false,
"is_ported": false,
"is_recently_ported": false,
"carrier_type": "mobile",
"reason_codes": []
},
"enrichment": {
"score": 3,
"phone_type_risk": "Low",
"phone_trust_index": 97,
"network_stability_index": 95,
"is_disposable": false,
"is_ported": false,
"is_recently_ported": false,
"carrier_type": "mobile",
"reason_codes": []
}
},
"vendor_data": "lead-123",
"metadata": {
"source": "signup_prescreen"
},
"created_at": "2026-09-01T10:30:00.123456+00:00"
}POST /v3/phone/risk/,在 OTP 流程之前、代替 OTP 流程或在 OTP 流程之外获取电话情报。
它不会向用户发送验证码。它会创建一个 API 会话,对号码进行信息补充,应用你的电话风险规则,并在一次同步响应中返回与电话验证相同的标准化电话信息块。
保存请求后,Didit 还可以将已评分的电话号码作为汇总证据用于网络。网络图谱可能会在共享电话信号上显示高风险电话情报、携号转网和线路类型信息,但不会向其他机构披露原始电话号码。
解读响应
status是此 API 会话的最终决策。通常为Approved;风险评估可能得出In Review或Declined。phone.full_number是标准化的 E.164 号码。phone.phone_number_prefix和phone.phone_number将其拆分为国际区号和国内号码。phone.is_disposable和phone.is_virtual是供应用逻辑使用的稳定是/否信号。运营商查询会额外返回carrier.name和carrier.type(mobile、voip等)。phone.phone_intelligence.score采用 0-100 的风险刻度,数值越高表示风险越高。phone_type_risk(Low、Medium、High)和phone_trust_index(分数的反向值)是派生视图。phone.phone_intelligence和phone.enrichment是指向同一标准化对象的兼容别名。新集成可以读取phone.enrichment。phone.matches列出你的应用中,同一号码曾被其他用户用于其他会话的记录。可用于重复账户检测。request_id是 API 会话 ID。如果需要将结果与后续 Webhook 或控制台活动关联,请将其与vendor_data一起存储。
phone.phone_intelligence 和 phone.enrichment 是尽力返回的字段。即使查询已完成,如果该号码、国家/地区或套餐没有可用的情报数据,两者都可能缺失。请先基于稳定的标准化字段构建规则,并将缺失的情报视为“未知”,而不是“安全”。社交足迹附加功能
将enable_social 设为 true,即可在响应的 phone 下添加 phone_social 块:该电话号码注册过的在线平台,按类别分组,并附带汇总计数以及数据合作伙伴返回的任何资料详情。
phone.phone_social.profiles_registered和phone.phone_social.profiles_checked是核心数字:已确认注册该电话号码的平台数,以及参与评估的平台总数。phone.phone_social.registered_platforms和phone.phone_social.not_registered_platforms列出每个平台及其category和scope(global表示全球平台,local表示特定地区平台)。phone.phone_social.categories提供每个类别的已注册数量和比例。当平台提供资料时,phone.phone_social.profiles会附带每个平台的资料详情(名称、头像 URL、简介文本、隐私状态、是否为企业账户)。- 汇总指数(
digital_footprint_diversity、digital_sophistication_index、engagement_depth_index、subscription_affordability_index)是 0-10 的综合评分。如果检查未返回某项数据,任何计数都可能为null。
profiles_registered: 0 是有效结果,而不是失败:平台已被检查,并且在所有平台上都未找到该电话号码。这通常是合成身份信号。此端点本身不会据此采取行动。如需将其转换为审核或拒绝判定,请在工作流中使用 phone_no_social_presence_action。
未设置 enable_social 时,不会返回该块;社交检查无法完成时也不会返回,此时该次检查不计费。
沙盒行为
沙盒密钥会验证请求,并返回确定性的已通过数据。它们不会发送 OTP、消耗额度、创建会话或向网络贡献数据。设置enable_social 后,沙盒还会返回确定性的 phone_social 块。
计费
电话风险 API 调用的标准价格为 $0.04,低于完整电话验证的价格,因为不发送 OTP。正式环境中的请求在查询开始后即产生费用,即使部分尽力返回的字段不可用也是如此。 社交足迹附加功能单独计费:每个请求在电话风险 API 价格之外,还会在检查完成时计一个phone_social 单位。查询前的额度检查同时覆盖两项费用。授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求体
待评分的电话号码。它将被验证并规范化为 E.164 格式。
20"+14155552671"
用于情报覆盖范围的可选 ISO 3166-1 alpha-2 或 alpha-3 国家/地区提示。
3"US"
您的应用所观测到的可选设备和网络上下文。所有字段均为可选。传入这些字段有助于为 Networks 中的跨会话匹配检测提供数据。
Show child attributes
Show child attributes
您为此请求提供的稳定引用。存储在 API 会话中并在响应中返回。
您的非敏感 JSON 元数据。存储在 API 会话中并在响应中原样返回。
为 true 时,还会查找该号码的社交足迹,即其注册所在的消息、社交、电子商务和职业平台。除此 endpoint 本身的价格外,每次请求按一个 phone_social 计费。
true
响应
风险评估已完成。检查 status 获取决策;对于已完成的查询,HTTP 状态码始终为 200。
为此请求创建的 API 会话 ID。如果您需要将结果与后续的 Webhook 或控制台活动关联,请将其与 vendor_data 一同存储。
此 API 会话的最终决策。通常为 Approved;风险评估可能会产生 In Review 或 Declined。
Approved, In Review, Declined 此响应的时间戳。
您发送的 vendor_data 回显,若未发送则为 null。
您发送的 metadata 回显,若未发送则为 null。
归一化的电话报告,与电话验证响应所使用的区块相同。
Show child attributes
Show child attributes