curl -X PATCH 'https://verification.didit.me/v3/users/user-abc-123/update-status/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"status": "BLOCKED"}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.users.update_status(
"user-123",
status="ACTIVE",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.users.updateStatus("user-123", {
status: "ACTIVE",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Users.UpdateStatus(ctx, "user-123", didit.UsersUpdateStatusParams{
Status: "ACTIVE",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.EntityStatusUpdateRequest;
import me.didit.types.UsersUpdateStatusParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.users().updateStatus("user-123", UsersUpdateStatusParams.builder()
.status(EntityStatusUpdateRequest.Status.of("ACTIVE"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->users->updateStatus('user-123', [
'status' => 'ACTIVE',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.users.update_status(
"user-123",
status: "ACTIVE"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Users.UpdateStatusAsync("user-123", new UsersUpdateStatusParams
{
Status = "ACTIVE",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"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": "BLOCKED",
"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": "Chargeback fraud pattern confirmed",
"actor_email": null,
"actor_name": null,
"previous_status": "ACTIVE",
"new_status": "BLOCKED",
"previous_value": null,
"new_value": null,
"changed_fields": [],
"metadata": null,
"mentioned_emails": [],
"created_at": "2025-06-15T10:30:00Z"
}
],
"created_at": "2025-06-01T08:00:00Z",
"updated_at": "2025-06-15T10:30:00Z"
}更新用户状态 API:封禁或标记用户
封禁、标记或激活 Didit 供应商用户。状态会同步至后续 KYC 会话和交易筛查。按调用次数付费的用户管理功能。
curl -X PATCH 'https://verification.didit.me/v3/users/user-abc-123/update-status/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"status": "BLOCKED"}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.users.update_status(
"user-123",
status="ACTIVE",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.users.updateStatus("user-123", {
status: "ACTIVE",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Users.UpdateStatus(ctx, "user-123", didit.UsersUpdateStatusParams{
Status: "ACTIVE",
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.EntityStatusUpdateRequest;
import me.didit.types.UsersUpdateStatusParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.users().updateStatus("user-123", UsersUpdateStatusParams.builder()
.status(EntityStatusUpdateRequest.Status.of("ACTIVE"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->users->updateStatus('user-123', [
'status' => 'ACTIVE',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.users.update_status(
"user-123",
status: "ACTIVE"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.Users.UpdateStatusAsync("user-123", new UsersUpdateStatusParams
{
Status = "ACTIVE",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"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": "BLOCKED",
"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": "Chargeback fraud pattern confirmed",
"actor_email": null,
"actor_name": null,
"previous_status": "ACTIVE",
"new_status": "BLOCKED",
"previous_value": null,
"new_value": null,
"changed_fields": [],
"metadata": null,
"mentioned_emails": [],
"created_at": "2025-06-15T10:30:00Z"
}
],
"created_at": "2025-06-01T08:00:00Z",
"updated_at": "2025-06-15T10:30:00Z"
}概述
在ACTIVE、FLAGGED 和 BLOCKED 之间切换用户实体的状态。完整的状态机说明请参阅实体生命周期。
何时使用
- 阻止用户:确认存在欺诈或违反合规要求后使用。
- 标记用户:等待人工审核期间使用,不直接阻止该用户。
- 解除阻止:用户完成整改后使用。
- 同步外部信号:例如,当你自己的欺诈引擎将某用户评分超过阈值时,通过此端点将其切换为
FLAGGED。
注意事项
- 有效值为
ACTIVE、FLAGGED和BLOCKED。无效值将返回 400。 - 可以传入可选的
reason(最多 1000 个字符),记录状态变更的原因。 Didit 会将其保存为该用户活动记录中状态变更条目的备注:即用户的comments[].comment,并显示在 Business Console 的 活动 中。 仅当状态确实发生变化时才会记录。 BLOCKED用户的所有新会话都将被自动拒绝,所有新交易也都将被自动拒绝。- 触发
user.status.updatedWebhook 事件,其中包含previous_status和status。 该 Webhook 不包含reason。
执行规则
| 状态 | 对新会话的影响 | 对新交易的影响 |
|---|---|---|
ACTIVE | 正常流程 | 正常流程 |
FLAGGED | 允许,但转入 IN_REVIEW | 允许;可能根据规则自动升级 |
BLOCKED | 自动拒绝 | 自动拒绝 |
权限
主密钥和拥有完全访问权限的 API 密钥 始终可以调用此端点。 具有自定义访问权限的密钥需要 People(users)写入权限。
仅限某些工作流或已通过的会话的密钥无法访问此 endpoint。
控制台的角色与权限决定团队成员在控制台中可以执行的操作。
在 API 密钥请求中不会评估这些角色和权限。
相关内容
授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
路径参数
您对该用户的唯一标识符。
请求体
响应
用户状态已更新。返回完整用户记录。
完整的用户详情。在 UserListItem 基础上扩展了元数据、备注和 updated_at。
Didit 为此用户分配的稳定内部 UUID。
您对此用户的唯一标识符(创建会话时传入)。未提供供应商标识符时可为 null。
您设置的自定义显示名称
从已验证证件中提取的姓名
最佳可用名称:如果已设置则为 display_name,否则为 full_name
用户记录的生命周期状态(并非会话状态)。ACTIVE 为默认值,FLAGGED 标记该用户需要人工关注,BLOCKED 会阻止该 vendor_data 创建新会话。
ACTIVE, FLAGGED, BLOCKED 用户肖像照片的预签名 URL(数小时后过期)
该用户的验证会话总数
已通过的会话数量
已拒绝的会话数量
审核中的会话数量
此用户已通过的身份证件上显示的签发国家/地区的 ISO 3166-1 alpha-3 代码,例如 ["USA", "ESP"]。无时为空数组。
从该用户已通过的会话中收集的已验证邮箱地址,例如 ["john@example.com"]。
从该用户已通过的会话中收集的已验证电话号码,例如 ["+14155551234"]。
该用户所有会话的每项功能汇总状态。可选键:ID_VERIFICATION、NFC、LIVENESS、FACE_MATCH、POA、QUESTIONNAIRE、EMAIL_VERIFICATION、PHONE、AML、IP_ANALYSIS、AGE_ESTIMATION、DATABASE_VALIDATION。可选值:Approved、Declined、In Review、Not Finished、Resub Requested。
与 features 相同的数据,为 {feature, status} 对象的有序数组。
Show child attributes
Show child attributes
最近一次会话的时间戳
首次会话的时间戳
该用户最近一次活动的时间戳(会话、交易、状态变更、数据编辑等)。
标签分配情况。注意:与列表响应中使用的扁平 {uuid, name, color} 结构不同,详情响应中的每个条目均为标签链接对象({uuid, tag: {...}, added_by_email, added_by_name, created_at})。
Show child attributes
Show child attributes
您附加到此用户的自定义元数据 JSON。默认为 {}。
该用户的活动日志和评论(状态变更、资料修改、手动备注)。
Show child attributes
Show child attributes