Skip to content
Translated page. The English version is the source of truth.

POST /apiv2/aml

Заменен на POST /apiv2/screening

POST /apiv2/screening — это контракт версии 2: единая структура ответа для каждого провайдера и любого состояния заказа, десятичные числа в виде строк вместо чисел JSON, доли в единой шкале и единый формат ошибок. Этот эндпоинт продолжает работать и не будет отключен без предупреждения.

Отправить адрес на AML-проверку (Anti-Money Laundering). Возвращает оценку риска, уровень риска и детальный анализ связей.

Все временные метки в ответе указаны в UTC. Формат строки остался прежним — "2026-09-09 23:01:44", без суффикса часового пояса.

URL эндпоинта

POST https://netts.io/apiv2/aml

Заголовки запроса

ЗаголовокОбязательныйОписание
Content-TypeДаapplication/json
X-API-KEYДаВаш API-ключ из панели управления Netts

Тело запроса

json
{
    "address": "YOUR_ADDRESS_HERE",
    "network": "trx",
    "provider": "elliptic",
    "wait": true
}

Параметры

ПараметрТипОбязательныйОписание
addressstringДаБлокчейн-адрес для проверки (10-100 символов)
networkstringДаИдентификатор блокчейн-сети (см. Поддерживаемые сети ниже)
providerstringНетAML-провайдер: elliptic (по умолчанию)
waitbooleanНетЕсли true, ожидать результат синхронно (до 15 секунд). Если false или не указан, сразу возвращает статус pending и client_order_id — используйте его для периодического запроса результата через GET /apiv2/aml/{order_id}
response_formatstringНетУровень детализации ответа: rate (только оценка), full (по умолчанию, полные данные)
report_languagestringНетЯзык отчета: en (по умолчанию)

Провайдеры

ПровайдерДиапазон оценокОписание
elliptic0 — 10Оценка риска Elliptic. 0 = нет риска, 10 = максимальный риск. null = триггеры не обнаружены

Примеры запросов

cURL (синхронный)

bash
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 (асинхронный)

bash
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

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 не задан или проверка еще выполняется:

json
{
    "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 со всеми структурами данных:

json
{
    "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_idstringУникальный ID заказа для опроса статуса
data.statusstringpending, processing, completed, failed, skipped
data.risk_scorenumber | nullОценка риска. Elliptic: 0-10. null = нет триггеров
data.risk_levelstring | nullnone, low, medium, high или severe. Elliptic возвращает low, medium, high; BitOK добавляет none и severe. null, если провайдер не обнаружил никаких триггеров
data.is_sanctionedbooleantrue, если обнаружена связь с подсанкционными субъектами. Не менялось с момента запуска эндпоинта: не разделяет подсанкционный адрес и адрес, просто связанный с таковым — подробнее см. в data.sanctions
data.sanctionsobject | nullДетализация информации о санкциях: находится ли сам адрес в списках, насколько близка связь и каков ее объем. См. Санкции
data.resultobjectПолный ответ провайдера (при response_format=full)

Санкции

is_sanctioned — это единичный булев флаг, и он возвращает true в двух принципиально разных ситуациях: проверяемый адрес сам находится в санкционном списке, либо проверяемый адрес однажды получил долю процента через двух посредников от лица, находящегося под санкциями. Флаг сохраняет исходное значение для обратной совместимости; data.sanctions позволяет различить эти два случая.

ПолеТипОписание
sanctions.selfbooleantrue, когда проверяемый адрес сам является подсанкционным субъектом
sanctions.self_entitiesarray | nullНазвания собственных подсанкционных субъектов, когда self равен true
sanctions.exposureobject | nullКрупнейшая единичная связь с санкциями — подходит для отображения в сводке
sanctions.exposure.sharenumberДоля задействованных средств в процентах (8.03 означает 8.03%)
sanctions.exposure.proximitystringscreened_address, counterparty, indirect или mixed
sanctions.exposure.hopsnumber | nullМинимальное количество транзакционных шагов (hops) до подсанкционного субъекта
sanctions.exposure.entitystring | nullНазвание подсанкционного субъекта, включая список и дату
sanctions.exposure.directionstring | nullsource для входящих средств, destination для исходящих
sanctions.itemsarrayКаждая санкционная связь, начиная с наибольшей доли, те же поля, что и в exposure, плюс counterparty_share, indirect_share, value_usd и trigger
sanctions.relatedarray | nullТолько для BitOK: связь с биржами под санкциями ЕС или Великобритании, учитывается отдельно от самого санкционного списка

Proximity соответствует столбцу Closest Proximity в отчетах Elliptic:

ЗначениеЗначение
screened_addressПроверяемый адрес сам по себе является триггером, а не контрагентом
counterpartyПрямой контрагент проверяемого адреса
indirectСвязь через посредников — см. hops
mixedКак прямые, так и косвенные потоки к одному и тому же субъекту

Связь учитывается как санкционная только в том случае, если провайдер пометил ее таковой — risk_triggers.is_sanctioned для Elliptic, категория sanctions для BitOK. Правило Elliptic под названием Sanctioned, TF & CSAM также срабатывает на триггеры по странам и категориям, поэтому само по себе название правила не является санкционным вердиктом.

Объект result от Elliptic

ПолеТипОписание
risk_scorenumberТочная оценка риска (0-10)
risk_score_detailobjectДетализация: оценки source и destination
contributionsobjectМассивы source и destination участников движения средств
contributions[].entitiesarrayИзвестные субъекты, связанные с транзакцией
contributions[].entities[].namestringНазвание субъекта (например, "Binance", "KuCoin")
contributions[].entities[].categorystringТип субъекта (например, "Exchange", "Payment Services Provider")
contributions[].entities[].is_vaspboolean | nullЯвляется ли субъект поставщиком услуг виртуальных активов (VASP)
contributions[].contribution_value.usdnumberОбщий объем связи в USD
contributions[].contribution_percentagenumberПроцент от общего объема средств от данного субъекта
contributions[].indirect_value.usdnumberОбъем в USD, полученный косвенно (через посредников)
contributions[].indirect_percentagenumberПроцент средств, полученных косвенно
contributions[].counterparty_value.usdnumberОбъем в USD в качестве прямого контрагента
contributions[].counterparty_percentagenumberПроцент в качестве прямого контрагента
contributions[].min_number_of_hopsnumberМинимальное количество транзакционных шагов от субъекта (0 = напрямую)
contributions[].is_screened_addressbooleantrue, если это сам проверяемый адрес
cluster_entitiesarrayИзвестные субъекты, напрямую связанные с кластером адреса
cluster_entities[].namestringНазвание субъекта
cluster_entities[].categorystringКатегория субъекта
cluster_entities[].is_vaspboolean | nullСтатус VASP
cluster_entities[].is_after_sanction_datebooleantrue, если активность произошла после того, как субъект попал под санкции
evaluation_detailobjectМассивы source и destination сработавших правил риска
evaluation_detail[].rule_namestringНазвание правила (например, "Sanctions", "Illicit Activity", "Obfuscating & Misc.")
evaluation_detail[].rule_typestringТип правила (например, "exposure")
evaluation_detail[].risk_scorenumberВклад данного правила в оценку риска
evaluation_detail[].matched_elementsarrayКатегории и субъекты, вызвавшие срабатывание правила
evaluation_detail[].matched_elements[].categorystringКатегория риска (например, "Sanctioned Entity", "Gambling", "Token Blacklisting")
evaluation_detail[].matched_elements[].contributionsarrayСубъекты в рамках совпавшей категории
evaluation_detail[].matched_elements[].contributions[].entitystringНазвание субъекта
evaluation_detail[].matched_elements[].contributions[].contribution_percentagenumberПроцент связи
evaluation_detail[].matched_elements[].contributions[].min_number_of_hopsnumberТранзакционные шаги
evaluation_detail[].matched_elements[].contributions[].is_screened_addressbooleantrue, если правило сработало на сам проверяемый адрес
evaluation_detail[].matched_elements[].contributions[].risk_triggersobjectПричина срабатывания правила: is_sanctioned для санкционного списка, country для юрисдикции, category для типа субъекта
evaluation_detail[].matched_behaviorsarrayВыявленные паттерны поведения
detected_behaviorsarrayГлобальные паттерны поведения, выявленные для адреса

Уровни риска

Elliptic (шкала 0-10):

ДиапазонУровеньОписание
0 — 3lowМинимальный риск. Нет существенных связей
3 — 7mediumУмеренный риск. Обнаружены некоторые рискованные категории
7 — 10highВысокий риск. Подсанкционные, незаконные или высокорисковые субъекты
null-Триггеры риска не обнаружены

BitOK (шкала 0-1): провайдер сам возвращает уровень — none, low, medium, high или severe.

risk_level — единый вердикт, используемый везде: в ответе API, в панели управления и в PDF-отчете для одной и той же проверки выводится одно и то же слово.

Ответы с ошибками

Ошибка аутентификации (401)

json
{
    "detail": {
        "code": -1,
        "msg": "API key not provided"
    }
}

Ошибка валидации (400)

json
{
    "success": false,
    "error": {
        "code": 4001,
        "msg": "Invalid or missing address"
    }
}
json
{
    "success": false,
    "error": {
        "code": 4002,
        "msg": "Invalid provider. Use: elliptic"
    }
}

Недостаточный баланс (402)

json
{
    "success": false,
    "error": {
        "code": 4020,
        "message": "Insufficient balance"
    },
    "timestamp": "2026-03-10 10:00:00"
}

Провайдер недоступен (503)

json
{
    "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)

json
{
    "message": "API rate limit exceeded"
}

Кэширование результатов

Если та же комбинация адреса и провайдера уже проверялась за последние 60 секунд, возвращается кэшированный результат бесплатно.

Поддерживаемые сети

Параметр network является обязательным. Используйте тикер из таблицы ниже.

Elliptic — Комплексная проверка (Holistic)

Проверка выполняется для определенного адреса в определенной сети. Однако Elliptic отслеживает все активы, связанные с этим адресом, включая токены, кроссчейн-переводы и взаимодействия с известными субъектами в других сетях.

СетьТикерНативный актив
AlgorandalgoALGO
AptosaptAPT
ArbitrumarbETH
Avalanche (C-Chain)avaxAVAX
BasebaseETH
Binance ChainbnbBNB
Binance Smart ChainbscBNB
BitcoinbtcBTC
BittensortaoTAO
CardanoadaADA
CeloceloCELO
CosmosatomATOM
Crypto.comcroCRO
DogecoindogeDOGE
dYdXdydxDYDX
EthereumethETH
Ethereum ClassicetcETC
FantomftmFTM
FilecoinfilFIL
FlareflrFLR
GnosisgnosisxDai
HederahbarHBAR
HyperEVMhypeHYPE
InjectiveinjINJ
Internet ComputericpICP
LinealineaLINEA
LitecoinltcLTC
MobileCoinmobMOB
NearnearNEAR
OptimismopETH
PolkadotdotDOT
PolygonmaticMATIC
RipplexrpXRP
SeiseiSEI
SolanasolSOL
StarknetstrkSTRK
StellarxlmXLM
SuisuiSUI
TezosxtzXTZ
TONtonTON
TrontrxTRX
XDCxdcXDC
XLayerokbOKB
ZilliqazilZIL
zkSynczksyncETH

Проверка отдельных активов

Эти сети поддерживают проверку отдельных адресов/транзакций:

СетьТикерНативный актив
Bitcoin CashbchBCH
HorizenzenZEN
ZCashzecZEC

Совместимость провайдеров и сетей

При использовании provider: "elliptic" доступны все сети из таблиц комплексной проверки и проверки отдельных активов (47 сетей). Если передана неподдерживаемая сеть, API возвращает код ошибки 4001.

Примечания

  • Ценообразование: Elliptic — $0.98 за проверку. Цены отображаются в TRX по текущему курсу
  • Таймаут синхронного запроса: wait: true ожидает до 15 секунд. Если проверка длится дольше, возвращается статус pending
  • Время обработки: Большинство проверок завершаются за несколько секунд. Однако обработка некоторых запросов (особенно для адресов со сложной историей транзакций) может занимать до 3 минут. В таких случаях используйте асинхронный режим (опустите wait или установите wait: false) и запрашивайте результат через GET /apiv2/aml/{order_id}
  • Неактивные адреса: Для адресов без активности в блокчейне возвращается статус skipped без списания средств