curl -X POST 'https://verification.didit.me/v3/wallet-screening/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
"blockchain": "ETH"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.wallet_screening.screen(
wallet_address="0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
blockchain="ETH",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.walletScreening.screen({
wallet_address: "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
blockchain: "ETH",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.WalletScreening.Screen(ctx, didit.WalletScreeningScreenParams{
WalletAddress: "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
Blockchain: didit.Some(didit.WalletScreeningScreenParamsBlockchain("ETH")),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.WalletScreeningScreenParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.walletScreening().screen(WalletScreeningScreenParams.builder()
.walletAddress("0x94f1b9b64e2932f6a2db338f616844400cd58e8a")
.blockchain(WalletScreeningScreenParams.Blockchain.of("ETH"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->walletScreening->screen([
'wallet_address' => '0x94f1b9b64e2932f6a2db338f616844400cd58e8a',
'blockchain' => 'ETH',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.wallet_screening.screen(
wallet_address: "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
blockchain: "ETH"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.WalletScreening.ScreenAsync(new WalletScreeningScreenParams
{
WalletAddress = "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
Blockchain = new WalletScreeningScreenParamsBlockchain("ETH"),
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"provider": "merklescience",
"screening_type": "WALLET_SCREENING",
"risk_score": 95,
"severity": "CRITICAL",
"status": "SCREENED",
"summary": "Merkle Science risk: Critical (5/5). SANCTIONS HIT. Dominant risk: sanctioned. Driven by: the address is attributed to Sanctions / OFAC (Example Sanctions)",
"wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
"transaction_hash": null,
"blockchain": "ETH",
"block_timestamp": null,
"total_value_usd": null,
"fee_usd": null,
"sender_rows": [],
"receiver_rows": [],
"transaction_flows": [],
"transaction_flows_status": null,
"transaction_flows_error": null,
"source_of_funds": [
{
"category": "sanctioned",
"percentage": 100,
"amount_usd": 9813695,
"entity_name": "Example Sanctions",
"entity_type": "Sanctions",
"entity_subtype": "OFAC",
"hops": null,
"description": "Sanctions / OFAC",
"is_direct": true,
"exposure_direction": "incoming",
"exposure_type": "direct",
"provider_entity_id": "118885",
"provider_entity_type_id": "30",
"provider_entity_subtype_id": "125",
"country": "",
"raw_amount": null,
"raw_currency": null
}
],
"destination_of_funds": [
{
"category": "defi",
"percentage": 84.824453,
"amount_usd": 7783414.38,
"entity_name": "Example DeFi 7",
"entity_type": "DeFi",
"entity_subtype": "Bridges",
"hops": null,
"description": "DeFi / Bridges",
"is_direct": false,
"exposure_direction": "outgoing",
"exposure_type": "indirect",
"provider_entity_id": "118459",
"provider_entity_type_id": "33",
"provider_entity_subtype_id": "143",
"country": "",
"raw_amount": null,
"raw_currency": null
},
{
"category": "defi",
"percentage": 15.175547,
"amount_usd": 1392494.37,
"entity_name": "Example DeFi 2",
"entity_type": "DeFi",
"entity_subtype": "Yield Aggregator",
"hops": null,
"description": "DeFi / Yield Aggregator",
"is_direct": false,
"exposure_direction": "outgoing",
"exposure_type": "indirect",
"provider_entity_id": "90192",
"provider_entity_type_id": "33",
"provider_entity_subtype_id": "142",
"country": "",
"raw_amount": null,
"raw_currency": null
}
],
"counterparty_connections": [
{
"entity_name": "Example Sanctions",
"entity_type": "Sanctions",
"entity_subtype": "OFAC",
"risk_level": "critical",
"categories": [
"sanctioned"
],
"received_usd": null,
"sent_usd": null,
"received_hops": null,
"sent_hops": null,
"percentage": 0,
"is_direct": true,
"country": null,
"provider_entity_id": null
},
{
"entity_name": "Example Sanctions",
"entity_type": "Sanctions",
"entity_subtype": "OFAC",
"risk_level": "critical",
"categories": [
"sanctioned"
],
"received_usd": null,
"sent_usd": null,
"received_hops": null,
"sent_hops": null,
"percentage": 0,
"is_direct": true,
"country": null,
"provider_entity_id": null
}
],
"network_nodes": [],
"network_edges": [],
"sanctions_hit": true,
"pep_counterparty": null,
"dominant_risk_category": "sanctioned",
"risk_factors": [
{
"source": "attribution",
"category": "sanctioned",
"label": "Sanctions / OFAC",
"entity_name": "Example Sanctions",
"direction": "attribution",
"exposure_type": "attribution",
"amount_usd": null,
"percentage": 0,
"is_high_risk": true,
"description": "the address is attributed to Sanctions / OFAC (Example Sanctions)"
},
{
"source": "exposure",
"category": "sanctioned",
"label": "Sanctions / OFAC",
"entity_name": "Example Sanctions",
"direction": "incoming",
"exposure_type": "direct",
"amount_usd": 9813695,
"percentage": 51.679304,
"is_high_risk": true,
"description": "51.6793% direct incoming exposure to Sanctions / OFAC (Example Sanctions)"
},
{
"source": "exposure",
"category": "defi",
"label": "DeFi / Bridges",
"entity_name": "Example DeFi 7",
"direction": "outgoing",
"exposure_type": "indirect",
"amount_usd": 7783414.38,
"percentage": 40.987766,
"is_high_risk": false,
"description": "40.9878% indirect outgoing exposure to DeFi / Bridges (Example DeFi 7)"
},
{
"source": "exposure",
"category": "defi",
"label": "DeFi / Yield Aggregator",
"entity_name": "Example DeFi 2",
"direction": "outgoing",
"exposure_type": "indirect",
"amount_usd": 1392494.37,
"percentage": 7.33293,
"is_high_risk": false,
"description": "7.33293% indirect outgoing exposure to DeFi / Yield Aggregator (Example DeFi 2)"
}
],
"raw_response": {
"...": "provider-specific details"
},
"report_signature": "<hmac-sha256 over the result, scoped to your application>"
}{
"blockchain": [
"A 0x address is valid on every EVM chain. Send blockchain as one of: ETH, BNB, MATIC, BASE, ARB, OP, CELO, MODE, PLUME."
],
"candidate_chains": [
"ETH",
"BNB",
"MATIC",
"BASE",
"ARB",
"OP",
"CELO",
"MODE",
"PLUME"
]
}钱包筛查 API:按需进行加密货币 AML 检测
Didit 可对单个加密货币钱包地址进行 AML 风险筛查,无需创建交易。涵盖资金来源、制裁风险与风险评分,按次计费,起价 $0.02。
curl -X POST 'https://verification.didit.me/v3/wallet-screening/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
"blockchain": "ETH"
}'from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.wallet_screening.screen(
wallet_address="0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
blockchain="ETH",
)
print(result)import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.walletScreening.screen({
wallet_address: "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
blockchain: "ETH",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.WalletScreening.Screen(ctx, didit.WalletScreeningScreenParams{
WalletAddress: "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
Blockchain: didit.Some(didit.WalletScreeningScreenParamsBlockchain("ETH")),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import me.didit.Didit;
import me.didit.types.WalletScreeningScreenParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.walletScreening().screen(WalletScreeningScreenParams.builder()
.walletAddress("0x94f1b9b64e2932f6a2db338f616844400cd58e8a")
.blockchain(WalletScreeningScreenParams.Blockchain.of("ETH"))
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->walletScreening->screen([
'wallet_address' => '0x94f1b9b64e2932f6a2db338f616844400cd58e8a',
'blockchain' => 'ETH',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.wallet_screening.screen(
wallet_address: "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
blockchain: "ETH"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.WalletScreening.ScreenAsync(new WalletScreeningScreenParams
{
WalletAddress = "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
Blockchain = new WalletScreeningScreenParamsBlockchain("ETH"),
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"provider": "merklescience",
"screening_type": "WALLET_SCREENING",
"risk_score": 95,
"severity": "CRITICAL",
"status": "SCREENED",
"summary": "Merkle Science risk: Critical (5/5). SANCTIONS HIT. Dominant risk: sanctioned. Driven by: the address is attributed to Sanctions / OFAC (Example Sanctions)",
"wallet_address": "0x94f1b9b64e2932f6a2db338f616844400cd58e8a",
"transaction_hash": null,
"blockchain": "ETH",
"block_timestamp": null,
"total_value_usd": null,
"fee_usd": null,
"sender_rows": [],
"receiver_rows": [],
"transaction_flows": [],
"transaction_flows_status": null,
"transaction_flows_error": null,
"source_of_funds": [
{
"category": "sanctioned",
"percentage": 100,
"amount_usd": 9813695,
"entity_name": "Example Sanctions",
"entity_type": "Sanctions",
"entity_subtype": "OFAC",
"hops": null,
"description": "Sanctions / OFAC",
"is_direct": true,
"exposure_direction": "incoming",
"exposure_type": "direct",
"provider_entity_id": "118885",
"provider_entity_type_id": "30",
"provider_entity_subtype_id": "125",
"country": "",
"raw_amount": null,
"raw_currency": null
}
],
"destination_of_funds": [
{
"category": "defi",
"percentage": 84.824453,
"amount_usd": 7783414.38,
"entity_name": "Example DeFi 7",
"entity_type": "DeFi",
"entity_subtype": "Bridges",
"hops": null,
"description": "DeFi / Bridges",
"is_direct": false,
"exposure_direction": "outgoing",
"exposure_type": "indirect",
"provider_entity_id": "118459",
"provider_entity_type_id": "33",
"provider_entity_subtype_id": "143",
"country": "",
"raw_amount": null,
"raw_currency": null
},
{
"category": "defi",
"percentage": 15.175547,
"amount_usd": 1392494.37,
"entity_name": "Example DeFi 2",
"entity_type": "DeFi",
"entity_subtype": "Yield Aggregator",
"hops": null,
"description": "DeFi / Yield Aggregator",
"is_direct": false,
"exposure_direction": "outgoing",
"exposure_type": "indirect",
"provider_entity_id": "90192",
"provider_entity_type_id": "33",
"provider_entity_subtype_id": "142",
"country": "",
"raw_amount": null,
"raw_currency": null
}
],
"counterparty_connections": [
{
"entity_name": "Example Sanctions",
"entity_type": "Sanctions",
"entity_subtype": "OFAC",
"risk_level": "critical",
"categories": [
"sanctioned"
],
"received_usd": null,
"sent_usd": null,
"received_hops": null,
"sent_hops": null,
"percentage": 0,
"is_direct": true,
"country": null,
"provider_entity_id": null
},
{
"entity_name": "Example Sanctions",
"entity_type": "Sanctions",
"entity_subtype": "OFAC",
"risk_level": "critical",
"categories": [
"sanctioned"
],
"received_usd": null,
"sent_usd": null,
"received_hops": null,
"sent_hops": null,
"percentage": 0,
"is_direct": true,
"country": null,
"provider_entity_id": null
}
],
"network_nodes": [],
"network_edges": [],
"sanctions_hit": true,
"pep_counterparty": null,
"dominant_risk_category": "sanctioned",
"risk_factors": [
{
"source": "attribution",
"category": "sanctioned",
"label": "Sanctions / OFAC",
"entity_name": "Example Sanctions",
"direction": "attribution",
"exposure_type": "attribution",
"amount_usd": null,
"percentage": 0,
"is_high_risk": true,
"description": "the address is attributed to Sanctions / OFAC (Example Sanctions)"
},
{
"source": "exposure",
"category": "sanctioned",
"label": "Sanctions / OFAC",
"entity_name": "Example Sanctions",
"direction": "incoming",
"exposure_type": "direct",
"amount_usd": 9813695,
"percentage": 51.679304,
"is_high_risk": true,
"description": "51.6793% direct incoming exposure to Sanctions / OFAC (Example Sanctions)"
},
{
"source": "exposure",
"category": "defi",
"label": "DeFi / Bridges",
"entity_name": "Example DeFi 7",
"direction": "outgoing",
"exposure_type": "indirect",
"amount_usd": 7783414.38,
"percentage": 40.987766,
"is_high_risk": false,
"description": "40.9878% indirect outgoing exposure to DeFi / Bridges (Example DeFi 7)"
},
{
"source": "exposure",
"category": "defi",
"label": "DeFi / Yield Aggregator",
"entity_name": "Example DeFi 2",
"direction": "outgoing",
"exposure_type": "indirect",
"amount_usd": 1392494.37,
"percentage": 7.33293,
"is_high_risk": false,
"description": "7.33293% indirect outgoing exposure to DeFi / Yield Aggregator (Example DeFi 2)"
}
],
"raw_response": {
"...": "provider-specific details"
},
"report_signature": "<hmac-sha256 over the result, scoped to your application>"
}{
"blockchain": [
"A 0x address is valid on every EVM chain. Send blockchain as one of: ETH, BNB, MATIC, BASE, ARB, OP, CELO, MODE, PLUME."
],
"candidate_chains": [
"ETH",
"BNB",
"MATIC",
"BASE",
"ARB",
"OP",
"CELO",
"MODE",
"PLUME"
]
}授权
您的应用 API 密钥,可在 Business Console 的“开发者 -> API 密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域:针对每个资源设为无权限、只读或读写,限定于特定工作流或已通过的会话、限定于 IP 地址列表,以及设置到期日期。401 表示密钥错误、已撤销或已过期;403 表示未发送密钥、密钥无权访问该资源或操作,或请求来自其 IP 列表之外的地址;在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF URL 将为 null;没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅 https://docs.didit.me/console/api-keys。
请求体
要筛查的加密货币地址或网络标识符。必须与所选网络匹配(例如 EVM 链上以 0x 开头的 40 位十六进制字符地址)。别名:address。
"0x94f1b9b64e2932f6a2db338f616844400cd58e8a"
可选的网络标识符。省略时,网络将根据地址格式读取:bc1、1 和 3 开头的地址为比特币(BTC),T 开头的地址为波场(TRX),base58 公钥为 Solana(SOL)。0x 开头的地址在所有 EVM 网络上均有效,因此省略 blockchain 会返回 422 状态码,并在 candidate_chains 中列出候选网络。托管筛查支持 BTC、ETH、LTC、XRP、BCH、DOGE、TRX、SOL、MATIC、BNB、BASE (Base)、OP (Optimism)、ARB (Arbitrum One)、AVAX (Avalanche C-Chain)、ADA (Cardano)、XLM (Stellar) 和 HBAR (Hedera)。USDT 和 USDC 为旧版以太坊别名,不支持多网络搜索。关联提供商的覆盖范围各有不同。LIGHTNING 需要受支持的关联提供商。CELO (Celo)、MODE (Mode) 和 PLUME (Plume) 通过关联的 TRM Labs 账户进行筛查;托管筛查对它们会返回 400。别名:currency。
BTC, LIGHTNING, ETH, LTC, XRP, BCH, DOGE, TRX, SOL, MATIC, BNB, USDT, USDC, BASE, OP, ARB, AVAX, ADA, XLM, HBAR, CELO, MODE, PLUME "ETH"
可选。该地址是作为入账(充值)还是出账(提现)交易对手进行筛查。接受 inbound、outbound、deposit 或 withdrawal。省略时默认为中立的转账前筛查。该参数仅作为上下文传递给提供商;它不会改变返回的 risk_score、severity 或 source_of_funds/destination_of_funds 明细,无论 direction 为何值,这两项明细均会返回。因此,更改或省略 direction 无需对地址重新进行筛查。
inbound, outbound, deposit, withdrawal 响应
标准化的钱包筛查结果。
执行筛查的提供商(例如 merklescience、crystal)。
对于此 endpoint 始终为 WALLET_SCREENING。
WALLET_SCREENING 归一化的 0-100 风险评分。分值越高表示对高风险实体的暴露越大。Merkle Science 将地址评为 0-5 级,分别对应 0、15、35、55、75 或 95。
根据 risk_score 派生的风险区间:0-9 为 UNKNOWN,10-39 为 LOW,40-69 为 MEDIUM,70-89 为 HIGH,90-100 为 CRITICAL。UNKNOWN 是最低区间,并非单独的无数据状态:risk_score 为 0(常见的无风险地址情况)表示无负面评估,而 1-9 范围内的非零分数是真实存在但低于 LOW 的信号,请读取 risk_score,而不仅仅是查看区间。切勿将 UNKNOWN 视为明确的低风险或通过评级;请勿将其显示为通过。
UNKNOWN, LOW, MEDIUM, HIGH, CRITICAL 筛查结果状态。
SCREENED, PENDING, ERROR 易于阅读的筛查结果摘要。
已筛查的地址,原样回显。
已进行筛查的区块链。
该地址从何处接收资金,按实体归因。每个条目都是一个风险敞口明细。
Show child attributes
Show child attributes
该地址向何处发送资金,按实体归因。条目格式与 exposure_direction = outgoing 的 source_of_funds 相同。
Show child attributes
Show child attributes
提供商将筛查地址归属到的实体。对于 Merkle Science,这些信息来自地址自身的所有者和用户标签,因此同一实体可能会出现两次,并且它们不携带资金流:received_usd、sent_usd、received_hops 和 sent_hops 均为 null,且 percentage 为 0。请勿在此根据 risk_level 或 is_direct 进行路由:请使用 sanctions_hit、dominant_risk_category 和 risk_factors[].is_high_risk 获取判定结果,并在 source_of_funds/destination_of_funds 中使用 exposure_type 判断直接性。
Show child attributes
Show child attributes
如果该地址存在直接或间接的制裁敞口,则为 true。
权重最高的高风险类别,若无主导类别则为 null(例如 sanctioned、mixer、stolen_funds)。
针对此确切结果的不透明 HMAC-SHA256 签名,作用域限定于您的应用。该字段本身无单独意义,请将未经修改且包含此字段的完整响应体重新发送至 POST /v3/wallet-screening/pdf/ 以将其渲染为 PDF。如果缺失 report_signature 或在重新发送前修改了任何已签名字段(例如 risk_score、severity、sanctions_hit),PDF endpoint 将拒绝请求并返回 400。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为 null。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为 null。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为 null。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为 null。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为空。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为空。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为空。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为 null。
交易筛查字段,与结果结构共用。在钱包筛查结果中始终为 null。
用于交易筛查的暴露图谱节点。在钱包筛查结果中为空。
用于交易筛查的暴露图谱边。在钱包筛查结果中为空。
政治公众人物暴露情况。当无可用的 PEP 发现结果时为 null(由于目前没有任何提供商报告此项,今天的所有结果均为该值);仅在筛查结果明确为阴性时为 false。切勿将 null 视为已完成的 PEP 检查。
risk_score 的排序解释:导致该判定的原因。数据源会根据自身模型对地址进行评分,且仅返回判定结果(Merkle Science 返回 0-5 的整数),因此仅凭该分数无法采取操作。按高风险优先排序,随后按流经各驱动因素的价值排序,最多保留五个影响最大的因素;source_of_funds 和 destination_of_funds 始终包含完整的明细。若 risk_score 较高但没有 is_high_risk 条目,则表示数据源未报告任何制裁或归属实体匹配,纯粹根据其自身的风险敞口模型对该地址进行了评级,summary 会对此进行明确说明。
Show child attributes
Show child attributes
服务商自身的 payload。其格式因服务商而异,且可能随时更改:请读取规范化字段,而不是直接解析它。