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リスクAPIは、位置情報、ISP、VPN/Tor、データセンター、脅威、申告国との不一致といったシグナルからIPアドレスのリスクをスコアリングします。
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も含まれます。
レスポンスの解釈
statusは、解決された国がclaimed_countryと一致しない場合、またはアドレスがVPN、Tor、データセンターのインフラに関連付けられている場合に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はサーバー間でのみ利用するエンドポイントです。デバイスフィンガープリントはそうではありません。バックエンドだけではブラウザやデバイスのシグナルを観測できないためです。ホスト型フローおよびSDKのセッションでは、Diditは収集済みのデバイスフィールドをセッションのレスポンスで提供します。これにはdevice_fingerprint、デバイスとブラウザの詳細、user_agent、未加工のデバイスデータ、セッション間の一致が含まれます。
サンドボックスでの動作
サンドボックスキーはリクエストを検証し、決定論的な承認済みデータを返します。外部のインテリジェンスサービスへの接続、クレジットの消費、セッションの作成、Networksへのデータ提供は行いません。請求
IP Risk APIの呼び出し1回あたりの料金は、定価で$0.02です。本番環境のリクエストは、照会が開始された時点で課金対象になります。承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンが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"
バックエンドで観測されたユーザーエージェント。リクエストのコンテキストとして保存されます。デバイスフィンガープリントは提供しません。
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