from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.fraud_checks.create(
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.create({
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.Create(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().create(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->create([
'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.create(
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.CreateAsync(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/ \
--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>'{
"check_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"client_reference": "<string>",
"processing_status": "pending",
"profile_id": "<string>",
"profile_version": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"inputs": [
{
"reference": "<string>",
"type": "email",
"namespace": {},
"quality": "<string>",
"normalization": {},
"availability": "available"
}
],
"modules": [
{
"module": "normalization",
"status": "planned",
"reason": "<string>",
"latency_ms": 123,
"freshness": "<string>",
"billable_units": 123
}
],
"attribute_evidence": [
{}
],
"compound_evidence": [
{}
],
"risk": [
{
"dimension": "identity",
"score": 123,
"band": "low",
"availability": "available",
"requested_but_unavailable": true,
"reason_codes": [
"<string>"
],
"evidence_indexes": [
123
]
}
],
"network": {},
"recommendation": "approve",
"next_action": "none",
"decision_reasons": [
"<string>"
],
"coverage": {},
"usage": [
{}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"enrichment": {},
"identity_relationship": {
"result": "match",
"reference_type": "<string>",
"country": "<string>",
"availability": "available",
"reason_codes": [
"<string>"
]
},
"vendor_data": "<string>",
"metadata": null
}不正チェックAPI(Fraud Check API)
Diditの不正チェックAPIを使うと、本人確認、連絡先リスク、データエンリッチメント、ネットワークのチェックから必要なものを選び、1回のリクエストで計画・実行できます。
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.fraud_checks.create(
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.create({
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.Create(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().create(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->create([
'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.create(
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.CreateAsync(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/ \
--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>'{
"check_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"client_reference": "<string>",
"processing_status": "pending",
"profile_id": "<string>",
"profile_version": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"inputs": [
{
"reference": "<string>",
"type": "email",
"namespace": {},
"quality": "<string>",
"normalization": {},
"availability": "available"
}
],
"modules": [
{
"module": "normalization",
"status": "planned",
"reason": "<string>",
"latency_ms": 123,
"freshness": "<string>",
"billable_units": 123
}
],
"attribute_evidence": [
{}
],
"compound_evidence": [
{}
],
"risk": [
{
"dimension": "identity",
"score": 123,
"band": "low",
"availability": "available",
"requested_but_unavailable": true,
"reason_codes": [
"<string>"
],
"evidence_indexes": [
123
]
}
],
"network": {},
"recommendation": "approve",
"next_action": "none",
"decision_reasons": [
"<string>"
],
"coverage": {},
"usage": [
{}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"enrichment": {},
"identity_relationship": {
"result": "match",
"reference_type": "<string>",
"country": "<string>",
"availability": "available",
"reason_codes": [
"<string>"
]
},
"vendor_data": "<string>",
"metadata": null
}プロファイルを選択する
profile_versionを固定して、選択されるデフォルト設定と判定ポリシーを明示します。
デフォルトのプロファイルはstandard、バージョン2026-08-27です。
バージョン2026-09-14では、オプションのメールアドレスと電話番号のソーシャルエンリッチメントが追加され、完了したすべてのチェックがネイティブのユーザー認証セッションとして記録されます。
このバージョンでは、有料アドオンはオプトインです。
バージョン2026-09-14.1では、さらにグローバルに共有しているEnterpriseプランの組織に対して、グローバル不正ネットワークでの識別子照会が有効になります。
バージョン2026-09-14.2では、ブラジル向けにセルフィーとCPFを照合するオプションのリファレンスチェックが追加されます。
それ以前のバージョンは元の動作を維持します。
現在のプロファイルは、メールアドレスのリスク、電話番号のリスク、IPアドレスのリスク、対象となるデータベース検証、およびアプリケーションのプライベートネットワーク履歴に対応しています。
セルフィーによる本人紐付けには、バージョン2026-09-14.2が必要です。
それ以前のバージョンで選択すると、not_available_in_profile_versionが返されます。
申告された本人情報とコンテキスト
メールアドレス、電話番号、政府発行の識別子はsubject.identifiersに指定します。
政府発行の識別子には発行国が必要です。番号が地域内でのみ一意である場合は、発行機関も必要になることがあります。
氏名、生年月日、国籍、住所はsubject.attributesに指定します。
これらは、選択したソースが対応している場合に照合される申告情報であり、送信されたからといって検証済みの事実になるわけではありません。
試行時のIPアドレス、ユーザーエージェント、目的、国、および必要な同意の表明にはcontextを使用します。
これにより、検証の試行に関する情報と人物に関する情報が分離されます。
対応する生体チェックでは、subject.selfieをbase64エンコードされたJPEG、PNG、またはWebPで、最大6MBまで指定します。
同じ形式の画像データURIも受け付けます。
参照画像、リモートURL、ストレージキーは送信しないでください。
セルフィーと申告された識別子
biometric_identityを選択し、ブラジルのtax_number識別子とセルフィーを送信して、context.consent_obtainedを確認します。
リファレンス照会では、そのセルフィーが申告されたCPFの保有者のものかどうかを確認します。
同意がない場合はconsent_requiredが、対応していない国の場合はunsupported_regionが返されます。
このモジュールには、組織のデータベース検証の料金に基づくチェック1件あたりの料金がかかります。実行前にプランを確認してください。
リファレンスが応答すると、identity_relationship.resultはmatch、mismatch、inconclusiveのいずれかになります。
判定不能の応答はレビューが必要であり、不一致として扱われることはありません。
この結果が示すのは、セルフィーとCPFの関係のみです。
送信された氏名や生年月日の検証、ライブネスの証明、インターネットやグローバル不正ネットワーク全体での顔の検索は行いません。
選択した別のソースがこれらのフィールドの根拠を提供しない限り、氏名と生年月日は申告情報のままです。
タイムアウトとソースのエラーは利用不可の結果となり、課金されません。
完了した判定不能の結果にも、同じリファレンス照会料金が適用されます。
このチェックでは、セルフィーは結果に含まれず、セッションメディアとして保存されることもありません。
チェックを選択する
checks.includeでモジュールを選択し、checks.excludeが優先されます。
includeに明示的に空のリストを指定すると、オプションの処理はすべて無効になります。正規化は引き続き実行されます。
includeを省略すると、固定されたプロファイルのデフォルトが使用されます。
メールアドレスと電話番号のソーシャルエンリッチメントは、email_socialとphone_socialで個別に選択します。
これらには対応する有効な識別子が必要で、OTPは送信されません。
{
"profile_version": "2026-09-14.1",
"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"] }
}
結果を混同せずに読み取る
各モジュールは、実行ステータス、理由、課金対象の単位数を報告します。not_requested、excluded_by_caller、missing_required_input、source_unavailableは、それぞれ異なる結果を表します。
ソースがないことは、本人の不一致でもリスクゼロの結果でもありません。
attribute_evidenceはフィールド単位の根拠を示し、riskは本人、連絡先、デバイス、行動、不正ネットワークの各観点を分けて保持します。
メールアドレス、デバイス、その他の識別子が共有されていることは観測された関連であり、2つのアカウントが同一人物のものである証拠や、不正を行った証拠ではありません。
recommendationはチェックによる推奨であり、他のレコードのステータスは変更しません。
ソーシャルエンリッチメントの結果はenrichmentに表示され、利用不可の結果は完了した結果と区別されます。
グローバル不正ネットワーク
networks_cross_orgを選択すると、対応するメールアドレス、電話番号、および適切な名前空間が設定された書類識別子を共有ネットワークに照会します。
この照会には、Enterpriseプランと、組織の共有モードがglobalに設定されていることが必要です。
これらの条件を満たしていない場合、チェックの計画ではこのモジュールがavailable: falseおよびavailability_reason: "entitlement_required"として報告され、このモジュールを選択したチェックではステータスskipped、理由entitlement_requiredとしてスキップされます。
組織でNetworksが有効になっていない場合も、同じ理由が適用されます。
サンドボックスのアプリケーションには、プランや共有モードによる制限はありません。対応する識別子があれば、モジュールが実行され、空のサンプル結果が返されます。
この照会は組織の既存の読み取り枠を使用し、その読み取りの監査記録を残します。
照会ごとの課金はありません。
チェックを計画するだけでは、共有インデックスへの照会も、その読み取り枠の消費も行われません。
チェックが完了すると、network.cross_organizationにはsignals_checkedと、開示された集計値であるinsightsが含まれます。
各insightには、シグナルの種類、結果の分類、提供元の数、直近度の区分が含まれ、業種カテゴリは開示が有効な場合にのみ含まれます。
他の組織、アカウント、個人、または認証が特定されることは決してありません。
開示しきい値を下回る結果は省略されます。空のリストは、不正履歴が存在しないことを証明するものではありません。
開示された共有シグナルはレビューの推奨をトリガーしますが、自動的な却下や本人の一致判定になることは決してありません。
利用できなかった照会は、完了して結果が空だった照会とは区別して、その理由を報告します。
後に組織が組織横断アクセスを失った場合、たとえばプラン変更後や共有モードがglobalでなくなった場合には、結果の取得、再試行、セッション詳細において、共有集計値とそこから導出されたリスクの根拠が非表示になります。
元の推奨は過去の判定としてそのまま残り、読み取りによって認証ステータスが変わることはありません。
セッション・再試行・課金
check_idを使うと、Fraud Checkの取得で保存済みの結果を取得できます。
request_idが存在する場合、そのチェックに対応するネイティブの認証セッションを示します。
バージョン2026-09-14、2026-09-14.1、2026-09-14.2では、プライベートネットワーク履歴のみを選択した場合も含め、常にそのセッションが作成されます。
そのチェックが存在する間は、同じリクエスト本文でclient_referenceを再利用すると、再実行も課金もなく元の結果が返されます。
同じ参照で異なる本文を送信すると、409が返されます。
実行がまだ進行中の場合は、レスポンスのRetry-Afterで指定された時間が経過してから、同じリクエストを再試行してください。
関連する認証を削除すると、Fraud Checkの結果も削除され、以降の取得では404が返されます。
実行中に削除されたチェックが、完了した結果を公開することはできません。
料金は、組織の現在の前払い料金または契約料金に基づきます。
利用できないモジュールとスキップされたモジュールは請求されず、プライベートネットワーク履歴にはチェックごとの課金はありません。
サンドボックスのチェックではサンプルレスポンスが使用され、有料のサプライヤーAPI呼び出しや課金は発生しません。承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
ボディ
Show child attributes
Show child attributes
このチェックに対するお客様独自の参照値です。冪等性キーを兼ねます。同じボディで再利用すると、モジュールを再実行・再請求することなく元のチェックが返されます。異なるボディで再利用すると409が返されます。
1 - 255オーケストレーションプロファイルIDです。デフォルトはDiditのstandardプロファイルです。
1 - 64固定されたプロファイルバージョンを指定します。デフォルトはプロファイルの現在のバージョンです。
1 - 32Show child attributes
Show child attributes
Show child attributes
Show child attributes
1000レスポンス
pending- 保留中running- 実行中completed- 完了failed- 失敗
pending, running, completed, failed Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
approve- 承認review- レビューreject- 却下
approve, review, reject none- なしmanual_review- 手動レビューstep_up- ステップアップresubmit_capture- 撮影の再提出
none, manual_review, step_up, resubmit_capture Show child attributes
Show child attributes
Show child attributes
Show child attributes
このチェックのために作成されたネイティブの検証セッション。
Show child attributes
Show child attributes
Show child attributes
Show child attributes