Python
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.fraud_checks.plan(
client_reference="review-attempt-001",
subject={
"identifiers": [{
"type": "email",
"value": "applicant@example.com",
}],
"attributes": {
"first_name": "Alex",
"last_name": "Example",
},
},
checks={
"include": ["networks_same_org", "networks_cross_org", "email_risk"],
},
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.fraudChecks.plan({
client_reference: "review-attempt-001",
subject: {
identifiers: [{
type: "email",
value: "applicant@example.com",
}],
attributes: {
first_name: "Alex",
last_name: "Example",
},
},
checks: {
include: ["networks_same_org", "networks_cross_org", "email_risk"],
},
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.FraudChecks.Plan(ctx, didit.FraudCheckRequestRequest{
ClientReference: didit.String("review-attempt-001"),
Subject: didit.FraudCheckSubjectRequest{
Identifiers: []didit.FraudCheckIdentifierRequest{{
Type: didit.FraudTypeEnum("email"),
Value: "applicant@example.com",
}},
Attributes: didit.Some(didit.FraudCheckAttributesRequest{
FirstName: didit.String("Alex"),
LastName: didit.String("Example"),
}),
},
Checks: didit.Some(didit.FraudCheckModuleSelectionRequest{
Include: didit.Some([]didit.FraudExcludeEnum{didit.FraudExcludeEnum("networks_same_org"), didit.FraudExcludeEnum("networks_cross_org"), didit.FraudExcludeEnum("email_risk")}),
}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import me.didit.Didit;
import me.didit.types.FraudCheckAttributesRequest;
import me.didit.types.FraudCheckIdentifierRequest;
import me.didit.types.FraudCheckModuleSelectionRequest;
import me.didit.types.FraudCheckRequestRequest;
import me.didit.types.FraudCheckSubjectRequest;
import me.didit.types.FraudExcludeEnum;
import me.didit.types.FraudTypeEnum;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.fraudChecks().plan(FraudCheckRequestRequest.builder()
.clientReference("review-attempt-001")
.subject(FraudCheckSubjectRequest.builder()
.identifiers(List.of(FraudCheckIdentifierRequest.builder()
.type(FraudTypeEnum.of("email"))
.value("applicant@example.com")
.build()))
.attributes(FraudCheckAttributesRequest.builder()
.firstName("Alex")
.lastName("Example")
.build())
.build())
.checks(FraudCheckModuleSelectionRequest.builder()
.include(List.of(FraudExcludeEnum.of("networks_same_org"), FraudExcludeEnum.of("networks_cross_org"), FraudExcludeEnum.of("email_risk")))
.build())
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->fraudChecks->plan([
'client_reference' => 'review-attempt-001',
'subject' => [
'identifiers' => [[
'type' => 'email',
'value' => 'applicant@example.com',
]],
'attributes' => [
'first_name' => 'Alex',
'last_name' => 'Example',
],
],
'checks' => [
'include' => ['networks_same_org', 'networks_cross_org', 'email_risk'],
],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.fraud_checks.plan(
client_reference: "review-attempt-001",
subject: {
identifiers: [{
type: "email",
value: "applicant@example.com",
}],
attributes: {
first_name: "Alex",
last_name: "Example",
},
},
checks: {
include: ["networks_same_org", "networks_cross_org", "email_risk"],
}
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.FraudChecks.PlanAsync(new FraudCheckRequestRequest
{
ClientReference = "review-attempt-001",
Subject = new()
{
Identifiers = new FraudCheckIdentifierRequest[]
{
new()
{
Type = "email",
Value = "applicant@example.com",
},
},
Attributes = new FraudCheckAttributesRequest
{
FirstName = "Alex",
LastName = "Example",
},
},
Checks = new FraudCheckModuleSelectionRequest
{
Include = new FraudExcludeEnum[] { "networks_same_org", "networks_cross_org", "email_risk" },
},
});
Console.WriteLine(JsonSerializer.Serialize(result));curl --request POST \
--url https://verification.didit.me/v3/fraud/checks/plan/ \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'x-api-key: <api-key>' \
--data 'subject={
"identifiers": [
{
"value": "<string>",
"country": "<string>",
"issuer": "<string>"
}
],
"selfie": "<string>",
"attributes": {
"first_name": "<string>",
"last_name": "<string>",
"full_name": "<string>",
"date_of_birth": "2023-12-25",
"nationality": "<string>",
"gender": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>"
}
}' \
--data 'client_reference=<string>' \
--data profile=standard \
--data 'profile_version=<string>' \
--data 'context={
"ip_address": "<string>",
"user_agent": "<string>",
"country": "<string>",
"purpose": "<string>",
"consent_obtained": true
}' \
--data 'checks={
"include": [],
"exclude": []
}' \
--data 'vendor_data=<string>' \
--data 'metadata=<unknown>'{
"profile_id": "<string>",
"profile_version": "<string>",
"modules": [
{
"module": "normalization",
"available": true,
"availability_reason": "<string>",
"will_run": true,
"selection_reason": "<string>",
"estimated_price": "<string>"
}
],
"estimated_price": "<string>",
"currency": "<string>",
"is_sandbox": true,
"can_afford": true
}{
"detail": "Bad Request - Invalid request data"
}合规与风险
欺诈检查费用预估与输入校验
在运行请求之前,您可以使用 Didit 校验输入内容,并预估所选 Fraud Check(欺诈检查)服务的相关费用,提前了解计费情况。
POST
/
v3
/
fraud
/
checks
/
plan
/
Python
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.fraud_checks.plan(
client_reference="review-attempt-001",
subject={
"identifiers": [{
"type": "email",
"value": "applicant@example.com",
}],
"attributes": {
"first_name": "Alex",
"last_name": "Example",
},
},
checks={
"include": ["networks_same_org", "networks_cross_org", "email_risk"],
},
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.fraudChecks.plan({
client_reference: "review-attempt-001",
subject: {
identifiers: [{
type: "email",
value: "applicant@example.com",
}],
attributes: {
first_name: "Alex",
last_name: "Example",
},
},
checks: {
include: ["networks_same_org", "networks_cross_org", "email_risk"],
},
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.FraudChecks.Plan(ctx, didit.FraudCheckRequestRequest{
ClientReference: didit.String("review-attempt-001"),
Subject: didit.FraudCheckSubjectRequest{
Identifiers: []didit.FraudCheckIdentifierRequest{{
Type: didit.FraudTypeEnum("email"),
Value: "applicant@example.com",
}},
Attributes: didit.Some(didit.FraudCheckAttributesRequest{
FirstName: didit.String("Alex"),
LastName: didit.String("Example"),
}),
},
Checks: didit.Some(didit.FraudCheckModuleSelectionRequest{
Include: didit.Some([]didit.FraudExcludeEnum{didit.FraudExcludeEnum("networks_same_org"), didit.FraudExcludeEnum("networks_cross_org"), didit.FraudExcludeEnum("email_risk")}),
}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import me.didit.Didit;
import me.didit.types.FraudCheckAttributesRequest;
import me.didit.types.FraudCheckIdentifierRequest;
import me.didit.types.FraudCheckModuleSelectionRequest;
import me.didit.types.FraudCheckRequestRequest;
import me.didit.types.FraudCheckSubjectRequest;
import me.didit.types.FraudExcludeEnum;
import me.didit.types.FraudTypeEnum;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.fraudChecks().plan(FraudCheckRequestRequest.builder()
.clientReference("review-attempt-001")
.subject(FraudCheckSubjectRequest.builder()
.identifiers(List.of(FraudCheckIdentifierRequest.builder()
.type(FraudTypeEnum.of("email"))
.value("applicant@example.com")
.build()))
.attributes(FraudCheckAttributesRequest.builder()
.firstName("Alex")
.lastName("Example")
.build())
.build())
.checks(FraudCheckModuleSelectionRequest.builder()
.include(List.of(FraudExcludeEnum.of("networks_same_org"), FraudExcludeEnum.of("networks_cross_org"), FraudExcludeEnum.of("email_risk")))
.build())
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->fraudChecks->plan([
'client_reference' => 'review-attempt-001',
'subject' => [
'identifiers' => [[
'type' => 'email',
'value' => 'applicant@example.com',
]],
'attributes' => [
'first_name' => 'Alex',
'last_name' => 'Example',
],
],
'checks' => [
'include' => ['networks_same_org', 'networks_cross_org', 'email_risk'],
],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.fraud_checks.plan(
client_reference: "review-attempt-001",
subject: {
identifiers: [{
type: "email",
value: "applicant@example.com",
}],
attributes: {
first_name: "Alex",
last_name: "Example",
},
},
checks: {
include: ["networks_same_org", "networks_cross_org", "email_risk"],
}
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.FraudChecks.PlanAsync(new FraudCheckRequestRequest
{
ClientReference = "review-attempt-001",
Subject = new()
{
Identifiers = new FraudCheckIdentifierRequest[]
{
new()
{
Type = "email",
Value = "applicant@example.com",
},
},
Attributes = new FraudCheckAttributesRequest
{
FirstName = "Alex",
LastName = "Example",
},
},
Checks = new FraudCheckModuleSelectionRequest
{
Include = new FraudExcludeEnum[] { "networks_same_org", "networks_cross_org", "email_risk" },
},
});
Console.WriteLine(JsonSerializer.Serialize(result));curl --request POST \
--url https://verification.didit.me/v3/fraud/checks/plan/ \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'x-api-key: <api-key>' \
--data 'subject={
"identifiers": [
{
"value": "<string>",
"country": "<string>",
"issuer": "<string>"
}
],
"selfie": "<string>",
"attributes": {
"first_name": "<string>",
"last_name": "<string>",
"full_name": "<string>",
"date_of_birth": "2023-12-25",
"nationality": "<string>",
"gender": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>"
}
}' \
--data 'client_reference=<string>' \
--data profile=standard \
--data 'profile_version=<string>' \
--data 'context={
"ip_address": "<string>",
"user_agent": "<string>",
"country": "<string>",
"purpose": "<string>",
"consent_obtained": true
}' \
--data 'checks={
"include": [],
"exclude": []
}' \
--data 'vendor_data=<string>' \
--data 'metadata=<unknown>'{
"profile_id": "<string>",
"profile_version": "<string>",
"modules": [
{
"module": "normalization",
"available": true,
"availability_reason": "<string>",
"will_run": true,
"selection_reason": "<string>",
"estimated_price": "<string>"
}
],
"estimated_price": "<string>",
"currency": "<string>",
"is_sandbox": true,
"can_afford": true
}{
"detail": "Bad Request - Invalid request data"
}请发送与您计划用于欺诈检查的请求体相同的内容。
规划操作不会创建检查或会话,不调用数据补充供应商,不读取网络历史记录,也不收取任何费用。
每个模块都将
available 与 will_run 区分开来。
availability_reason 说明所提供的输入是否支持该模块,selection_reason 则说明该模块为何被选中或未被选中。
请让不可用的开关保持可见,并显示其输入要求。
networks_cross_org 需要 Enterprise 套餐,且您组织的共享模式需设为 global。
若未满足这些条件,或您的组织未启用 Networks,规划结果会以 available: false 和 availability_reason: "entitlement_required" 报告该情况。
选择该模块的检查会以相同原因跳过它。
沙盒应用不受套餐或共享模式限制:只要提供受支持的标识符,该模块即可运行,并返回空的示例结果。
estimated_price 是以返回的 currency 为单位的十进制字符串。
价格为 null 表示不可用或未定价,而非免费。
顶层估算金额汇总所选的可运行模块;can_afford 还会检查适用的计费方式。
更改标识符、上下文或选择后,请重新规划。
执行时会重新检查资格和价格,因此规划结果既不是预留,也不保证外部数据源会作出响应。授权
ApiKeyAuthBearerAuth
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求体
application/x-www-form-urlencodedapplication/jsonmultipart/form-data
Show child attributes
Show child attributes
您为此项检查指定的自身参考编号。同时充当幂等性密钥:使用相同的请求体复用该编号将返回原始检查结果,而不会再次运行模块或计费;使用不同的请求体复用该编号将返回 409。
Required string length:
1 - 255编排配置文件 ID。默认为 Didit 的 standard 配置文件。
Required string length:
1 - 64固定冻结的档案版本。默认为档案的当前版本。
Required string length:
1 - 32Show child attributes
Show child attributes
Show child attributes
Show child attributes
Maximum string length:
1000最后修改于 2026年11月7日