curl -X POST 'https://verification.didit.me/v3/businesses/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "vendor_data_list": ["company-123", "company-456"]}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.businesses.set_aml_monitoring(
is_enabled=True,
estimate_only=True,
vendor_data_list=["company-123", "company-456"],
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.businesses.setAmlMonitoring({
is_enabled: true,
estimate_only: true,
vendor_data_list: ["company-123", "company-456"],
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Businesses.SetAMLMonitoring(ctx, didit.BusinessesSetAMLMonitoringParams{
IsEnabled: true,
EstimateOnly: didit.Bool(true),
VendorDataList: didit.Some([]string{"company-123", "company-456"}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import me.didit.Didit;
import me.didit.types.BusinessesSetAmlMonitoringParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.businesses().setAmlMonitoring(BusinessesSetAmlMonitoringParams.builder()
.isEnabled(true)
.estimateOnly(true)
.vendorDataList(List.of("company-123", "company-456"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->businesses->setAmlMonitoring([
'is_enabled' => true,
'estimate_only' => true,
'vendor_data_list' => ['company-123', 'company-456'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.businesses.set_aml_monitoring(
is_enabled: true,
estimate_only: true,
vendor_data_list: ["company-123", "company-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.Businesses.SetAmlMonitoringAsync(new BusinessesSetAmlMonitoringParams
{
IsEnabled = true,
EstimateOnly = true,
VendorDataList = new string[] { "company-123", "company-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
通过一次调用批量开启或关闭企业的持续 AML 监控,支持费用预估试运行、可轮询的任务以及每家企业的处理结果。Didit 提供支持。
curl -X POST 'https://verification.didit.me/v3/businesses/aml-monitoring/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"is_enabled": true, "vendor_data_list": ["company-123", "company-456"]}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.businesses.set_aml_monitoring(
is_enabled=True,
estimate_only=True,
vendor_data_list=["company-123", "company-456"],
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.businesses.setAmlMonitoring({
is_enabled: true,
estimate_only: true,
vendor_data_list: ["company-123", "company-456"],
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.Businesses.SetAMLMonitoring(ctx, didit.BusinessesSetAMLMonitoringParams{
IsEnabled: true,
EstimateOnly: didit.Bool(true),
VendorDataList: didit.Some([]string{"company-123", "company-456"}),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.util.List;
import me.didit.Didit;
import me.didit.types.BusinessesSetAmlMonitoringParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.businesses().setAmlMonitoring(BusinessesSetAmlMonitoringParams.builder()
.isEnabled(true)
.estimateOnly(true)
.vendorDataList(List.of("company-123", "company-456"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->businesses->setAmlMonitoring([
'is_enabled' => true,
'estimate_only' => true,
'vendor_data_list' => ['company-123', 'company-456'],
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.businesses.set_aml_monitoring(
is_enabled: true,
estimate_only: true,
vendor_data_list: ["company-123", "company-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.Businesses.SetAmlMonitoringAsync(new BusinessesSetAmlMonitoringParams
{
IsEnabled = true,
EstimateOnly = true,
VendorDataList = new string[] { "company-123", "company-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 监控,其效果与企业控制台中的 AML Ongoing monitoring 操作完全一致。控制台与此 endpoint 运行的是同一套底层逻辑,因此规则、计费和结果均相同。 请先发送estimate_only: true,以查看所选企业的数量、需要新建 AML 筛查的企业数量、一次性筛查费用以及每年的监控费用。试运行不会写入任何数据。估算结果使用与用户 endpoint 相同的字段名,因此 users_total 表示所选企业的数量。
企业选择的处理方式
- 每家企业只有一次受监控的筛查。 一家企业即使验证过多次,也只会被监控并计费一次。禁用监控时,会关闭该企业所有筛查的监控。
- 没有 AML 筛查的企业会先进行筛查。 Didit 会为其创建新的 AML 验证(可在企业的 Verifications 标签页中查看),并按常规 AML 筛查计费,同时在该验证上启用监控。筛查使用企业的法定名称(或显示名称)和国家/地区。如果企业完全没有名称,则会以
skipped_no_identity_data报告,而不会被静默忽略。 - 沙盒应用从不创建筛查(
skipped_sandbox)。 - 会预先检查余额。 当余额不足以支付估算费用时,启用操作会被拒绝并返回
403,响应中包含估算结果,便于您了解需要充值的金额。 - 年度续费。 新启用监控的企业,将在下一个续费日期按年度监控价格计费,该日期与控制台 Ongoing monitoring 列中显示的日期相同。禁用监控会停止续费,但不会退还已计费的周期费用。
选择范围与批量大小
可以通过vendor_data_list、didit_internal_id_list 或两者同时选择企业,两个列表之间为”或”的关系。单次请求两个列表合计最多接受 1000 个标识符。与您的应用中任何企业都不匹配的标识符,会按原样放入 unmatched 返回,且绝不会导致请求失败:如果所选内容没有匹配到任何企业,任务会以空任务完成(total: 0),并列出所有标识符,这与批量删除 endpoint 的约定相同。
同步处理还是后台处理
不超过 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_sandbox | 沙盒应用;不会创建筛查。 |
failed_provider | 无法完成筛查。请稍后重试。 |
failed_insufficient_balance | 任务运行期间余额耗尽。 |
Webhook
切换监控状态本身不会发出任何 Webhook。监控启用后,重新筛查会继续触发持续 AML 监控中介绍的常规status.updated 和 data.updated 事件。
权限
应用的任何有效 API 密钥都可以调用此 endpoint。Didit 的 API 密钥是应用级别的,而非角色级别的:控制台中的角色与权限决定的是人员在控制台中可以执行的操作,对 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
组织余额是否足以支付筛查以及第一年的监控费用。
请求中与该应用中的任何档案均不匹配的标识符,与发送时完全一致。