curl -X GET 'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/' \
-H 'x-api-key: YOUR_API_KEY'import os
import requests
uuid = 'abcdef12-3456-7890-abcd-ef1234567890'
resp = requests.get(
f'https://verification.didit.me/v3/transactions/{uuid}/',
headers={'x-api-key': os.environ['DIDIT_API_KEY']},
timeout=10,
)
resp.raise_for_status()
tx = resp.json()
for alert in tx['alerts']:
print(alert.get('code'), alert.get('severity'))const uuid = 'abcdef12-3456-7890-abcd-ef1234567890';
const resp = await fetch(`https://verification.didit.me/v3/transactions/${uuid}/`, {
headers: { 'x-api-key': process.env.DIDIT_API_KEY },
});
if (!resp.ok) throw new Error(`Lookup failed: ${resp.status}`);
const tx = await resp.json();
console.log(tx.status, tx.severity, tx.alerts.length, 'alerts');<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/transactions/{transaction_id}/",
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/transactions/{transaction_id}/"
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/transactions/{transaction_id}/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/transactions/{transaction_id}/")
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{
"uuid": "abcdef12-3456-4890-abcd-ef1234567890",
"transaction_number": 4123,
"txn_id": "your-txn-2026-05-17-001",
"txn_date": "2026-05-17T08:42:00Z",
"zone_id": "Europe/Madrid",
"transaction_type": "finance",
"action_type": "withdrawal",
"direction": "OUTBOUND",
"status": "IN_REVIEW",
"amount": "1500",
"currency": "EUR",
"currency_type": "fiat",
"amount_in_default_currency": "1620.45",
"default_currency_code": "USD",
"preferred_currency_amount": "1620.45",
"preferred_currency_code": "USD",
"payment_details": "Withdrawal to crypto wallet",
"payment_txn_id": null,
"score": 78,
"severity": "HIGH",
"decision_reason_code": "WALLET_HIGH_RISK",
"decision_reason_label": "Destination wallet flagged as high risk",
"vendor_data": "user-12345",
"metadata": {
"subject": {
"entity_type": "individual",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
"address": {},
"institution_details": {},
"device_context": {}
},
"counterparty": {}
},
"props": {
"order_id": "ord-9988"
},
"tags": [],
"parties": [
{
"uuid": "b1111111-2222-4333-8444-555555555555",
"role": "APPLICANT",
"entity_type": "individual",
"kind": "USER",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
"first_name": null,
"last_name": null,
"country_code": null,
"dob": null,
"address": {},
"institution_info": {},
"device": {},
"external_party_snapshot": null
}
],
"payment_methods": [],
"activities": [],
"alerts": [
{
"uuid": "a7b8c9d0-1234-4abc-9def-567890abcdef",
"title": "Destination wallet flagged as high risk",
"description": "Provider risk score exceeded the configured threshold.",
"severity": "HIGH",
"status": "OPEN",
"source": "RULE",
"metadata": {},
"created_at": "2026-05-17T08:42:12Z",
"due_at": null
}
],
"rule_runs": [],
"provider_results": [],
"travel_rule": null,
"network_snapshot": null,
"remediation": null,
"cost_breakdown": null
}{
"detail": "You do not have permission to perform this action."
}{
"detail": "Not found."
}{
"detail": "Request was throttled. Expected available in 30 seconds."
}Get Transaction
Retrieve the full monitoring record for one transaction: parties, score/severity, rule runs, alerts, Travel Rule outcome, remediation session.
curl -X GET 'https://verification.didit.me/v3/transactions/abcdef12-3456-7890-abcd-ef1234567890/' \
-H 'x-api-key: YOUR_API_KEY'import os
import requests
uuid = 'abcdef12-3456-7890-abcd-ef1234567890'
resp = requests.get(
f'https://verification.didit.me/v3/transactions/{uuid}/',
headers={'x-api-key': os.environ['DIDIT_API_KEY']},
timeout=10,
)
resp.raise_for_status()
tx = resp.json()
for alert in tx['alerts']:
print(alert.get('code'), alert.get('severity'))const uuid = 'abcdef12-3456-7890-abcd-ef1234567890';
const resp = await fetch(`https://verification.didit.me/v3/transactions/${uuid}/`, {
headers: { 'x-api-key': process.env.DIDIT_API_KEY },
});
if (!resp.ok) throw new Error(`Lookup failed: ${resp.status}`);
const tx = await resp.json();
console.log(tx.status, tx.severity, tx.alerts.length, 'alerts');<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/transactions/{transaction_id}/",
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/transactions/{transaction_id}/"
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/transactions/{transaction_id}/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/transactions/{transaction_id}/")
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{
"uuid": "abcdef12-3456-4890-abcd-ef1234567890",
"transaction_number": 4123,
"txn_id": "your-txn-2026-05-17-001",
"txn_date": "2026-05-17T08:42:00Z",
"zone_id": "Europe/Madrid",
"transaction_type": "finance",
"action_type": "withdrawal",
"direction": "OUTBOUND",
"status": "IN_REVIEW",
"amount": "1500",
"currency": "EUR",
"currency_type": "fiat",
"amount_in_default_currency": "1620.45",
"default_currency_code": "USD",
"preferred_currency_amount": "1620.45",
"preferred_currency_code": "USD",
"payment_details": "Withdrawal to crypto wallet",
"payment_txn_id": null,
"score": 78,
"severity": "HIGH",
"decision_reason_code": "WALLET_HIGH_RISK",
"decision_reason_label": "Destination wallet flagged as high risk",
"vendor_data": "user-12345",
"metadata": {
"subject": {
"entity_type": "individual",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
"address": {},
"institution_details": {},
"device_context": {}
},
"counterparty": {}
},
"props": {
"order_id": "ord-9988"
},
"tags": [],
"parties": [
{
"uuid": "b1111111-2222-4333-8444-555555555555",
"role": "APPLICANT",
"entity_type": "individual",
"kind": "USER",
"vendor_data": "user-12345",
"full_name": "Maria Garcia",
"first_name": null,
"last_name": null,
"country_code": null,
"dob": null,
"address": {},
"institution_info": {},
"device": {},
"external_party_snapshot": null
}
],
"payment_methods": [],
"activities": [],
"alerts": [
{
"uuid": "a7b8c9d0-1234-4abc-9def-567890abcdef",
"title": "Destination wallet flagged as high risk",
"description": "Provider risk score exceeded the configured threshold.",
"severity": "HIGH",
"status": "OPEN",
"source": "RULE",
"metadata": {},
"created_at": "2026-05-17T08:42:12Z",
"due_at": null
}
],
"rule_runs": [],
"provider_results": [],
"travel_rule": null,
"network_snapshot": null,
"remediation": null,
"cost_breakdown": null
}{
"detail": "You do not have permission to perform this action."
}{
"detail": "Not found."
}{
"detail": "Request was throttled. Expected available in 30 seconds."
}Authorizations
Path Parameters
Didit-stable transaction UUID (the uuid returned from create / list, not your txn_id).
Response
Full transaction detail.
Full monitoring record for one transaction, as returned by GET /v3/transactions/{transaction_id}/ and POST /v3/transactions/.
Didit-stable transaction identifier. Use as {transaction_id} for follow-up calls.
Application-scoped sequential transaction number shown in Console (e.g. 4123).
The transaction_id you supplied at create time (max 128 chars). Unique per application.
When the transaction occurred (from transaction_at; defaults to submission time).
IANA time zone identifier provided at create time.
Top-level category as stored: finance, kyc, travelRule, userPlatformEvent, gamblingBet, gamblingLimitChange, gamblingBonusChange, auditTrailEvent. Note multi-word values are echoed back in camelCase even when submitted in snake_case.
Sub-type within the category (e.g. deposit, withdrawal, transfer). Defaults to the category when not supplied.
Direction relative to the subject. Stored uppercase regardless of the casing submitted (in/out/inbound/outbound are accepted on input).
INBOUND, OUTBOUND Current monitoring verdict. Transactions are created APPROVED; rules may flip them to IN_REVIEW/DECLINED synchronously.
APPROVED, IN_REVIEW, DECLINED, AWAITING_USER Transaction amount as a decimal string with trailing zeros stripped (e.g. "1500", "0.5", "0.123456789012345678"). Up to 18 decimal places.
Currency code of amount (e.g. EUR, USD, BTC).
fiat or crypto, as submitted in currency_kind.
Pre-converted amount you supplied, as a decimal string with trailing zeros stripped.
amount converted to the application's preferred currency, when available.
Free-text payment reference or memo from the submission.
External payment system reference (e.g. blockchain transaction hash) from payment_reference_id.
Risk score accumulated by rules (typically 0–100). Higher = riskier.
Categorical risk severity set by rules/providers (UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL). null until something sets it.
UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL Machine-readable reason for the current status.
Human-readable label for decision_reason_code.
Convenience copy of the applicant's vendor_data.
Snapshot of the subject and counterparty payloads as submitted at create time.
The custom_properties you supplied at create time. Each key is addressable in rule conditions as custom_values.<key>.
Tags attached to the transaction (manually or by rules).
Show child attributes
Show child attributes
Transaction parties (applicant, counterparty).
Show child attributes
Show child attributes
Payment methods linked to the transaction.
Show child attributes
Show child attributes
Activity log entries (creation, notes, manual reviews, status changes).
Show child attributes
Show child attributes
Alerts raised by rules and providers.
Show child attributes
Show child attributes
Per-rule execution results — which rule fired, with what score impact.
Show child attributes
Show child attributes
Raw provider payloads (AML screening, blockchain analytics, etc.).
Show child attributes
Show child attributes
Travel Rule compliance check, present when travel_rule_details was submitted.
Show child attributes
Show child attributes
Graph snapshot of related transactions/parties used by the rules engine, present when submitted.
Show child attributes
Show child attributes
Remediation session offered to the user when re-verification is required. Superseded by action_required, which is the canonical block; kept for backward compatibility.
Show child attributes
Show child attributes
Pending end-user action required to complete this transaction, or null when there is none. The Didit SDKs auto-launch the action by default and refresh the transaction when it finishes. Two variants, discriminated by type: verification_session (a hosted verification session created by a rule action) and wallet_ownership (a wallet-ownership widget session auto-minted for a Travel Rule transfer that needs proof of wallet control, gated by the auto_wallet_verification Travel Rule setting). When both could apply, wallet_ownership takes precedence because it blocks the Travel Rule exchange.
- Verification session
- Wallet ownership
Show child attributes
Show child attributes
Per-feature credit cost breakdown for this transaction.