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

POST /apiv2/aml

Substituído por POST /apiv2/screening

POST /apiv2/screening é o contrato da versão 2: um único formato de resposta para cada provedor e cada estado do pedido, números decimais como strings em vez de números JSON, participações em uma única escala e um formato de erro unificado. Este endpoint continua funcionando e não será descontinuado sem aviso prévio.

Envie um endereço para triagem de AML (Anti-Money Laundering / Prevenção à Lavagem de Dinheiro). Retorna pontuação de risco, nível de risco e análise detalhada de exposição.

Todos os timestamps na resposta estão em UTC. O formato da string permanece inalterado — "2026-09-09 23:01:44", sem sufixo de fuso horário.

URL do endpoint

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

Cabeçalhos da requisição

HeaderObrigatórioDescrição
Content-TypeSimapplication/json
X-API-KEYSimSua chave de API do painel da Netts

Corpo da requisição

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

Parâmetros

ParâmetroTipoObrigatórioDescrição
addressstringSimEndereço de blockchain a ser verificado (10-100 caracteres)
networkstringSimIdentificador da rede blockchain (consulte Redes Suportadas abaixo)
providerstringNãoProvedor de AML: elliptic (padrão)
waitbooleanNãoSe true, aguarda o resultado de forma síncrona (até 15 segundos). Se false ou omitido, retorna imediatamente com o status pending e client_order_id — use-o para consultar o resultado via GET /apiv2/aml/{order_id}
response_formatstringNãoNível de detalhe da resposta: rate (apenas pontuação), full (padrão, dados completos)
report_languagestringNãoIdioma do relatório: en (padrão)

Provedores

ProvedorFaixa de PontuaçãoDescrição
elliptic0 — 10Pontuação de risco da Elliptic. 0 = nenhum risco, 10 = risco máximo. null = nenhum gatilho detectado

Exemplos de Requisições

cURL (síncrono)

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 (assíncrono)

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}")

Resposta

Sucesso — Pendente (200 OK)

Quando wait não está definido ou a verificação ainda está em processamento:

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"
}

Sucesso — Elliptic Concluído (200 OK)

Resposta completa da Elliptic com todas as estruturas de dados:

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"
}

Campos da Resposta

CampoTipoDescrição
data.client_order_idstringID exclusivo do pedido para consulta de status
data.statusstringpending, processing, completed, failed, skipped
data.risk_scorenumber | nullPontuação de risco. Elliptic: 0-10. null = sem gatilhos
data.risk_levelstring | nullnone, low, medium, high ou severe. A Elliptic retorna low, medium, high; a BitOK adiciona none e severe. null quando o provedor não detectou nenhum gatilho
data.is_sanctionedbooleantrue se foi detectada exposição a entidades sancionadas. Inalterado desde o lançamento do endpoint: não distingue um endereço sancionado de um endereço apenas vinculado a um — consulte data.sanctions para isso
data.sanctionsobject | nullDetalhamento do resultado de sanções: se o próprio endereço está listado, quão próximo é o vínculo e sua magnitude. Consulte Sanções
data.resultobjectResposta completa do provedor (quando response_format=full)

Sanções

is_sanctioned é um único booleano e retorna true em duas situações muito distintas: o próprio endereço analisado está em uma lista de sanções, ou o endereço analisado recebeu uma fração de porcentagem por meio de dois intermediários de alguém que está. A flag mantém seu significado original para compatibilidade retroativa; data.sanctions diferencia os dois casos.

CampoTipoDescrição
sanctions.selfbooleantrue quando o próprio endereço analisado é a entidade sancionada
sanctions.self_entitiesarray | nullNomes de suas próprias entidades sancionadas, quando self for true
sanctions.exposureobject | nullO maior vínculo individual com sanções — o que deve ser exibido em um resumo
sanctions.exposure.sharenumberParcela de fundos envolvida, em porcentagem (8.03 significa 8,03%)
sanctions.exposure.proximitystringscreened_address, counterparty, indirect ou mixed
sanctions.exposure.hopsnumber | nullNúmero mínimo de saltos de transação até a entidade sancionada
sanctions.exposure.entitystring | nullNome da entidade sancionada, incluindo a lista e a data
sanctions.exposure.directionstring | nullsource para fundos recebidos, destination para enviados
sanctions.itemsarrayCada contribuição de sanções, maior parcela primeiro, mesmos campos de exposure mais counterparty_share, indirect_share, value_usd e trigger
sanctions.relatedarray | nullApenas BitOK: exposição a exchanges sob sanções da UE ou do Reino Unido, mantida separada da própria lista de sanções

Proximidade reflete a coluna Closest Proximity de um relatório da Elliptic:

ValorSignificado
screened_addressO endereço analisado é o próprio gatilho, não uma contraparte
counterpartyContraparte direta do endereço analisado
indirectAtingido por meio de intermediários — consulte hops
mixedFluxos diretos e indiretos para a mesma entidade

Uma contribuição conta como um vínculo de sanções apenas quando o provedor a marca como tal — risk_triggers.is_sanctioned para a Elliptic, a categoria sanctions para a BitOK. A regra da Elliptic denominada Sanctioned, TF & CSAM também é acionada por gatilhos de país e categoria, portanto o nome da regra por si só não constitui um veredito de sanções.

Objeto result da Elliptic

CampoTipoDescrição
risk_scorenumberPontuação de risco precisa (0-10)
risk_score_detailobjectDetalhamento: pontuações de source e destination
contributionsobjectArrays source e destination dos contribuidores do fluxo de fundos
contributions[].entitiesarrayEntidades conhecidas associadas à contribuição
contributions[].entities[].namestringNome da entidade (ex.: "Binance", "KuCoin")
contributions[].entities[].categorystringTipo de entidade (ex.: "Exchange", "Payment Services Provider")
contributions[].entities[].is_vaspboolean | nullSe a entidade é um Provedor de Serviços de Ativos Virtuais (VASP)
contributions[].contribution_value.usdnumberVolume total em USD da contribuição
contributions[].contribution_percentagenumberPorcentagem do total de fundos provenientes desta entidade
contributions[].indirect_value.usdnumberVolume em USD recebido indiretamente (via intermediários)
contributions[].indirect_percentagenumberPorcentagem de fundos recebidos indiretamente
contributions[].counterparty_value.usdnumberVolume em USD como contraparte direta
contributions[].counterparty_percentagenumberPorcentagem como contraparte direta
contributions[].min_number_of_hopsnumberNúmero mínimo de saltos de transação a partir da entidade (0 = direto)
contributions[].is_screened_addressbooleantrue se este for o próprio endereço analisado
cluster_entitiesarrayEntidades conhecidas diretamente associadas ao cluster de endereços
cluster_entities[].namestringNome da entidade
cluster_entities[].categorystringCategoria da entidade
cluster_entities[].is_vaspboolean | nullStatus de VASP
cluster_entities[].is_after_sanction_datebooleantrue se a atividade ocorreu após a entidade ser sancionada
evaluation_detailobjectArrays source e destination de regras de risco acionadas
evaluation_detail[].rule_namestringNome da regra (ex.: "Sanctions", "Illicit Activity", "Obfuscating & Misc.")
evaluation_detail[].rule_typestringTipo de regra (ex.: "exposure")
evaluation_detail[].risk_scorenumberContribuição para a pontuação de risco proveniente desta regra
evaluation_detail[].matched_elementsarrayCategorias e entidades que acionaram a regra
evaluation_detail[].matched_elements[].categorystringCategoria de risco (ex.: "Sanctioned Entity", "Gambling", "Token Blacklisting")
evaluation_detail[].matched_elements[].contributionsarrayEntidades dentro da categoria correspondente
evaluation_detail[].matched_elements[].contributions[].entitystringNome da entidade
evaluation_detail[].matched_elements[].contributions[].contribution_percentagenumberPorcentagem de exposição
evaluation_detail[].matched_elements[].contributions[].min_number_of_hopsnumberSaltos de transação
evaluation_detail[].matched_elements[].contributions[].is_screened_addressbooleantrue quando o próprio endereço analisado acionou a regra
evaluation_detail[].matched_elements[].contributions[].risk_triggersobjectPor que a regra foi acionada: is_sanctioned para uma lista de sanções, country para uma jurisdição, category para um tipo de entidade
evaluation_detail[].matched_behaviorsarrayPadrões comportamentais detectados
detected_behaviorsarrayPadrões comportamentais globais detectados no endereço

Níveis de Risco

Elliptic (escala de 0-10):

FaixaNívelDescrição
0 — 3lowRisco mínimo. Nenhuma exposição significativa
3 — 7mediumRisco moderado. Algumas categorias arriscadas detectadas
7 — 10highRisco alto. Entidades sancionadas, ilícitas ou de alto risco
null-Nenhum gatilho de risco detectado

BitOK (escala de 0-1): o próprio provedor retorna o nível — none, low, medium, high ou severe.

risk_level é o veredito único utilizado em todos os lugares: a resposta da API, o painel e o relatório em PDF exibem a mesma palavra para a mesma verificação.

Respostas de erro

Erro de Autenticação (401)

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

Erro de Validação (400)

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

Saldo Insuficiente (402)

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

Provedor Indisponível (503)

json
{
    "success": false,
    "error": {
        "code": 5030,
        "message": "Provider elliptic not available"
    },
    "timestamp": "2026-03-10 10:00:00"
}

Referência de Códigos de Erro

CódigoDescriçãoHTTP Status
-1Falha na autenticação401
4001Endereço inválido ou ausente400
4002Provedor inválido400
4020Saldo insuficiente402
5030Provedor indisponível503

Limites de taxa

Os seguintes limites de taxa se aplicam a todos os endpoints de AML (por endereço IP):

PeríodoLimiteDescrição
1 segundo2 requisiçõesMáximo de 2 requisições por segundo
1 minuto30 requisiçõesMáximo de 30 requisições por minuto

Limite de Taxa Excedido (429)

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

Cache de Resultados

Se a mesma combinação de endereço + provedor tiver sido verificada nos últimos 60 segundos, o resultado em cache será retornado sem cobrança.

Redes Suportadas

O parâmetro network é obrigatório. Use o ticker da tabela abaixo.

Elliptic — Triagem Holística

A triagem é realizada para um endereço específico em uma rede específica. No entanto, a Elliptic rastreia todos os ativos associados a esse endereço — incluindo tokens, transferências entre blockchains (cross-chain) e interações com entidades conhecidas em outras redes.

RedeTickerAtivo Nativo
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

Triagem de Ativo Único

Estas redes suportam triagem individual de endereço/transação:

RedeTickerAtivo Nativo
Bitcoin CashbchBCH
HorizenzenZEN
ZCashzecZEC

Compatibilidade de Provedor e Rede

Ao usar provider: "elliptic" — todas as redes das tabelas Holística e de Ativo Único estão disponíveis (47 redes). Se uma rede não suportada for informada, a API retornará o código de erro 4001.

Notas

  • Preços: Elliptic — $0.98 por verificação. Preços exibidos em TRX na cotação atual
  • Timeout síncrono: wait: true aguarda até 15 segundos. Se a verificação demorar mais, retorna o status pending
  • Tempo de processamento: A maioria das verificações é concluída em poucos segundos. No entanto, algumas requisições (especialmente para endereços com histórico complexo de transações) podem levar até 3 minutos para serem processadas. Nesses casos, use o modo assíncrono (omita wait ou defina wait: false) e faça consultas via GET /apiv2/aml/{order_id}
  • Endereços inativos: Endereços sem atividade na blockchain retornam o status skipped sem cobrança