curl -X GET 'https://verification.didit.me/v3/users/user-abc-123/' \
-H 'x-api-key: YOUR_API_KEY'import requests
resp = requests.get(
'https://verification.didit.me/v3/users/user-abc-123/',
headers={'x-api-key': 'YOUR_API_KEY'},
)
resp.raise_for_status()
user = resp.json()
print(user['didit_internal_id'], user['status'], user['session_count'])const vendorData = encodeURIComponent('user-abc-123');
const user = await fetch(
`https://verification.didit.me/v3/users/${vendorData}/`,
{ headers: { 'x-api-key': process.env.DIDIT_API_KEY } },
).then((r) => r.json());
console.log(user.didit_internal_id, user.status);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/users/{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/users/{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/users/{vendor_data}/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/users/{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{
"didit_internal_id": "f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418",
"vendor_data": "user-abc-123",
"display_name": null,
"full_name": "John Michael Doe",
"date_of_birth": "1990-05-15",
"effective_name": "John Michael Doe",
"status": "ACTIVE",
"metadata": {
"tier": "premium",
"source": "website"
},
"portrait_image_url": "https://<media-host>/...",
"session_count": 3,
"approved_count": 2,
"declined_count": 0,
"in_review_count": 1,
"issuing_states": [
"USA"
],
"approved_emails": [
"john@example.com"
],
"approved_phones": [
"+14155551234"
],
"features": {
"ID_VERIFICATION": "Approved",
"LIVENESS": "Approved",
"FACE_MATCH": "Approved",
"AML": "Approved"
},
"features_list": [
{
"feature": "ID_VERIFICATION",
"status": "Approved"
},
{
"feature": "LIVENESS",
"status": "Approved"
},
{
"feature": "FACE_MATCH",
"status": "Approved"
},
{
"feature": "AML",
"status": "Approved"
}
],
"last_session_at": "2025-06-15T10:30:00Z",
"last_activity_at": "2025-06-15T10:30:00Z",
"first_session_at": "2025-06-01T08:00:00Z",
"tags": [
{
"uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"tag": {
"uuid": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
"name": "VIP",
"color": "#2567FF",
"description": null,
"source": "custom",
"created_at": "2025-05-01T09:00:00Z",
"updated_at": "2025-05-01T09:00:00Z"
},
"added_by_email": "analyst@acme.com",
"added_by_name": "Jane Analyst",
"created_at": "2025-06-02T11:00:00Z"
}
],
"comments": [
{
"uuid": "c1111111-2222-4333-8444-555555555555",
"comment_type": "STATUS_CHANGED",
"comment": null,
"actor_email": "analyst@acme.com",
"actor_name": "Jane Analyst",
"previous_status": "FLAGGED",
"new_status": "ACTIVE",
"previous_value": null,
"new_value": null,
"changed_fields": [],
"metadata": null,
"mentioned_emails": [],
"created_at": "2025-06-01T10:30:00Z"
}
],
"created_at": "2025-06-01T08:00:00Z",
"updated_at": "2025-06-15T10:30:00Z"
}{
"detail": "You must be authenticated with a valid access token to access this endpoint."
}{
"detail": "You do not have permission to perform this action."
}{
"detail": "Not found."
}{
"detail": "Request was throttled. Expected available in 30 seconds."
}Get User
Fetch one user by vendor_data (exact match). Adds metadata, comments, and updated_at to the list view, and switches tags to the detailed tag-link shape.
curl -X GET 'https://verification.didit.me/v3/users/user-abc-123/' \
-H 'x-api-key: YOUR_API_KEY'import requests
resp = requests.get(
'https://verification.didit.me/v3/users/user-abc-123/',
headers={'x-api-key': 'YOUR_API_KEY'},
)
resp.raise_for_status()
user = resp.json()
print(user['didit_internal_id'], user['status'], user['session_count'])const vendorData = encodeURIComponent('user-abc-123');
const user = await fetch(
`https://verification.didit.me/v3/users/${vendorData}/`,
{ headers: { 'x-api-key': process.env.DIDIT_API_KEY } },
).then((r) => r.json());
console.log(user.didit_internal_id, user.status);<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/users/{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/users/{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/users/{vendor_data}/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/users/{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{
"didit_internal_id": "f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418",
"vendor_data": "user-abc-123",
"display_name": null,
"full_name": "John Michael Doe",
"date_of_birth": "1990-05-15",
"effective_name": "John Michael Doe",
"status": "ACTIVE",
"metadata": {
"tier": "premium",
"source": "website"
},
"portrait_image_url": "https://<media-host>/...",
"session_count": 3,
"approved_count": 2,
"declined_count": 0,
"in_review_count": 1,
"issuing_states": [
"USA"
],
"approved_emails": [
"john@example.com"
],
"approved_phones": [
"+14155551234"
],
"features": {
"ID_VERIFICATION": "Approved",
"LIVENESS": "Approved",
"FACE_MATCH": "Approved",
"AML": "Approved"
},
"features_list": [
{
"feature": "ID_VERIFICATION",
"status": "Approved"
},
{
"feature": "LIVENESS",
"status": "Approved"
},
{
"feature": "FACE_MATCH",
"status": "Approved"
},
{
"feature": "AML",
"status": "Approved"
}
],
"last_session_at": "2025-06-15T10:30:00Z",
"last_activity_at": "2025-06-15T10:30:00Z",
"first_session_at": "2025-06-01T08:00:00Z",
"tags": [
{
"uuid": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d",
"tag": {
"uuid": "e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b",
"name": "VIP",
"color": "#2567FF",
"description": null,
"source": "custom",
"created_at": "2025-05-01T09:00:00Z",
"updated_at": "2025-05-01T09:00:00Z"
},
"added_by_email": "analyst@acme.com",
"added_by_name": "Jane Analyst",
"created_at": "2025-06-02T11:00:00Z"
}
],
"comments": [
{
"uuid": "c1111111-2222-4333-8444-555555555555",
"comment_type": "STATUS_CHANGED",
"comment": null,
"actor_email": "analyst@acme.com",
"actor_name": "Jane Analyst",
"previous_status": "FLAGGED",
"new_status": "ACTIVE",
"previous_value": null,
"new_value": null,
"changed_fields": [],
"metadata": null,
"mentioned_emails": [],
"created_at": "2025-06-01T10:30:00Z"
}
],
"created_at": "2025-06-01T08:00:00Z",
"updated_at": "2025-06-15T10:30:00Z"
}{
"detail": "You must be authenticated with a valid access token to access this endpoint."
}{
"detail": "You do not have permission to perform this action."
}{
"detail": "Not found."
}{
"detail": "Request was throttled. Expected available in 30 seconds."
}Overview
Returns a single User entity keyed byvendor_data. Responses include didit_internal_id — Didit’s stable internal identifier.
When to use it
- Lookup a user’s current verification state — the
featuresmap gives you the latest status of every feature in a single object. - Detail views in your own UI — pull the profile on demand before rendering.
- Risk scoring — combine session counters and
featuresto score each user on your side.
Notes
vendor_datain the URL is case-sensitive.- Returns
404if no user with thatvendor_dataexists in the application. - Aggregate counters (
session_count,approved_count,declined_count,in_review_count) update in real time as sessions complete. - See the User data model for every field.
Permissions
Any active API key of the application can call this endpoint. Didit API keys are application-scoped, not role-scoped: the Console’s roles and permissions (read:users and the rest) decide what a person can do in the Console, and are not evaluated
for Management API traffic. Control who can call this endpoint by controlling who can read
the application’s API key.
Related
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 unique identifier for the user — a free-form string (NOT a UUID). This is the same value you passed as vendor_data when creating the session that first introduced this user, matched exactly as sent.
Response
Full user detail including metadata, comments/activity log, and aggregated session data.
Full user detail. Extends UserListItem with metadata, comments, and updated_at.
Didit's stable internal UUID for this user.
Your unique identifier for this user (passed when creating sessions). This can be null when no vendor identifier was supplied.
Custom display name set by you
Full name extracted from verified documents
Best available name: display_name if set, otherwise full_name
Lifecycle status of the user record (NOT a session status). ACTIVE is the default, FLAGGED marks the user for manual attention, BLOCKED prevents new sessions for this vendor_data.
ACTIVE, FLAGGED, BLOCKED Presigned URL of the user's portrait photo (expires after a few hours)
Total number of verification sessions for this user
Number of approved sessions
Number of declined sessions
Number of sessions in review
ISO 3166-1 alpha-3 codes of issuing countries seen on this user's approved ID documents, e.g. ["USA", "ESP"]. Empty array when none.
Verified email addresses collected from this user's approved sessions, e.g. ["john@example.com"].
Verified phone numbers collected from this user's approved sessions, e.g. ["+14155551234"].
Aggregated per-feature status across all of this user's sessions. Possible keys: ID_VERIFICATION, NFC, LIVENESS, FACE_MATCH, POA, QUESTIONNAIRE, EMAIL_VERIFICATION, PHONE, AML, IP_ANALYSIS, AGE_ESTIMATION, DATABASE_VALIDATION. Possible values: Approved, Declined, In Review, Not Finished, Resub Requested.
Same data as features, as an ordered array of {feature, status} objects.
Show child attributes
Show child attributes
Timestamp of the most recent session
Timestamp of the first session
Timestamp of the most recent activity on this user (session, transaction, status change, data edit, etc.).
Tag assignments. NOTE: on detail responses each entry is a tag link object ({uuid, tag: {...}, added_by_email, added_by_name, created_at}), unlike the flat {uuid, name, color} shape used on list responses.
Show child attributes
Show child attributes
Custom metadata JSON you attached to this user. Defaults to {}.
Activity log and comments for this user (status changes, profile edits, manual notes).
Show child attributes
Show child attributes