curl -X GET 'https://verification.didit.me/v3/events/subjects/user-42/?entity_type=individual&limit=50' \
-H 'x-api-key: YOUR_API_KEY'import os
from urllib.parse import quote
import requests
vendor_data = 'user-42'
resp = requests.get(
f'https://verification.didit.me/v3/events/subjects/{quote(vendor_data, safe="")}/',
headers={'x-api-key': os.environ['DIDIT_API_KEY']},
params={'entity_type': 'individual', 'limit': 50},
timeout=10,
)
resp.raise_for_status()
for event in resp.json()['results']:
print(event['occurred_at'], event['event_category'], event['action_type'], event['status'])const vendorData = 'user-42';
const url = `https://verification.didit.me/v3/events/subjects/${encodeURIComponent(vendorData)}/?entity_type=individual&limit=50`;
const resp = await fetch(url, {
headers: { 'x-api-key': process.env.DIDIT_API_KEY },
});
if (!resp.ok) throw new Error(`Request failed: ${resp.status}`);
const page = await resp.json();
for (const event of page.results) console.log(event.occurred_at, event.event_category, event.action_type, event.status);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/events/subjects/{vendor_data}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/events/subjects/{vendor_data}/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://verification.didit.me/v3/events/subjects/{vendor_data}/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/events/subjects/{vendor_data}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"event_uuid": "11111111-2222-3333-4444-555555555555",
"event_id": "chargeback-2026-10-16-000318",
"event_category": "dispute",
"action_type": "chargeback_opened",
"occurred_at": "2026-10-16T14:02:11Z",
"received_at": "2026-10-16T14:02:12.418230Z",
"status": "IN_REVIEW",
"score": 60,
"subject_vendor_data": "user-42",
"subject_entity_type": "individual",
"subject_uuid": "66666666-7777-8888-9999-000000000000",
"counterparty_vendor_data": null,
"session_id": null,
"device_fingerprint": null,
"ip_address": null,
"ip_country": null,
"amount": "250.000000000000000000",
"currency": "EUR",
"game_id": null,
"round_id": null,
"bonus_id": null,
"affiliate_code": null,
"payment_reference_id": "dep_735",
"retention_class": "monetary_or_compliance",
"rules_matched_count": 1,
"correlation_pending": false,
"is_droppable": false
},
{
"event_uuid": "22222222-3333-4444-5555-666666666666",
"event_id": "login-2026-10-15-000912",
"event_category": "auth",
"action_type": "login",
"occurred_at": "2026-10-15T08:30:00.120000Z",
"received_at": "2026-10-15T08:30:00.734512Z",
"status": "ACCEPTED",
"score": 0,
"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": "standard",
"rules_matched_count": 0,
"correlation_pending": false,
"is_droppable": true
}
]
}Get Subject Event Timeline
List every monitoring event of one user or company, newest first, keeping individuals and companies that share a vendor_data apart.
curl -X GET 'https://verification.didit.me/v3/events/subjects/user-42/?entity_type=individual&limit=50' \
-H 'x-api-key: YOUR_API_KEY'import os
from urllib.parse import quote
import requests
vendor_data = 'user-42'
resp = requests.get(
f'https://verification.didit.me/v3/events/subjects/{quote(vendor_data, safe="")}/',
headers={'x-api-key': os.environ['DIDIT_API_KEY']},
params={'entity_type': 'individual', 'limit': 50},
timeout=10,
)
resp.raise_for_status()
for event in resp.json()['results']:
print(event['occurred_at'], event['event_category'], event['action_type'], event['status'])const vendorData = 'user-42';
const url = `https://verification.didit.me/v3/events/subjects/${encodeURIComponent(vendorData)}/?entity_type=individual&limit=50`;
const resp = await fetch(url, {
headers: { 'x-api-key': process.env.DIDIT_API_KEY },
});
if (!resp.ok) throw new Error(`Request failed: ${resp.status}`);
const page = await resp.json();
for (const event of page.results) console.log(event.occurred_at, event.event_category, event.action_type, event.status);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/events/subjects/{vendor_data}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/events/subjects/{vendor_data}/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://verification.didit.me/v3/events/subjects/{vendor_data}/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/events/subjects/{vendor_data}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"event_uuid": "11111111-2222-3333-4444-555555555555",
"event_id": "chargeback-2026-10-16-000318",
"event_category": "dispute",
"action_type": "chargeback_opened",
"occurred_at": "2026-10-16T14:02:11Z",
"received_at": "2026-10-16T14:02:12.418230Z",
"status": "IN_REVIEW",
"score": 60,
"subject_vendor_data": "user-42",
"subject_entity_type": "individual",
"subject_uuid": "66666666-7777-8888-9999-000000000000",
"counterparty_vendor_data": null,
"session_id": null,
"device_fingerprint": null,
"ip_address": null,
"ip_country": null,
"amount": "250.000000000000000000",
"currency": "EUR",
"game_id": null,
"round_id": null,
"bonus_id": null,
"affiliate_code": null,
"payment_reference_id": "dep_735",
"retention_class": "monetary_or_compliance",
"rules_matched_count": 1,
"correlation_pending": false,
"is_droppable": false
},
{
"event_uuid": "22222222-3333-4444-5555-666666666666",
"event_id": "login-2026-10-15-000912",
"event_category": "auth",
"action_type": "login",
"occurred_at": "2026-10-15T08:30:00.120000Z",
"received_at": "2026-10-15T08:30:00.734512Z",
"status": "ACCEPTED",
"score": 0,
"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": "standard",
"rules_matched_count": 0,
"correlation_pending": false,
"is_droppable": true
}
]
}Authorizations
Your application's API key, from Developers -> API keys in the Business Console. The primary key has full access. A named key can be scoped: none, read or write per resource, limited to some workflows or to approved sessions, to a list of IP addresses, and to an expiry date. 401 means the key is missing, wrong, revoked or expired; 403 means the key has no access to this resource or action, or the request came from an address outside its IP list; 404 on a session route means the session is outside the key's workflows or statuses. A key without media access receives image, video and PDF URLs as null, and a key without sessions write receives session links and tokens as null. See https://docs.didit.me/console/api-keys.
Path Parameters
Your id for the subject (subject.vendor_data of its events). URL-encode it; a value containing / cannot be addressed by this endpoint.
1 - 255Query Parameters
company returns the company with this vendor_data; any other value, or none, returns the individual. subject_entity_type is accepted as an alias when entity_type is absent.
individual, company Maximum number of events per page. Defaults to 50. Values above 1000000 return 400; a non-numeric, zero or negative value falls back to 50.
1 <= x <= 1000000Number of events to skip. Defaults to 0. Prefer following the next URL from the response.
0 <= x <= 1000000Only events in these categories. Repeat the parameter for several values (?event_category=payment&event_category=dispute); an event matching any of them is returned.
auth, session, gameplay, bonus, affiliate, payment, dispute, security, responsible_gambling, custom Only events with these action types (exact, case-sensitive). Repeat for several values.
Only events with these statuses. Repeat for several values.
ACCEPTED, APPROVED, IN_REVIEW, DECLINED Only events in these retention classes. Repeat for several values.
low_value, standard, risk_relevant, monetary_or_compliance Exact match on the business.vendor_data sent with the event.
Exact match on session.session_id.
Exact match on device_context.fingerprint.
Exact match on the event's IP address.
Exact match on the promoted game_id.
Exact match on the promoted round_id.
Exact match on the promoted affiliate_code.
Exact match on the payment reference (from transaction_context.payment_reference_id or payload.payment_reference_id).
Exact match on the promoted counterparty_vendor_data.
true (also 1 or yes, case-insensitive) returns only events at least one rule matched (rules_matched_count above 0). Any other value is ignored.
Only events with occurred_at at or after this instant (inclusive). Send an ISO 8601 value: 2026-10-01T00:00:00Z, an explicit offset with the + percent-encoded (2026-10-01T02:00:00%2B02:00; an unencoded + is decoded as a space and the value no longer parses), or a date alone (2026-10-01), which means 00:00:00 UTC of that day. A value without an offset is read as UTC. Values in any other format are not accepted.
Only events with occurred_at at or before this instant (inclusive). A date alone means the start of that day, so occurred_to=2026-10-15 excludes the rest of 15 October; send 2026-10-15T23:59:59Z to include it. Send an ISO 8601 value: 2026-10-01T00:00:00Z, an explicit offset with the + percent-encoded (2026-10-01T02:00:00%2B02:00; an unencoded + is decoded as a space and the value no longer parses), or a date alone (2026-10-01), which means 00:00:00 UTC of that day. A value without an offset is read as UTC. Values in any other format are not accepted.
Case-insensitive substring match on event_id, action_type, subject_vendor_data or counterparty_vendor_data.
Response
One page of the subject's events.
One page of monitoring events, newest occurred_at first.
Number of matching events, exact up to 100 and capped at 100 above that. Do not compute page counts from it; follow next until it is null.
URL of the next page, or null on the last page.
URL of the previous page, or null on the first page.
Show child attributes
Show child attributes