curl -X POST 'https://verification.didit.me/v3/users/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "vendor_data_list": ["user-123", "user-456"]}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.users.set_aml_monitoring(
is_enabled=True,
estimate_only=True,
vendor_data_list=["user-123", "user-456"],
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.users.setAmlMonitoring({
is_enabled: true,
estimate_only: true,
vendor_data_list: ["user-123", "user-456"],
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Users.SetAMLMonitoring(ctx, didit.UsersSetAMLMonitoringParams{
IsEnabled: true,
EstimateOnly: didit.Bool(true),
VendorDataList: didit.Some([]string{"user-123", "user-456"}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import me.didit.Didit;
import me.didit.types.UsersSetAmlMonitoringParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.users().setAmlMonitoring(UsersSetAmlMonitoringParams.builder()
.isEnabled(true)
.estimateOnly(true)
.vendorDataList(List.of("user-123", "user-456"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->users->setAmlMonitoring([
'is_enabled' => true,
'estimate_only' => true,
'vendor_data_list' => ['user-123', 'user-456'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.users.set_aml_monitoring(
is_enabled: true,
estimate_only: true,
vendor_data_list: ["user-123", "user-456"]
)
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.SetAmlMonitoringAsync(new UsersSetAmlMonitoringParams
{
IsEnabled = true,
EstimateOnly = true,
VendorDataList = new string[] { "user-123", "user-456" },
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"users_total": 123,
"already_enabled": 123,
"with_existing_aml": 123,
"needing_screening": 123,
"skipped_no_identity_data": 123,
"skipped_blocked": 123,
"estimated_screening_cost_usd": 0.2,
"estimated_annual_monitoring_cost_usd": 0.07,
"balance_sufficient": true,
"unmatched": [
"<string>"
]
}{
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "PENDING",
"is_enabled": true,
"target_type": "user",
"total": 123,
"processed": 123,
"outcomes": {
"enabled": 123,
"screened_and_enabled": 123,
"already_enabled": 123,
"disabled": 123,
"skipped_no_identity_data": 123,
"skipped_blocked": 123,
"skipped_sandbox": 123,
"failed_provider": 123,
"failed_insufficient_balance": 123
},
"results": [
{
"didit_internal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_data": "<string>",
"outcome": "enabled"
}
],
"error": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"estimate": {
"users_total": 123,
"already_enabled": 123,
"with_existing_aml": 123,
"needing_screening": 123,
"skipped_no_identity_data": 123,
"skipped_blocked": 123,
"estimated_screening_cost_usd": 0.2,
"estimated_annual_monitoring_cost_usd": 0.07,
"balance_sufficient": true
},
"unmatched": [
"<string>"
]
}{
"error": "<string>",
"estimate": {
"users_total": 123,
"already_enabled": 123,
"with_existing_aml": 123,
"needing_screening": 123,
"skipped_no_identity_data": 123,
"skipped_blocked": 123,
"estimated_screening_cost_usd": 0.2,
"estimated_annual_monitoring_cost_usd": 0.07,
"balance_sufficient": true
}
}批量开启或关闭用户 AML 持续监控 API|Didit
一次调用即可为多位用户开启或关闭 AML 持续监控,支持费用预估试运行、可轮询的任务状态及每位用户的处理结果。Didit 提供支持。
curl -X POST 'https://verification.didit.me/v3/users/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "vendor_data_list": ["user-123", "user-456"]}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.users.set_aml_monitoring(
is_enabled=True,
estimate_only=True,
vendor_data_list=["user-123", "user-456"],
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.users.setAmlMonitoring({
is_enabled: true,
estimate_only: true,
vendor_data_list: ["user-123", "user-456"],
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Users.SetAMLMonitoring(ctx, didit.UsersSetAMLMonitoringParams{
IsEnabled: true,
EstimateOnly: didit.Bool(true),
VendorDataList: didit.Some([]string{"user-123", "user-456"}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import me.didit.Didit;
import me.didit.types.UsersSetAmlMonitoringParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.users().setAmlMonitoring(UsersSetAmlMonitoringParams.builder()
.isEnabled(true)
.estimateOnly(true)
.vendorDataList(List.of("user-123", "user-456"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->users->setAmlMonitoring([
'is_enabled' => true,
'estimate_only' => true,
'vendor_data_list' => ['user-123', 'user-456'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.users.set_aml_monitoring(
is_enabled: true,
estimate_only: true,
vendor_data_list: ["user-123", "user-456"]
)
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.SetAmlMonitoringAsync(new UsersSetAmlMonitoringParams
{
IsEnabled = true,
EstimateOnly = true,
VendorDataList = new string[] { "user-123", "user-456" },
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"users_total": 123,
"already_enabled": 123,
"with_existing_aml": 123,
"needing_screening": 123,
"skipped_no_identity_data": 123,
"skipped_blocked": 123,
"estimated_screening_cost_usd": 0.2,
"estimated_annual_monitoring_cost_usd": 0.07,
"balance_sufficient": true,
"unmatched": [
"<string>"
]
}{
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "PENDING",
"is_enabled": true,
"target_type": "user",
"total": 123,
"processed": 123,
"outcomes": {
"enabled": 123,
"screened_and_enabled": 123,
"already_enabled": 123,
"disabled": 123,
"skipped_no_identity_data": 123,
"skipped_blocked": 123,
"skipped_sandbox": 123,
"failed_provider": 123,
"failed_insufficient_balance": 123
},
"results": [
{
"didit_internal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"vendor_data": "<string>",
"outcome": "enabled"
}
],
"error": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"estimate": {
"users_total": 123,
"already_enabled": 123,
"with_existing_aml": 123,
"needing_screening": 123,
"skipped_no_identity_data": 123,
"skipped_blocked": 123,
"estimated_screening_cost_usd": 0.2,
"estimated_annual_monitoring_cost_usd": 0.07,
"balance_sufficient": true
},
"unmatched": [
"<string>"
]
}{
"error": "<string>",
"estimate": {
"users_total": 123,
"already_enabled": 123,
"with_existing_aml": 123,
"needing_screening": 123,
"skipped_no_identity_data": 123,
"skipped_blocked": 123,
"estimated_screening_cost_usd": 0.2,
"estimated_annual_monitoring_cost_usd": 0.07,
"balance_sufficient": true
}
}概述
为所选的用户实体启用或禁用持续 AML 监控,其效果与 Business Console 中的 AML Ongoing monitoring 操作完全一致。Console 与本端点运行的是同一底层操作,因此规则、计费和结果均相同。 请先发送estimate_only: true,以查看选中的用户数量、需要新建 AML 筛查的用户数量、一次性筛查费用以及年度监控费用。试运行不会写入任何数据。
适用场景
- 程序化入驻:对通过 API 导入或创建的用户开启监控,无需手动重新筛查。
- 离职处理:对已离开您平台的用户停止监控及其年度续费。
- 成本控制:在确认之前,预览所选用户的确切成本影响。
选择的处理方式
- 每位用户一次监控筛查。 同一用户即使多次验证,也只会被监控并计费一次。禁用时,会关闭该用户所有筛查的监控。
- 没有 AML 筛查的用户会先进行筛查。 Didit 会为其新建一次 AML 验证(可在用户的 Verifications 标签页中查看),按常规 AML 筛查计费,并在该验证上启用监控。这需要用户的姓名、出生日期和国家/地区;缺少其中任何一项的用户会被标记为
skipped_no_identity_data,而不会被静默忽略。 - 被封禁的用户会被跳过(
skipped_blocked)。沙盒应用从不创建筛查(skipped_sandbox)。 - 会预先检查余额。 当余额不足以支付预估费用时,启用操作会被拒绝并返回
403,响应中会包含预估费用,以便您了解需要充值的金额。 - 年度续费。 新启用监控的用户将在其下一个续费日期按年度监控价格计费,该日期与 Console 中 Ongoing monitoring 列显示的日期相同。禁用会停止续费,但不会对已计费的周期退款。
选择与批次大小
可通过vendor_data_list、didit_internal_id_list 或两者同时选择用户,两个列表之间为逻辑或关系。单个请求最多接受 1000 个标识符(两个列表合计)。与您应用中任何用户都不匹配的标识符会按原样返回在 unmatched 中,且绝不会导致请求失败:如果选择中没有任何匹配项,任务会以空任务完成(total: 0),并列出所有标识符,这与批量删除端点的约定一致。
同步或后台处理
包含 20 名用户或以下的选择会同步处理,调用返回200 及已完成的任务。更大的选择会返回 202 和状态为 PENDING 的任务,此时请轮询获取 AML 监控任务,直到 status 变为 COMPLETED 或 FAILED。无论哪种方式,任务都会为每位用户包含一条 results 记录,其中含有对应的 outcome。
outcome | 含义 |
|---|---|
enabled | 已在现有 AML 筛查上启用监控。 |
screened_and_enabled | 已新建 AML 筛查(计费),并在其上启用监控。 |
already_enabled | 监控已处于启用状态;未做任何更改,也未计费。 |
disabled | 已关闭该用户所有筛查的监控。 |
skipped_no_identity_data | 用户缺少进行筛查所需的姓名、出生日期或国家/地区。 |
skipped_blocked | 用户已被封禁。 |
skipped_sandbox | 沙盒应用;不会创建筛查。 |
failed_provider | 筛查无法完成。请稍后重试。 |
failed_insufficient_balance | 任务运行期间余额耗尽。 |
Webhook
切换监控本身不会发出任何 Webhook。监控启用后,重新筛查会继续触发持续 AML 监控中所述的常规status.updated 和 data.updated 事件。
权限
应用的任何有效 API 密钥都可以调用此端点。Didit API 密钥的作用域为应用,而非角色:Console 中的角色与权限决定的是人员在 Console 中可以执行的操作,对 Management API 的流量不做评估。相关内容
授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求体
使用 vendor_data_list、didit_internal_id_list 或两者同时选择用户(两个列表为“或”逻辑)。两个列表合计每次请求最多 1000 个标识符。
响应
估算结果(当 estimate_only 为 true 时)或以内联方式处理的选择的已完成任务。
- Option 1
- Option 2
费用预览。当 estimate_only 为 true 时直接返回(不写入任何内容)。
所选条件匹配的档案。
已处于监控状态的档案(启用时无需操作;禁用时将关闭这些档案的监控)。
现有 AML 筛查将被切换为受监控状态的档案(不进行新的筛查)。
没有任何 AML 筛查记录、将首先进行筛查的档案(按常规 AML 筛查计费)。
因缺少身份数据而无法进行筛查的档案。
将被跳过的已拉黑用户(对于企业始终为 0)。
新增筛查的一次性费用。
0.2
即将纳入监控的档案的年度监控成本。
0.07
组织余额是否足以支付筛查以及第一年的监控费用。
请求中与该应用中的任何档案均不匹配的标识符,与发送时完全一致。