curl -X GET 'https://verification.didit.me/v3/events/11111111-2222-3333-4444-555555555555/' \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.monitoring_events.retrieve(
"11111111-2222-3333-4444-555555555555",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.monitoringEvents.retrieve("11111111-2222-3333-4444-555555555555");
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.MonitoringEvents.Retrieve(ctx, "11111111-2222-3333-4444-555555555555")
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.monitoringEvents().retrieve("11111111-2222-3333-4444-555555555555");
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->monitoringEvents->retrieve('11111111-2222-3333-4444-555555555555');
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.monitoring_events.retrieve("11111111-2222-3333-4444-555555555555")
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.MonitoringEvents.RetrieveAsync("11111111-2222-3333-4444-555555555555");
Console.WriteLine(JsonSerializer.Serialize(result));{
"event_uuid": "33333333-4444-5555-6666-777777777777",
"event_id": "login-2026-10-17-000001",
"event_category": "auth",
"action_type": "login",
"occurred_at": "2026-10-17T09:15:02.481000Z",
"received_at": "2026-10-17T09:15:02.903114Z",
"status": "IN_REVIEW",
"score": 40,
"subject_vendor_data": "user-42",
"subject_entity_type": "individual",
"subject_uuid": "66666666-7777-8888-9999-000000000000",
"counterparty_vendor_data": null,
"session_id": "web-session-abc",
"device_fingerprint": "fp-a8c1",
"ip_address": "203.0.113.42",
"ip_country": "ES",
"amount": null,
"currency": null,
"game_id": null,
"round_id": null,
"bonus_id": null,
"affiliate_code": null,
"payment_reference_id": null,
"retention_class": "risk_relevant",
"rules_matched_count": 1,
"correlation_pending": false,
"is_droppable": true,
"payload": {
"method": "password"
},
"custom_values": {
"vip_tier": "gold",
"vpn_or_proxy_detected": true
},
"device_context": {
"fingerprint": "fp-a8c1",
"network_context": {
"ip_address": "203.0.113.42",
"ip_country": "Spain",
"ip_country_code": "ES",
"ip_city": "Madrid",
"asn_number": 64500,
"asn_organization": "Example Networks",
"is_vpn_or_tor": true,
"is_data_center": false
}
},
"field_sources": {
"subject.vendor_data": "customer",
"event_category": "customer",
"action_type": "customer",
"occurred_at": "customer",
"received_at": "server",
"payload.method": "customer",
"session.session_id": "customer",
"session.sequence": "customer",
"device_context.fingerprint": "customer",
"device_context.network_context.ip_address": "customer",
"device_context.network_context.ip_country": "server",
"device_context.network_context.ip_country_code": "server",
"device_context.network_context.ip_city": "server",
"device_context.network_context.asn_number": "server",
"device_context.network_context.asn_organization": "server",
"device_context.network_context.is_vpn_or_tor": "server",
"device_context.network_context.is_data_center": "server"
},
"session_sequence": 142,
"table_id": null,
"hand_id": null,
"match_id": null,
"market_id": null,
"side": null,
"role": null,
"net_result_amount": null,
"payment_fingerprint": null,
"instrument_reference_hash": null,
"withdrawal_address_hash": null,
"dispute_id": null,
"chargeback_id": null,
"changed_field": null,
"identity_match_ref": null,
"schema_version": 1,
"expires_at": "2027-01-15T09:15:02.481000Z",
"rules_evaluated_count": 6,
"rule_runs": [
{
"rule_uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"rule_title": "Login from VPN or Tor",
"library_key": null,
"matched": true,
"mode": "ACTIVE",
"is_async": false,
"severity": "MEDIUM",
"score_delta": 40,
"action_summary": "score +40; add_tag:VPN_LOGIN",
"matched_payload": [
{
"field": "event.ip.is_vpn_or_tor",
"operator": "eq",
"expected_value": true,
"current_value": true,
"matched": true,
"group_index": null,
"group_logic": "AND",
"field_source": "server"
}
],
"created_at": "2026-10-17T09:15:02.951207Z"
}
],
"ip_enrichment": {
"ip_country_code": "ES",
"ip_city": "Madrid",
"asn_number": 64500,
"asn_organization": "Example Networks",
"is_vpn_or_tor": true,
"is_data_center": false,
"proxy_type": null,
"last_enriched_at": "2026-10-17T09:15:02.910442Z"
},
"subject_profile": null,
"tags": [
"VPN_LOGIN"
]
}获取监控事件 API
通过 Didit 获取单个监控事件的详情,包括 payload、设备上下文、IP 信息丰富结果、缓存的主体信号、标签和规则证据。
curl -X GET 'https://verification.didit.me/v3/events/11111111-2222-3333-4444-555555555555/' \
-H 'x-api-key: YOUR_API_KEY'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.monitoring_events.retrieve(
"11111111-2222-3333-4444-555555555555",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.monitoringEvents.retrieve("11111111-2222-3333-4444-555555555555");
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.MonitoringEvents.Retrieve(ctx, "11111111-2222-3333-4444-555555555555")
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.monitoringEvents().retrieve("11111111-2222-3333-4444-555555555555");
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->monitoringEvents->retrieve('11111111-2222-3333-4444-555555555555');
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.monitoring_events.retrieve("11111111-2222-3333-4444-555555555555")
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.MonitoringEvents.RetrieveAsync("11111111-2222-3333-4444-555555555555");
Console.WriteLine(JsonSerializer.Serialize(result));{
"event_uuid": "33333333-4444-5555-6666-777777777777",
"event_id": "login-2026-10-17-000001",
"event_category": "auth",
"action_type": "login",
"occurred_at": "2026-10-17T09:15:02.481000Z",
"received_at": "2026-10-17T09:15:02.903114Z",
"status": "IN_REVIEW",
"score": 40,
"subject_vendor_data": "user-42",
"subject_entity_type": "individual",
"subject_uuid": "66666666-7777-8888-9999-000000000000",
"counterparty_vendor_data": null,
"session_id": "web-session-abc",
"device_fingerprint": "fp-a8c1",
"ip_address": "203.0.113.42",
"ip_country": "ES",
"amount": null,
"currency": null,
"game_id": null,
"round_id": null,
"bonus_id": null,
"affiliate_code": null,
"payment_reference_id": null,
"retention_class": "risk_relevant",
"rules_matched_count": 1,
"correlation_pending": false,
"is_droppable": true,
"payload": {
"method": "password"
},
"custom_values": {
"vip_tier": "gold",
"vpn_or_proxy_detected": true
},
"device_context": {
"fingerprint": "fp-a8c1",
"network_context": {
"ip_address": "203.0.113.42",
"ip_country": "Spain",
"ip_country_code": "ES",
"ip_city": "Madrid",
"asn_number": 64500,
"asn_organization": "Example Networks",
"is_vpn_or_tor": true,
"is_data_center": false
}
},
"field_sources": {
"subject.vendor_data": "customer",
"event_category": "customer",
"action_type": "customer",
"occurred_at": "customer",
"received_at": "server",
"payload.method": "customer",
"session.session_id": "customer",
"session.sequence": "customer",
"device_context.fingerprint": "customer",
"device_context.network_context.ip_address": "customer",
"device_context.network_context.ip_country": "server",
"device_context.network_context.ip_country_code": "server",
"device_context.network_context.ip_city": "server",
"device_context.network_context.asn_number": "server",
"device_context.network_context.asn_organization": "server",
"device_context.network_context.is_vpn_or_tor": "server",
"device_context.network_context.is_data_center": "server"
},
"session_sequence": 142,
"table_id": null,
"hand_id": null,
"match_id": null,
"market_id": null,
"side": null,
"role": null,
"net_result_amount": null,
"payment_fingerprint": null,
"instrument_reference_hash": null,
"withdrawal_address_hash": null,
"dispute_id": null,
"chargeback_id": null,
"changed_field": null,
"identity_match_ref": null,
"schema_version": 1,
"expires_at": "2027-01-15T09:15:02.481000Z",
"rules_evaluated_count": 6,
"rule_runs": [
{
"rule_uuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"rule_title": "Login from VPN or Tor",
"library_key": null,
"matched": true,
"mode": "ACTIVE",
"is_async": false,
"severity": "MEDIUM",
"score_delta": 40,
"action_summary": "score +40; add_tag:VPN_LOGIN",
"matched_payload": [
{
"field": "event.ip.is_vpn_or_tor",
"operator": "eq",
"expected_value": true,
"current_value": true,
"matched": true,
"group_index": null,
"group_logic": "AND",
"field_source": "server"
}
],
"created_at": "2026-10-17T09:15:02.951207Z"
}
],
"ip_enrichment": {
"ip_country_code": "ES",
"ip_city": "Madrid",
"asn_number": 64500,
"asn_organization": "Example Networks",
"is_vpn_or_tor": true,
"is_data_center": false,
"proxy_type": null,
"last_enriched_at": "2026-10-17T09:15:02.910442Z"
},
"subject_profile": null,
"tags": [
"VPN_LOGIN"
]
}授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
路径参数
事件的 Didit 标识符(创建、批量、列表或时间线响应中的 event_uuid),而非您自己的 event_id。
响应
包含佐证材料的事件。
包含完整封装、增强信息和规则证据的单条监控事件。包含 MonitoringEvent 的所有字段以及下列字段。
事件的 Didit 标识符。在获取和删除调用中将其用作 {event_uuid}。
您自己的标识符,即您发送的幂等性密钥。
128事件类别。
auth, session, gameplay, bonus, affiliate, payment, dispute, security, responsible_gambling, custom 该类别中发生的情况,与您发送的内容一致。
128事件在您方发生的时间。
Didit 接受该事件的时间。
ACCEPTED:已存储,没有匹配的规则改变其状态(大多数事件的常规响应,在不运行任何规则的沙盒应用中始终为此响应)。APPROVED:规则命中且评分低于您的审核阈值。IN_REVIEW:规则使评分超过审核阈值或直接设置了该状态。DECLINED:规则将其拒绝或评分超过了您的拒绝阈值。
ACCEPTED, APPROVED, IN_REVIEW, DECLINED 累积规则分数。从 0 开始;规则的 add_score 操作会改变该分数(允许负增量)。
事件的 subject.vendor_data:您为该用户或公司设置的 id。
255individual 或 company:subject_vendor_data 所指的主体类型。
"individual"
事件解析关联到的用户(个人)或企业的 UUID,如果该记录已不存在则为 null。
P2P 事件的另一方参与者(从 payload.counterparty_vendor_data 提升)。
255随事件发送的 session.session_id。
255随事件一同发送的 device_context.fingerprint。
255事件的 IP 地址。在服务器通道上,这是您发送的 device_context.network_context.ip_address;在设备通道上,它是请求的 IP。
64通过 IP 信息增强获取的 ip_address 国家/地区代码;如果地址未进行信息增强(缺失、私有或地址尚不可知的低价值遥测数据),则为 null。
"ES"
保留 18 位小数的十进制字符串形式的金额,按优先级依次取自 transaction_context.amount、payload.amount 或 payload.stake_amount。
"250.000000000000000000"
来自 transaction_context.currency 或 payload.currency 的货币。
10从 payload.game_id 提取。
128从 payload.round_id 提取。
128由 payload.bonus_id 提升而来。
128由 payload.affiliate_code 提升而来。
128来自 transaction_context.payment_reference_id 或 payload.payment_reference_id 的付款参考编号。
255数据保留类别。支付和争议事件为 monetary_or_compliance;安全与理性博彩事件为 risk_relevant;session.page_view、session.sdk_heartbeat、session.sdk_loaded、session.device_seen、session.bot_signal_observed、bonus.promotion_viewed 和 affiliate.referral_clicked 为 low_value;其他所有事件为 standard。命中生效规则的事件将被提升为 risk_relevant(绝不降级)。
low_value, standard, risk_relevant, monetary_or_compliance 与该事件匹配的规则数量,包括处于 TEST 模式的规则(该模式仅记录证据但不执行任何操作)。
x >= 0当此事件仍需运行异步规则(跨主体关联,或时长超过 24 小时的序列)时为 true。它会在数分钟内处理完成,并就地更新 status、score 和 rules_matched_count。
处于背压状态下的 SDK 是否可以丢弃此类事件。对于所有 security、payment、dispute 和 responsible_gambling 事件,以及 gameplay.bet_placed、gameplay.bet_settled 和 gameplay.p2p_settlement 事件,此项均为 false。
您在 payload 中发送的类别字段。
您发送的标量 custom_values。当 IP 丰富化功能标记该地址且您未设置这些值时,Didit 会添加 vpn_or_proxy_detected: true 或 is_data_center: true。
存储的设备上下文:您的 device_context(在发送时包含 fingerprint、persistent_device_id 和 bot_score),对于您留空的键,会通过 IP 丰富化补充 network_context(ip_country、ip_country_code、ip_city、asn_number、asn_organization、is_vpn_or_tor、is_data_center、proxy_type、connection_type)。
溯源字段路径:customer(由您的后端发送)、sdk(通过设备通道发送)或 server(由 Didit 派生,例如 received_at 和富化网络字段)。在根据匹配结果采取操作前请检查该字段。
Show child attributes
Show child attributes
随事件发送的 session.sequence。
从 payload.table_id 提取。
128从 payload.hand_id 提取。
128从 payload.match_id 提取。
128从 payload.market_id 提取。
128从 payload.side 提取。
64从 payload.role 提取。
64从 payload.net_result_amount 提取,为保留 18 位小数的十进制字符串。
"-120.000000000000000000"
从 payload.payment_fingerprint 提取。
255从 payload.instrument_reference_hash 提取。
255从 payload.withdrawal_address_hash(或 payload.destination_reference_hash)提取。
255从 payload.dispute_id 提取。
255从 payload.chargeback_id 提取。
255从 payload.changed_field 提取(安全变更事件)。
128从 payload.identity_match_ref 提取(负责任博彩登记库匹配)。
255事件信封模式的版本。当前为 1。
1
事件根据其保留类别到期并被删除的时间:occurred_at 加上类别周期(默认 14、30 或 90 天,可按应用调整)。对于遵循交易保留规则的 monetary_or_compliance 事件为 Null。
针对此事件评估的事件规则数量。
x >= 0与该事件匹配的每条规则,最新的排在最前。
Show child attributes
Show child attributes
主体的已缓存邮箱和电话风险信号,当主体不存在画像时为 null。
Show child attributes
Show child attributes
附加到事件的标签名称(规则 add_tags 操作)。