curl -X POST 'https://verification.didit.me/v3/events/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"event_id": "login-2026-10-17-000001",
"event_category": "auth",
"action_type": "login",
"occurred_at": "2026-10-17T09:15:02.481Z",
"subject": {"vendor_data": "user-42", "entity_type": "individual"},
"session": {"session_id": "web-session-abc", "sequence": 142},
"device_context": {
"fingerprint": "fp-a8c1",
"network_context": {"ip_address": "203.0.113.42"}
},
"payload": {"method": "password"}
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.monitoring_events.create(
event_id="login-2026-10-17-000001",
event_category="auth",
action_type="login",
occurred_at="2026-10-17T09:15:02.481Z",
time_zone="Europe/Madrid",
subject={
"vendor_data": "user-42",
"entity_type": "individual",
},
session={
"session_id": "web-session-abc",
"sequence": 142,
},
device_context={
"fingerprint": "fp-a8c1",
"network_context": {
"ip_address": "203.0.113.42",
},
},
payload={"method": "password"},
custom_values={"vip_tier": "gold"},
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.monitoringEvents.create({
event_id: "login-2026-10-17-000001",
event_category: "auth",
action_type: "login",
occurred_at: "2026-10-17T09:15:02.481Z",
time_zone: "Europe/Madrid",
subject: {
vendor_data: "user-42",
entity_type: "individual",
},
session: {
session_id: "web-session-abc",
sequence: 142,
},
device_context: {
fingerprint: "fp-a8c1",
network_context: {
ip_address: "203.0.113.42",
},
},
payload: { method: "password" },
custom_values: { vip_tier: "gold" },
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.MonitoringEvents.Create(ctx, didit.MonitoringEventCreateRequest{
EventID: "login-2026-10-17-000001",
EventCategory: "auth",
ActionType: "login",
OccurredAt: time.Date(2026, 10, 17, 9, 15, 2, 0, time.UTC),
TimeZone: didit.String("Europe/Madrid"),
Subject: didit.MonitoringEventCreateRequestSubject{
VendorData: "user-42",
EntityType: didit.String("individual"),
},
Session: didit.Some(didit.MonitoringEventCreateRequestSession{
SessionID: didit.String("web-session-abc"),
Sequence: didit.Int(142),
}),
DeviceContext: didit.Some(didit.MonitoringEventCreateRequestDeviceContext{
Fingerprint: didit.String("fp-a8c1"),
NetworkContext: didit.Some(didit.MonitoringEventCreateRequestDeviceContextNetworkContext{
IPAddress: didit.String("203.0.113.42"),
}),
}),
Payload: didit.Some(map[string]any{"method": "password"}),
CustomValues: didit.Some(map[string]any{"vip_tier": "gold"}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.time.OffsetDateTime;
import java.util.Map;
import me.didit.Didit;
import me.didit.types.MonitoringEventCreateRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.monitoringEvents().create(MonitoringEventCreateRequest.builder()
.eventId("login-2026-10-17-000001")
.eventCategory(MonitoringEventCreateRequest.EventCategory.of("auth"))
.actionType("login")
.occurredAt(OffsetDateTime.parse("2026-10-17T09:15:02.481Z"))
.timeZone("Europe/Madrid")
.subject(MonitoringEventCreateRequest.Subject.builder()
.vendorData("user-42")
.entityType("individual")
.build())
.session(MonitoringEventCreateRequest.Session.builder()
.sessionId("web-session-abc")
.sequence(142L)
.build())
.deviceContext(MonitoringEventCreateRequest.DeviceContext.builder()
.fingerprint("fp-a8c1")
.networkContext(MonitoringEventCreateRequest.DeviceContext.NetworkContext.builder()
.ipAddress("203.0.113.42")
.build())
.build())
.payload(Map.of("method", "password"))
.customValues(Map.of("vip_tier", MonitoringEventCreateRequest.CustomValuesValue.ofString("gold")))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->monitoringEvents->create([
'event_id' => 'login-2026-10-17-000001',
'event_category' => 'auth',
'action_type' => 'login',
'occurred_at' => '2026-10-17T09:15:02.481Z',
'time_zone' => 'Europe/Madrid',
'subject' => [
'vendor_data' => 'user-42',
'entity_type' => 'individual',
],
'session' => [
'session_id' => 'web-session-abc',
'sequence' => 142,
],
'device_context' => [
'fingerprint' => 'fp-a8c1',
'network_context' => [
'ip_address' => '203.0.113.42',
],
],
'payload' => ['method' => 'password'],
'custom_values' => ['vip_tier' => 'gold'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.monitoring_events.create(
event_id: "login-2026-10-17-000001",
event_category: "auth",
action_type: "login",
occurred_at: "2026-10-17T09:15:02.481Z",
time_zone: "Europe/Madrid",
subject: {
vendor_data: "user-42",
entity_type: "individual",
},
session: {
session_id: "web-session-abc",
sequence: 142,
},
device_context: {
fingerprint: "fp-a8c1",
network_context: {
ip_address: "203.0.113.42",
},
},
payload: { method: "password" },
custom_values: { vip_tier: "gold" }
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.MonitoringEvents.CreateAsync(new MonitoringEventCreateRequest
{
EventId = "login-2026-10-17-000001",
EventCategory = "auth",
ActionType = "login",
OccurredAt = DateTimeOffset.Parse("2026-10-17T09:15:02.481Z"),
TimeZone = "Europe/Madrid",
Subject = new()
{
VendorData = "user-42",
EntityType = "individual",
},
Session = new MonitoringEventCreateRequestSession
{
SessionId = "web-session-abc",
Sequence = 142,
},
DeviceContext = new MonitoringEventCreateRequestDeviceContext
{
Fingerprint = "fp-a8c1",
NetworkContext = new MonitoringEventCreateRequestDeviceContextNetworkContext
{
IpAddress = "203.0.113.42",
},
},
Payload = new Dictionary<string, object> { ["method"] = "password" },
CustomValues = new Dictionary<string, object> { ["vip_tier"] = "gold" },
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"event_uuid": "33333333-4444-5555-6666-777777777777",
"event_id": "login-2026-10-17-000001",
"status": "ACCEPTED",
"score": 0,
"rules_evaluated_count": 6,
"rules_matched_count": 0,
"correlation_pending": false,
"retention_class": "standard",
"expires_at": "2026-11-16T09:15:02.481000Z",
"idempotent_replay": true,
"rule_matches": []
}モニタリングイベント作成API
Didit Management APIで、ログイン、ゲームプレイ、ボーナス、決済、紛争、セキュリティのイベントをバックエンドから1件ずつ送信します。イベントは保存・エンリッチされ、イベントルールでスコアリングされます。
curl -X POST 'https://verification.didit.me/v3/events/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"event_id": "login-2026-10-17-000001",
"event_category": "auth",
"action_type": "login",
"occurred_at": "2026-10-17T09:15:02.481Z",
"subject": {"vendor_data": "user-42", "entity_type": "individual"},
"session": {"session_id": "web-session-abc", "sequence": 142},
"device_context": {
"fingerprint": "fp-a8c1",
"network_context": {"ip_address": "203.0.113.42"}
},
"payload": {"method": "password"}
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.monitoring_events.create(
event_id="login-2026-10-17-000001",
event_category="auth",
action_type="login",
occurred_at="2026-10-17T09:15:02.481Z",
time_zone="Europe/Madrid",
subject={
"vendor_data": "user-42",
"entity_type": "individual",
},
session={
"session_id": "web-session-abc",
"sequence": 142,
},
device_context={
"fingerprint": "fp-a8c1",
"network_context": {
"ip_address": "203.0.113.42",
},
},
payload={"method": "password"},
custom_values={"vip_tier": "gold"},
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.monitoringEvents.create({
event_id: "login-2026-10-17-000001",
event_category: "auth",
action_type: "login",
occurred_at: "2026-10-17T09:15:02.481Z",
time_zone: "Europe/Madrid",
subject: {
vendor_data: "user-42",
entity_type: "individual",
},
session: {
session_id: "web-session-abc",
sequence: 142,
},
device_context: {
fingerprint: "fp-a8c1",
network_context: {
ip_address: "203.0.113.42",
},
},
payload: { method: "password" },
custom_values: { vip_tier: "gold" },
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.MonitoringEvents.Create(ctx, didit.MonitoringEventCreateRequest{
EventID: "login-2026-10-17-000001",
EventCategory: "auth",
ActionType: "login",
OccurredAt: time.Date(2026, 10, 17, 9, 15, 2, 0, time.UTC),
TimeZone: didit.String("Europe/Madrid"),
Subject: didit.MonitoringEventCreateRequestSubject{
VendorData: "user-42",
EntityType: didit.String("individual"),
},
Session: didit.Some(didit.MonitoringEventCreateRequestSession{
SessionID: didit.String("web-session-abc"),
Sequence: didit.Int(142),
}),
DeviceContext: didit.Some(didit.MonitoringEventCreateRequestDeviceContext{
Fingerprint: didit.String("fp-a8c1"),
NetworkContext: didit.Some(didit.MonitoringEventCreateRequestDeviceContextNetworkContext{
IPAddress: didit.String("203.0.113.42"),
}),
}),
Payload: didit.Some(map[string]any{"method": "password"}),
CustomValues: didit.Some(map[string]any{"vip_tier": "gold"}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.time.OffsetDateTime;
import java.util.Map;
import me.didit.Didit;
import me.didit.types.MonitoringEventCreateRequest;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.monitoringEvents().create(MonitoringEventCreateRequest.builder()
.eventId("login-2026-10-17-000001")
.eventCategory(MonitoringEventCreateRequest.EventCategory.of("auth"))
.actionType("login")
.occurredAt(OffsetDateTime.parse("2026-10-17T09:15:02.481Z"))
.timeZone("Europe/Madrid")
.subject(MonitoringEventCreateRequest.Subject.builder()
.vendorData("user-42")
.entityType("individual")
.build())
.session(MonitoringEventCreateRequest.Session.builder()
.sessionId("web-session-abc")
.sequence(142L)
.build())
.deviceContext(MonitoringEventCreateRequest.DeviceContext.builder()
.fingerprint("fp-a8c1")
.networkContext(MonitoringEventCreateRequest.DeviceContext.NetworkContext.builder()
.ipAddress("203.0.113.42")
.build())
.build())
.payload(Map.of("method", "password"))
.customValues(Map.of("vip_tier", MonitoringEventCreateRequest.CustomValuesValue.ofString("gold")))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->monitoringEvents->create([
'event_id' => 'login-2026-10-17-000001',
'event_category' => 'auth',
'action_type' => 'login',
'occurred_at' => '2026-10-17T09:15:02.481Z',
'time_zone' => 'Europe/Madrid',
'subject' => [
'vendor_data' => 'user-42',
'entity_type' => 'individual',
],
'session' => [
'session_id' => 'web-session-abc',
'sequence' => 142,
],
'device_context' => [
'fingerprint' => 'fp-a8c1',
'network_context' => [
'ip_address' => '203.0.113.42',
],
],
'payload' => ['method' => 'password'],
'custom_values' => ['vip_tier' => 'gold'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.monitoring_events.create(
event_id: "login-2026-10-17-000001",
event_category: "auth",
action_type: "login",
occurred_at: "2026-10-17T09:15:02.481Z",
time_zone: "Europe/Madrid",
subject: {
vendor_data: "user-42",
entity_type: "individual",
},
session: {
session_id: "web-session-abc",
sequence: 142,
},
device_context: {
fingerprint: "fp-a8c1",
network_context: {
ip_address: "203.0.113.42",
},
},
payload: { method: "password" },
custom_values: { vip_tier: "gold" }
)
puts result.to_husing System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.MonitoringEvents.CreateAsync(new MonitoringEventCreateRequest
{
EventId = "login-2026-10-17-000001",
EventCategory = "auth",
ActionType = "login",
OccurredAt = DateTimeOffset.Parse("2026-10-17T09:15:02.481Z"),
TimeZone = "Europe/Madrid",
Subject = new()
{
VendorData = "user-42",
EntityType = "individual",
},
Session = new MonitoringEventCreateRequestSession
{
SessionId = "web-session-abc",
Sequence = 142,
},
DeviceContext = new MonitoringEventCreateRequestDeviceContext
{
Fingerprint = "fp-a8c1",
NetworkContext = new MonitoringEventCreateRequestDeviceContextNetworkContext
{
IpAddress = "203.0.113.42",
},
},
Payload = new Dictionary<string, object> { ["method"] = "password" },
CustomValues = new Dictionary<string, object> { ["vip_tier"] = "gold" },
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"event_uuid": "33333333-4444-5555-6666-777777777777",
"event_id": "login-2026-10-17-000001",
"status": "ACCEPTED",
"score": 0,
"rules_evaluated_count": 6,
"rules_matched_count": 0,
"correlation_pending": false,
"retention_class": "standard",
"expires_at": "2026-11-16T09:15:02.481000Z",
"idempotent_replay": true,
"rule_matches": []
}403と"code": "event_monitoring_disabled"を返します。承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
ボディ
イベントエンベロープで、すべてのカテゴリで共通です。camelCaseのエイリアスも使用できます: eventId、eventCategory(またはcategory)、actionType、occurredAt、timeZone(またはzoneId)、deviceContext(またはdevice)、transactionContext、customValues(またはprops)。subject内ではvendorData、entityType、fullName、session内ではsessionId、pageUrl、transaction_context内ではpaymentReferenceIdです。
イベントに対するお客様の識別子で、アプリケーションごとに一意です。これが冪等性キーです。同じ識別子で同じevent_category、action_type、occurred_at、subject.vendor_data、payloadを再送するとリプレイとなり、いずれかが異なると競合となります。
128"login-2026-10-17-000001"
イベントカテゴリー。
auth, session, gameplay, bonus, affiliate, payment, dispute, security, responsible_gambling, custom "auth"
お客様側でイベントが発生した日時(ISO 8601。オフセットのない値はUTCとして扱われます)。過去7日以内かつ未来5分以内である必要があります。
"2026-10-17T09:15:02.481Z"
イベントが属するユーザーまたは企業。アプリケーション内でこのvendor_dataを持つユーザー(または企業)に紐付けられ、存在しない場合は新規作成されます。
Show child attributes
Show child attributes
お客様側での発生時のタイムゾーン(例:Europe/Madrid)。イベントとともに保存されますが、読み取り系のエンドポイントでは返されません。
64イベントが属する企業(対象と異なる場合)。vendor_dataのみが読み取られます。
Show child attributes
Show child attributes
イベントのセッションコンテキストです。
Show child attributes
Show child attributes
デバイスとネットワークのコンテキスト。送信されたとおりに保存され、GET /v3/events/{event_uuid}/で返されます。このサーバー経路ではDiditはエンドユーザーの接続を把握できないため、エンリッチされてルールで使用されるIPは、送信されたnetwork_context.ip_addressそのものです。
Show child attributes
Show child attributes
金額に関するコンテキスト。ここに空でない値を指定すると、アクションの必須ペイロードキーも満たされます。
Show child attributes
Show child attributes
カテゴリのドメインフィールド。JSONエンコード後で最大16384バイトです。一部のアクションには必須のキーがあります(payloadまたはtransaction_context内)。gameplay.p2p_settlementにはgame_id、counterparty_vendor_data、stake_amount、net_result_amount、roleと、hand_id、round_id、match_idのいずれか1つが必要です。gameplay.bet_placedとgameplay.bet_settledにはgame_idが必要です。payment.deposit_initiated、payment.deposit_completed、payment.withdrawal_requested、payment.withdrawal_completedにはpayment_reference_id、amount、currency、payment_method、statusが必要です。payment.withdrawal_address_changedにはwithdrawal_address_hashが必要です。dispute.chargeback_opened、dispute.chargeback_won、dispute.chargeback_lostにはpayment_reference_idと、dispute_id、chargeback_idのいずれか1つが必要です。session.bot_signal_observedにはtelemetry_schema_versionと、bot_score、actions_per_minute、timing_variance_ms、pointer_entropy、keystroke_entropy、reaction_time_ms_p50のいずれか1つが必要です。responsible_gambling.self_exclusion_matchにはregistry_source、exclusion_status、identity_match_refが必要です。_changedで終わるすべてのsecurityアクションにはchanged_fieldが必要で、フィールドがpassword、mfa_method、mfa、email、phone、withdrawal_address、payout_method、api_keyのいずれかの場合は、さらにprevious_reference_hashまたはnew_reference_hashが必要です。送信するのはハッシュと参照のみとし、カード番号、完全な出金先アドレス、パスワードハッシュ、MFAシークレットは決して送信しないでください。
独自のキーを最大100個まで設定でき、ルールからcustom_values.<key>として参照できます。値はスカラー(文字列、数値、ブール値またはnull)である必要があり、ネストしたオブジェクトや配列は拒否されます。
Show child attributes
Show child attributes
レスポンス
冪等なリプレイ: このevent_idと同じ内容のイベントはすでに保存されています。再度の保存や評価は行われていません。本文は保存済みのイベントを表します。
1件のイベントを取り込んだ結果。新規イベントと冪等なリプレイのどちらでも同じ形式が返されます。
保存されたイベントのDidit識別子です。
お客様のevent_idです。
リアルタイムルールの実行後のステータス。MonitoringEvent.statusを参照してください。
ACCEPTED, APPROVED, IN_REVIEW, DECLINED リアルタイムルール実行後のスコア。
リクエストで評価されたイベントルールの数。ルールが実行されないサンドボックスのアプリケーションでは0です。
x >= 0一致したルールの数です。TESTモードのルールも含みます。
x >= 0非同期ルールの実行がまだ残っている場合はtrueです。数分後にGET /v3/events/{event_uuid}/を参照し、最終的なstatusとscoreを確認してください。
保持クラス(一致したルールによって昇格された場合は昇格後の値)。
low_value, standard, risk_relevant, monetary_or_compliance イベントが保持クラスに基づいて期限切れとなり、削除される日時。monetary_or_compliance(支払いおよび異議申し立て)イベントの場合はnull。
このevent_idで同じ内容のイベントがすでに保存されていた場合はtrueです。値は保存済みイベントのものであり、ルールは再実行されていません。
イベントに一致したルール。
Show child attributes
Show child attributes