curl -X POST https://verification.didit.me/v3/ip/risk/ \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"ip_address": "8.8.8.8",
"claimed_country": "ESP",
"user_agent": "Mozilla/5.0",
"vendor_data": "lead-123"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.ip.assess_risk(
ip_address="8.8.8.8",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.ip.assessRisk({
ip_address: "8.8.8.8",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.IP.AssessRisk(ctx, didit.IPRiskRequest{
IPAddress: "8.8.8.8",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.IPRiskRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.ip().assessRisk(IPRiskRequest.builder()
.ipAddress("8.8.8.8")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->ip->assessRisk([
'ip_address' => '8.8.8.8',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.ip.assess_risk(ip_address: "8.8.8.8")
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Ip.AssessRiskAsync(new IPRiskRequest
{
IpAddress = "8.8.8.8",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "9a96ed2a-721e-4b86-8cbf-d61eda529279",
"status": "Approved",
"ip": {
"status": "Approved",
"ip_address": "192.0.2.10",
"ip_country": "Spain",
"ip_country_code": "ES",
"ip_state": "Madrid",
"ip_city": "Madrid",
"latitude": 40.4168,
"longitude": -3.7038,
"isp": "Example Telecom",
"organization": "Example Telecom SA",
"is_vpn_or_tor": false,
"is_data_center": false,
"time_zone": "Europe/Madrid",
"time_zone_offset": "+0200",
"asn_number": 3352,
"asn_organization": "EXAMPLE-TELECOM",
"connection_type": "broadband",
"carrier": "Example Telecom",
"proxy_type": null,
"claimed_country": "ESP",
"country_mismatch": false,
"threat": {}
},
"vendor_data": "lead-123",
"metadata": null,
"created_at": "2026-09-01T10:30:00.123456+00:00"
}IP 风险 API:地理位置、VPN 与数据中心信号
使用 Didit 对 IP 地址进行风险评分,涵盖地理位置、ISP、VPN/Tor、数据中心、威胁及声称国家/地区不一致等信号。
curl -X POST https://verification.didit.me/v3/ip/risk/ \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"ip_address": "8.8.8.8",
"claimed_country": "ESP",
"user_agent": "Mozilla/5.0",
"vendor_data": "lead-123"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.ip.assess_risk(
ip_address="8.8.8.8",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.ip.assessRisk({
ip_address: "8.8.8.8",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.IP.AssessRisk(ctx, didit.IPRiskRequest{
IPAddress: "8.8.8.8",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.IPRiskRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.ip().assessRisk(IPRiskRequest.builder()
.ipAddress("8.8.8.8")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->ip->assessRisk([
'ip_address' => '8.8.8.8',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.ip.assess_risk(ip_address: "8.8.8.8")
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Ip.AssessRiskAsync(new IPRiskRequest
{
IpAddress = "8.8.8.8",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "9a96ed2a-721e-4b86-8cbf-d61eda529279",
"status": "Approved",
"ip": {
"status": "Approved",
"ip_address": "192.0.2.10",
"ip_country": "Spain",
"ip_country_code": "ES",
"ip_state": "Madrid",
"ip_city": "Madrid",
"latitude": 40.4168,
"longitude": -3.7038,
"isp": "Example Telecom",
"organization": "Example Telecom SA",
"is_vpn_or_tor": false,
"is_data_center": false,
"time_zone": "Europe/Madrid",
"time_zone_offset": "+0200",
"asn_number": 3352,
"asn_organization": "EXAMPLE-TELECOM",
"connection_type": "broadband",
"carrier": "Example Telecom",
"proxy_type": null,
"claimed_country": "ESP",
"country_mismatch": false,
"threat": {}
},
"vendor_data": "lead-123",
"metadata": null,
"created_at": "2026-09-01T10:30:00.123456+00:00"
}POST /v3/ip/risk/,当您的后端已经拿到 IP 地址并需要进行服务器到服务器的风险判定时使用。
响应包括地理位置、网络归属、VPN/Tor 与数据中心标记、威胁数据,以及在您提交声明国家时返回的 country_mismatch。
解读响应
- 当解析出的国家与
claimed_country冲突,或该地址与 VPN、Tor 或数据中心基础设施相关联时,status为In Review。否则为Approved。 ip.ip_country_code包含解析出的国家代码。请通过ip.country_mismatch比较国家,而不是自行比较原始国家字符串。ip.latitude和ip.longitude是近似的网络地理位置,而非精确的设备位置。ip.is_vpn_or_tor、ip.is_data_center、ip.proxy_type和ip.threat承载网络风险证据。ip.asn_number、ip.asn_organization、ip.connection_type和ip.carrier描述该地址所属的网络。request_id是 API 会话 ID。如果您需要将结果与后续 Webhook 或控制台活动关联,请将其与vendor_data一起存储。
ip.ip_address: null、ip.country_mismatch: null,且 ip.threat 为空对象。单个富化字段在不可用时也可能为 null。设备情报
IP Risk API 是纯服务器到服务器的 endpoint。设备指纹识别不属于此类,因为后端本身无法观察浏览器或设备信号。对于托管流程和 SDK 会话,Didit 会在会话响应中提供已收集的设备字段,包括device_fingerprint、设备和浏览器详情、user_agent、原始设备数据以及跨会话匹配结果。
沙盒行为
沙盒密钥会校验请求,并确定性地返回已通过的数据。它们不会调用外部情报服务、不消耗额度、不创建会话,也不会向 Networks 提供数据。计费
IP Risk API 调用的标准价格为每次 $0.02。一旦查询开始,每次生产环境请求即计费。授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求体
要评分的 IPv4 或 IPv6 地址。
"8.8.8.8"
用户或会话声明的可选 ISO 3166-1 alpha-2 或 alpha-3 国家/地区。用于计算 country_mismatch。
3"ESP"
后端检测到的 User-Agent。作为请求上下文存储;不提供设备指纹功能。
512您为此请求提供的稳定引用。存储在 API 会话中并在响应中返回。
您的非敏感 JSON 元数据。存储在 API 会话中并在响应中原样返回。
响应
风险评估已完成。检查 status 获取决策;对于已完成的查询,HTTP 状态码始终为 200。
为此请求创建的 API 会话 ID。如果您需要将结果与后续的 Webhook 或控制台活动关联,请将其与 vendor_data 一同存储。
此 API 会话的决策:存在网络或国家/地区不匹配风险时为 In Review,否则为 Approved。
Approved, In Review 此响应的时间戳。
您发送的 vendor_data 回显,若未发送则为 null。
您发送的 metadata 回显,若未发送则为 null。
IP 风险结果。如果查询未返回可用数据,各个丰富信息字段可为 null。
Show child attributes
Show child attributes