POST /apiv2/aml
已被 POST /apiv2/screening 取代
POST /apiv2/screening 是版本 2 契约:针对每个提供商和订单的每种状态提供统一的响应结构、 将小数表示为字符串而非 JSON 数字、统一比例的份额分配,以及 单一的错误格式。此端点仍然保持运行,未经通知不会下线。
提交地址以进行 AML(反洗钱)筛查。返回风险评分、风险等级以及详细的敞口分析。
响应中的所有时间戳均为 UTC。 字符串格式保持不变 — "2026-09-09 23:01:44",不带时区后缀。
端点 URL
POST https://netts.io/apiv2/aml请求头
| 请求头 | 必填 | 描述 |
|---|---|---|
| Content-Type | 是 | application/json |
| X-API-KEY | 是 | 来自 Netts 控制面板的 API 密钥 |
请求体
{
"address": "YOUR_ADDRESS_HERE",
"network": "trx",
"provider": "elliptic",
"wait": true
}请求参数
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
| address | string | 是 | 待检查的区块链地址(10-100 个字符) |
| network | string | 是 | 区块链网络标识符(请参见下方的支持的网络) |
| provider | string | 否 | AML 提供商:elliptic(默认) |
| wait | boolean | 否 | 若为 true,则同步等待结果(最多 15 秒)。若为 false 或省略,则立即返回 pending 状态和 client_order_id — 用于通过 GET /apiv2/aml/{order_id} 轮询结果 |
| response_format | string | 否 | 响应详细程度级别:rate(仅评分),full(默认,完整数据) |
| report_language | string | 否 | 报告语言:en(默认) |
提供商
| 提供商 | 评分范围 | 描述 |
|---|---|---|
elliptic | 0 — 10 | Elliptic 风险评分。0 = 无风险,10 = 最高风险。null = 未检测到触发项 |
请求示例
cURL(同步)
curl -X POST https://netts.io/apiv2/aml \
-H "Content-Type: application/json" \
-H "X-API-KEY: your_api_key" \
-d '{
"address": "YOUR_ADDRESS_HERE",
"network": "trx",
"provider": "elliptic",
"wait": true
}'cURL(异步)
curl -X POST https://netts.io/apiv2/aml \
-H "Content-Type: application/json" \
-H "X-API-KEY: your_api_key" \
-d '{
"address": "YOUR_ADDRESS_HERE",
"network": "trx",
"provider": "elliptic"
}'Python
import requests
url = "https://netts.io/apiv2/aml"
headers = {
"Content-Type": "application/json",
"X-API-KEY": "your_api_key",
}
payload = {
"address": "YOUR_ADDRESS_HERE",
"network": "trx",
"provider": "elliptic",
"wait": True
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
if response.status_code == 200:
result = data.get("data", {})
print(f"Order ID: {result.get('client_order_id')}")
print(f"Status: {result.get('status')}")
print(f"Risk Score: {result.get('risk_score')}")
print(f"Risk Level: {result.get('risk_level')}")
print(f"Sanctioned: {result.get('is_sanctioned')}")
else:
print(f"Error: {data}")响应
成功 — 处理中 (200 OK)
未设置 wait 或检查仍在处理中时:
{
"success": true,
"data": {
"client_order_id": "A4C666ABE24BD4A",
"status": "pending",
"address": "T...example...",
"provider": "elliptic",
"price_usdt": 0.98,
"price_trx": 4.136286,
"currency": "TRX",
"message": "AML check order accepted. Use GET /apiv2/aml/A4C666ABE24BD4A to check status."
},
"timestamp": "2026-03-10 09:56:31"
}成功 — Elliptic 已完成 (200 OK)
包含所有数据结构的完整 Elliptic 响应:
{
"success": true,
"data": {
"client_order_id": "A019540900E55CA",
"status": "completed",
"address": "T...example...",
"provider": "elliptic",
"report_language": "en",
"risk_score": 0.802904,
"risk_level": "low",
"is_sanctioned": true,
"created_at": "2026-03-10 15:56:28",
"completed_at": "2026-03-10 15:56:28",
"result": {
"risk_score": 0.802904473154148,
"risk_score_detail": {
"source": 0.233206,
"destination": 0.802904
},
"contributions": {
"source": [
{
"entities": [
{
"name": "Capitalist",
"is_vasp": true,
"actor_id": 53979,
"category": "Payment Services Provider",
"entity_id": "b73a9c87-...",
"category_id": "54f55bfe-...",
"is_primary_entity": true
}
],
"indirect_value": { "usd": 40194.03 },
"contribution_value": { "usd": 40194.03 },
"counterparty_value": { "usd": 0 },
"min_number_of_hops": 2,
"indirect_percentage": 31.57,
"is_screened_address": false,
"contribution_percentage": 31.57,
"counterparty_percentage": 0
},
{
"entities": [
{
"name": "KuCoin",
"is_vasp": true,
"actor_id": 11620,
"category": "Exchange",
"entity_id": "e54292da-...",
"category_id": "0a52f7a2-...",
"is_primary_entity": true
}
],
"indirect_value": { "usd": 28436.45 },
"contribution_value": { "usd": 29434.17 },
"counterparty_value": { "usd": 997.72 },
"min_number_of_hops": 1,
"indirect_percentage": 22.34,
"is_screened_address": false,
"contribution_percentage": 23.12,
"counterparty_percentage": 0.78
}
],
"destination": [
{
"entities": [
{
"name": "Bybit",
"is_vasp": true,
"actor_id": 23354,
"category": "Exchange",
"entity_id": "bddde8b7-...",
"category_id": "0a52f7a2-...",
"is_primary_entity": true
}
],
"indirect_value": { "usd": 26333.43 },
"contribution_value": { "usd": 27458.30 },
"counterparty_value": { "usd": 1124.86 },
"min_number_of_hops": 1,
"indirect_percentage": 20.69,
"is_screened_address": false,
"contribution_percentage": 21.57,
"counterparty_percentage": 0.88
}
]
},
"cluster_entities": [
{
"name": "Unknown",
"is_vasp": null,
"actor_id": -4,
"category": "Unknown",
"entity_id": "00000000-...",
"category_id": "00000000-...",
"is_primary_entity": true,
"is_after_sanction_date": false
}
],
"evaluation_detail": {
"source": [
{
"rule_id": "6c2dcb03-...",
"rule_name": "Obfuscating & Misc.",
"rule_type": "exposure",
"risk_score": 0.2332,
"matched_elements": [
{
"category": "Coin Swap Service",
"category_id": "ff85b715-...",
"contributions": [
{
"entity": "FixedFloat",
"risk_triggers": {
"category": "Coin Swap Service",
"category_id": "ff85b715-..."
},
"indirect_value": { "usd": 2891.09, "native": 0, "native_major": 0 },
"contribution_value": { "usd": 2968.66, "native": 0, "native_major": 0 },
"counterparty_value": { "usd": 77.58, "native": 0, "native_major": 0 },
"min_number_of_hops": 1,
"indirect_percentage": 2.27,
"is_screened_address": false,
"contribution_percentage": 2.33,
"counterparty_percentage": 0.06
}
],
"indirect_value": { "usd": 2891.09, "native": 0, "native_major": 0 },
"contribution_value": { "usd": 2968.66, "native": 0, "native_major": 0 },
"counterparty_value": { "usd": 0, "native": 0, "native_major": 0 },
"indirect_percentage": 100,
"contribution_percentage": 2.33,
"counterparty_percentage": 0
}
],
"matched_behaviors": []
},
{
"rule_id": "0a2b68fd-...",
"rule_name": "Illicit Activity",
"rule_type": "exposure",
"risk_score": 0.0026,
"matched_elements": [
{
"category": "Token Blacklisting",
"category_id": "94b50de8-...",
"contributions": [
{
"entity": "Tether USD",
"risk_triggers": {
"category": "Token Blacklisting",
"category_id": "94b50de8-..."
},
"contribution_value": { "usd": 1022.45, "native": 0, "native_major": 0 },
"min_number_of_hops": 3,
"contribution_percentage": 0.08
}
]
}
],
"matched_behaviors": []
},
{
"rule_id": "df59fab5-...",
"rule_name": "Sanctions",
"rule_type": "exposure",
"risk_score": 0.0024,
"matched_elements": [
{
"category": "Sanctioned Entity",
"category_id": "c1648b7a-...",
"contributions": [
{
"entity": "Garantex",
"risk_triggers": {
"category": "Sanctioned Entity",
"category_id": "c1648b7a-..."
},
"contribution_value": { "usd": 863.21, "native": 0, "native_major": 0 },
"min_number_of_hops": 3,
"contribution_percentage": 0.07
}
]
}
],
"matched_behaviors": []
}
],
"destination": []
},
"detected_behaviors": []
},
"sanctions": {
"self": false,
"self_entities": null,
"exposure": {
"share": 8.029045,
"proximity": "mixed",
"hops": 1,
"entity": "Garantex Europe OU - OFAC SDN - 5 Apr 2022",
"category": "OFAC Sanctioned Entity",
"direction": "destination",
"rule_name": "Sanctioned, TF & CSAM"
},
"items": [
{
"entity": "Garantex Europe OU - OFAC SDN - 5 Apr 2022",
"category": "OFAC Sanctioned Entity",
"share": 8.02904473154148,
"counterparty_share": 2.472410320321629,
"indirect_share": 5.556634411219852,
"hops": 1,
"proximity": "mixed",
"is_sanctioned": true,
"trigger": "sanctions_list",
"value_usd": 7494.407584232807,
"direction": "destination",
"rule_name": "Sanctioned, TF & CSAM"
}
]
}
},
"timestamp": "2026-03-10 15:56:28"
}响应字段
| 字段 | 类型 | 描述 |
|---|---|---|
| data.client_order_id | string | 用于状态轮询的唯一订单 ID |
| data.status | string | pending、processing、completed、failed、skipped |
| data.risk_score | number | null | 风险评分。Elliptic:0-10。null = 无触发项 |
| data.risk_level | string | null | none、low、medium、high 或 severe。Elliptic 返回 low、medium、high;BitOK 额外包含 none 和 severe。当提供商未检测到任何触发项时为 null |
| data.is_sanctioned | boolean | 若检测到制裁实体敞口则为 true。自端点上线以来保持不变:其不区分受制裁地址与仅关联受制裁实体的地址 — 具体请参阅 data.sanctions |
| data.sanctions | object | null | 制裁检测结果的细分:地址本身是否在名单中、关联紧密程度以及敞口大小。参见制裁 |
| data.result | object | 完整的提供商响应(当 response_format=full 时) |
制裁
is_sanctioned 是一个单独的布尔值,并在两种截然不同的情况下显示为 true:被筛查地址本身处于制裁名单中,以及被筛查地址曾通过两个中间节点接收过来自受制裁方的极小份额资金。该标识为保持向后兼容性而保留了其原始含义;data.sanctions 则用于区分这两种情况。
| 字段 | 类型 | 描述 |
|---|---|---|
| sanctions.self | boolean | 当被筛查地址本身是受制裁实体时为 true |
| sanctions.self_entities | array | null | 当 self 为 true 时,其自身所属受制裁实体的名称 |
| sanctions.exposure | object | null | 单个最大的制裁关联 — 用于在摘要中展示 |
| sanctions.exposure.share | number | 涉及资金的比例,以百分比表示(8.03 表示 8.03%) |
| sanctions.exposure.proximity | string | screened_address、counterparty、indirect 或 mixed |
| sanctions.exposure.hops | number | null | 到受制裁实体的最小交易跳数 |
| sanctions.exposure.entity | string | null | 受制裁实体名称,包括名单及日期 |
| sanctions.exposure.direction | string | null | 流入资金为 source,流出资金为 destination |
| sanctions.items | array | 所有制裁贡献项,按份额从大到小排序,包含与 exposure 相同的字段,并附带 counterparty_share、indirect_share、value_usd 和 trigger |
| sanctions.related | array | null | 仅限 BitOK:受到欧盟或英国制裁的交易所敞口,独立于制裁名单本身 |
Proximity 对应 Elliptic 报告中的 Closest Proximity 列:
| 值 | 含义 |
|---|---|
screened_address | 被筛查地址本身即为触发项,而非交易对手方 |
counterparty | 被筛查地址的直接交易对手方 |
indirect | 通过中间节点到达 — 参见 hops |
mixed | 与同一实体同时存在直接与间接资金流动 |
仅当提供商明确标记时,该贡献项才算作制裁关联 — Elliptic 为 risk_triggers.is_sanctioned,BitOK 为 sanctions 类别。名为 Sanctioned, TF & CSAM 的 Elliptic 规则在国家及类别触发项下也会被触发,因此仅凭规则名称无法构成制裁判定结论。
Elliptic result 对象
| 字段 | 类型 | 描述 |
|---|---|---|
| risk_score | number | 精确风险评分 (0-10) |
| risk_score_detail | object | 细分:source 和 destination 评分 |
| contributions | object | 资金流贡献方的 source 和 destination 数组 |
| contributions[].entities | array | 与该贡献关联的已知实体 |
| contributions[].entities[].name | string | 实体名称(例如 "Binance"、"KuCoin") |
| contributions[].entities[].category | string | 实体类型(例如 "Exchange"、"Payment Services Provider") |
| contributions[].entities[].is_vasp | boolean | null | 该实体是否为虚拟资产服务提供商 (VASP) |
| contributions[].contribution_value.usd | number | 该贡献项的总 USD 交易量 |
| contributions[].contribution_percentage | number | 来自该实体的资金占总资金的百分比 |
| contributions[].indirect_value.usd | number | 间接接收的 USD 交易量(通过中间节点) |
| contributions[].indirect_percentage | number | 间接接收的资金百分比 |
| contributions[].counterparty_value.usd | number | 作为直接交易对手方的 USD 交易量 |
| contributions[].counterparty_percentage | number | 作为直接交易对手方的百分比 |
| contributions[].min_number_of_hops | number | 距该实体的最小交易跳数(0 = 直接) |
| contributions[].is_screened_address | boolean | 若此项为被筛查地址本身则为 true |
| cluster_entities | array | 与该地址聚类直接关联的已知实体 |
| cluster_entities[].name | string | 实体名称 |
| cluster_entities[].category | string | 实体类别 |
| cluster_entities[].is_vasp | boolean | null | VASP 状态 |
| cluster_entities[].is_after_sanction_date | boolean | 若活动发生在实体受到制裁之后则为 true |
| evaluation_detail | object | 已触发风险规则的 source 和 destination 数组 |
| evaluation_detail[].rule_name | string | 规则名称(例如 "Sanctions"、"Illicit Activity"、"Obfuscating & Misc.") |
| evaluation_detail[].rule_type | string | 规则类型(例如 "exposure") |
| evaluation_detail[].risk_score | number | 来自该规则的风险评分贡献 |
| evaluation_detail[].matched_elements | array | 触发该规则的类别和实体 |
| evaluation_detail[].matched_elements[].category | string | 风险类别(例如 "Sanctioned Entity"、"Gambling"、"Token Blacklisting") |
| evaluation_detail[].matched_elements[].contributions | array | 匹配类别内的实体 |
| evaluation_detail[].matched_elements[].contributions[].entity | string | 实体名称 |
| evaluation_detail[].matched_elements[].contributions[].contribution_percentage | number | 敞口百分比 |
| evaluation_detail[].matched_elements[].contributions[].min_number_of_hops | number | 交易跳数 |
| evaluation_detail[].matched_elements[].contributions[].is_screened_address | boolean | 当被筛查地址本身触发该规则时为 true |
| evaluation_detail[].matched_elements[].contributions[].risk_triggers | object | 规则触发原因:is_sanctioned 对应制裁名单,country 对应司法管辖区,category 对应实体类型 |
| evaluation_detail[].matched_behaviors | array | 检测到的行为模式 |
| detected_behaviors | array | 在该地址上检测到的全局行为模式 |
风险等级
Elliptic(0-10 范围):
| 范围 | 等级 | 描述 |
|---|---|---|
| 0 — 3 | low | 极低风险。无显著敞口 |
| 3 — 7 | medium | 中等风险。检测到部分风险类别 |
| 7 — 10 | high | 高风险。受制裁、非法或高风险实体 |
| null | - | 未检测到风险触发项 |
BitOK(0-1 范围): 提供商直接返回等级本身 — none、low、medium、high 或 severe。
risk_level 是全平台通用的唯一判定指标:API 响应、控制面板和 PDF 报告针对同一项检查均显示完全相同的词。
错误响应
认证错误 (401)
{
"detail": {
"code": -1,
"msg": "API key not provided"
}
}验证错误 (400)
{
"success": false,
"error": {
"code": 4001,
"msg": "Invalid or missing address"
}
}{
"success": false,
"error": {
"code": 4002,
"msg": "Invalid provider. Use: elliptic"
}
}余额不足 (402)
{
"success": false,
"error": {
"code": 4020,
"message": "Insufficient balance"
},
"timestamp": "2026-03-10 10:00:00"
}提供商不可用 (503)
{
"success": false,
"error": {
"code": 5030,
"message": "Provider elliptic not available"
},
"timestamp": "2026-03-10 10:00:00"
}错误代码参考
| 代码 | 描述 | HTTP 状态 |
|---|---|---|
-1 | 认证失败 | 401 |
4001 | 地址无效或缺失 | 400 |
4002 | 提供商无效 | 400 |
4020 | 余额不足 | 402 |
5030 | 提供商不可用 | 503 |
速率限制
以下速率限制适用于所有 AML 端点(按 IP 地址):
| 周期 | 限制 | 描述 |
|---|---|---|
| 1 秒 | 2 次请求 | 每秒最多 2 次请求 |
| 1 分钟 | 30 次请求 | 每分钟最多 30 次请求 |
超过速率限制 (429)
{
"message": "API rate limit exceeded"
}结果缓存
若在过去 60 秒 内检查过相同的“地址 + 提供商”组合,系统将返回缓存的结果且不收取费用。
支持的网络
network 参数为必填项。请使用下表中的代号。
Elliptic — 全面筛查
筛查针对特定网络上的特定地址执行。但是,Elliptic 会追踪与该地址关联的所有资产 — 包括代币、跨链转账以及在其他网络上与已知实体的交互。
| 网络 | 代号 | 原生资产 |
|---|---|---|
| Algorand | algo | ALGO |
| Aptos | apt | APT |
| Arbitrum | arb | ETH |
| Avalanche (C-Chain) | avax | AVAX |
| Base | base | ETH |
| Binance Chain | bnb | BNB |
| Binance Smart Chain | bsc | BNB |
| Bitcoin | btc | BTC |
| Bittensor | tao | TAO |
| Cardano | ada | ADA |
| Celo | celo | CELO |
| Cosmos | atom | ATOM |
| Crypto.com | cro | CRO |
| Dogecoin | doge | DOGE |
| dYdX | dydx | DYDX |
| Ethereum | eth | ETH |
| Ethereum Classic | etc | ETC |
| Fantom | ftm | FTM |
| Filecoin | fil | FIL |
| Flare | flr | FLR |
| Gnosis | gnosis | xDai |
| Hedera | hbar | HBAR |
| HyperEVM | hype | HYPE |
| Injective | inj | INJ |
| Internet Computer | icp | ICP |
| Linea | linea | LINEA |
| Litecoin | ltc | LTC |
| MobileCoin | mob | MOB |
| Near | near | NEAR |
| Optimism | op | ETH |
| Polkadot | dot | DOT |
| Polygon | matic | MATIC |
| Ripple | xrp | XRP |
| Sei | sei | SEI |
| Solana | sol | SOL |
| Starknet | strk | STRK |
| Stellar | xlm | XLM |
| Sui | sui | SUI |
| Tezos | xtz | XTZ |
| TON | ton | TON |
| Tron | trx | TRX |
| XDC | xdc | XDC |
| XLayer | okb | OKB |
| Zilliqa | zil | ZIL |
| zkSync | zksync | ETH |
单资产筛查
这些网络支持针对单个地址/交易的筛查:
| 网络 | 代号 | 原生资产 |
|---|---|---|
| Bitcoin Cash | bch | BCH |
| Horizen | zen | ZEN |
| ZCash | zec | ZEC |
提供商与网络兼容性
当使用 provider: "elliptic" 时 — 全面筛查和单资产表格中的所有网络均可用(47 个网络)。 如果传入了不支持的网络,API 将返回错误代码 4001。
说明
- 定价:Elliptic — 每次检查 0.98 美元。价格按当前汇率以 TRX 显示
- 同步超时:
wait: true最多等待 15 秒。若检查耗时更长,则返回pending状态 - 处理时间:大多数检查在数秒内完成。然而,某些请求(特别是交易历史复杂的地址)可能需要长达 3 分钟 才能处理完毕。对于此类情况,请使用异步模式(省略
wait或设置wait: false),并通过 GET /apiv2/aml/{order_id} 进行轮询 - 非活跃地址:无链上活动的地址将返回
skipped状态,不收取费用