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

GET /apiv2/compliance/ ​

Consulta de conformidade aberta e sem chave para um único endereço TRON. Ela retorna um veredito — se o endereço está bloqueado e em qual categoria — fornecido inteiramente a partir de um cache de lista de negação em memória. Sem chave de API, sem saldo, sem cobrança. O objetivo é permitir que qualquer pessoa integre a camada de conformidade com uma única requisição HTTP GET.

O endpoint lê apenas um cache, nunca o banco de dados ou um nó da blockchain, portanto uma consulta leva uma fração de milissegundo. O limite de requisições é aplicado por IP pelo gateway.

URL do endpoint ​

GET https://netts.io/apiv2/compliance/{address}

Nenhum cabeçalho de autenticação é necessário.

Parâmetros da requisição ​

ParâmetroTipoObrigatórioDescrição
addressstringSimEndereço base58 da TRON — T seguido de 33 caracteres

Exemplos de Requisições ​

cURL ​

bash
curl https://netts.io/apiv2/compliance/TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL

Python ​

python
import requests

address = "TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL"
r = requests.get(f"https://netts.io/apiv2/compliance/{address}")
data = r.json()

if r.status_code == 200:
    d = data["data"]
    print(f"blocked : {d['blocked']}")
    print(f"category: {d['category']}")
    if d["category"] == "aml_risk":
        print(f"reason  : {d.get('reason_code')} — {d.get('label')}")
else:
    print(f"Error: {data}")

JavaScript ​

javascript
const address = "TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL";
const res = await fetch(`https://netts.io/apiv2/compliance/${address}`);
const { data } = await res.json();
console.log(data.blocked, data.category, data.label);

Resposta ​

Bloqueado — na lista de negação central (200 OK) ​

json
{
    "code": 0,
    "status": "ok",
    "data": {
        "address": "TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL",
        "blocked": true,
        "category": "aml_risk",
        "severity": "BLOCK",
        "reason_code": "SANCTIONS_SCREENING",
        "label": "DPRK Bitget Exploit - September 2026",
        "subtype": null,
        "subtype_status": "not_found",
        "matches": ["aml_risk"],
        "checks_complete": true,
        "checked_at": "2026-09-27T12:00:00+00:00"
    }
}

Carteira GasFree — um contrato inteligente que pode receber USDT (200 OK) ​

json
{
    "code": 0,
    "status": "ok",
    "data": {
        "address": "TZEMF5vmSABaWjeUPty8kFpUsquMAKhGFp",
        "blocked": true,
        "category": "smart_contract",
        "subtype": "gasfree_wallet",
        "subtype_status": "confirmed",
        "matches": ["smart_contract"],
        "checks_complete": true,
        "checked_at": "2026-10-23T12:00:00+00:00"
    }
}

Contrato excluído — o endereço ainda conta como um contrato inteligente (200 OK) ​

json
{
    "code": 0,
    "status": "ok",
    "data": {
        "address": "TBtrogXC58EAvE7vod56ZnzRY4y5jrwtbN",
        "blocked": true,
        "category": "smart_contract",
        "subtype": "selfdestructed_contract",
        "subtype_status": "confirmed",
        "matches": ["smart_contract"],
        "checks_complete": true,
        "checked_at": "2026-10-23T21:40:00+00:00"
    }
}

Limpo — em nenhum dos conjuntos (200 OK) ​

json
{
    "code": 0,
    "status": "ok",
    "data": {
        "address": "TWaGxHZ9pFCFwUyzKtDsGNb6hEJ7tSjxEC",
        "blocked": false,
        "category": "clean",
        "subtype": null,
        "subtype_status": "not_found",
        "matches": [],
        "checks_complete": true,
        "checked_at": "2026-09-27T12:00:00+00:00"
    }
}

Campos da Resposta ​

CampoTipoDescrição
data.addressstringO endereço que foi verificado
data.blockedbooleantrue se o endereço estiver em qualquer conjunto de bloqueio
data.categorystringaml_risk, usdt_frozen, smart_contract, spam_sender ou clean (veja abaixo); o endpoint em lote também pode retornar invalid ou unavailable
data.severitystringApenas para aml_risk. Ex.: BLOCK, REVIEW
data.reason_codestringApenas para aml_risk. Código de máquina, ex.: SANCTIONS_OFAC_SDN
data.labelstringApenas para aml_risk. Rótulo legível para humanos
data.subtypestring | nullRefina smart_contract. gasfree_wallet — uma carteira GasFree ativa (veja Carteiras GasFree); selfdestructed_contract — o contrato neste endereço foi excluído (veja Contratos excluídos); null caso contrário
data.subtype_statusstringconfirmed — o subtipo é conhecido pelo estado confirmado mais recente; not_found — nenhum dos subtipos se aplica; unavailable — uma lista de subtipos não pôde ser consultada no momento, então subtype é null e não afirma nada
data.matchesstring[]Todos os conjuntos em que o endereço está presente, em ordem de prioridade (ex.: ["usdt_frozen", "smart_contract", "spam_sender"]). category é apenas o primeiro deles
data.checks_completebooleantrue se todos os quatro conjuntos estavam carregados e atualizados no momento da consulta. false significa que uma resposta clean se baseia em uma verificação incompleta
data.checked_atstringTimestamp UTC ISO-8601 da consulta

Categorias ​

category é um veredito, não uma pontuação de risco. Quando um endereço está em mais de um conjunto, a categoria mais grave prevalece, nesta ordem (todas elas são listadas em matches):

CategoriablockedSignificado
aml_risktrueNa lista de negação central: sanções, golpes, ransomware, ativos roubados, fraude, conclusões de autoridades policiais ou de abuso interno. Um motivo com curadoria é anexado
usdt_frozentrueO endereço foi congelado pelo emissor do USDT (Tether). Ele não pode movimentar USDT, portanto a delegação de recursos para ele é recusada
smart_contracttrueUm endereço de contrato inteligente conhecido, incluindo contratos excluídos posteriormente. Veja a nota abaixo
spam_sendertrueRemetente confirmado de spam em massa
cleanfalseEm nenhum dos conjuntos
unavailablenullA lista de negação central não pôde ser consultada, portanto o endereço não está confirmado como limpo nem como bloqueado. Apenas em lote; o endpoint de endereço único retorna 503 com code 5004 em vez disso. Veja Lista de negação central indisponível

Contratos inteligentes são bloqueados por um motivo técnico, não de AML

Um veredito smart_contract significa que o endereço pertence a um contrato, não a uma carteira de usuário, portanto a Energy não é delegada a ele e o endereço é recusado antes mesmo de um pedido ser realizado. O conjunto contém todos os endereços onde um contrato foi criado com sucesso, incluindo contratos que foram excluídos posteriormente — um contrato excluído não transforma seu endereço em uma carteira de usuário. Isso não significa que o contrato esteja comprometido, contaminado ou seja de alto risco sob AML. A maioria dos contratos neste conjunto é perfeitamente comum. Trate smart_contract como "não é um destino para delegação", não como um alerta de risco.

Carteiras GasFree ​

Uma carteira GasFree é um contrato que permite ao seu proprietário receber e enviar tokens e pagar a taxa de rede nesses mesmos tokens. Cada uma é criada pelo controlador GasFree TFFAMQLZybALaLb4uxHA9RBE7pxhUAjF3U. Esse endereço é reportado como category: "smart_contract" com subtype: "gasfree_wallet".

A diferença é importante ao rotear fundos:

Contrato inteligente comumCarteira GasFree
Enviar USDT para elenão é um destinatário normalsim — é a carteira de um usuário
Delegar Energy para elenãonão — não delegamos Energy para carteiras GasFree
category / subtypesmart_contract / nullsmart_contract / gasfree_wallet

Cobertura e advertências:

  • Apenas carteiras implantadas são conhecidas. Um endereço GasFree que recebeu USDT, mas nunca enviou nada, ainda não foi implantado, portanto não está em nenhum conjunto e retorna como clean.
  • O subtipo descreve onde o endereço pode receber fundos. Ele não diz nada sobre transferências originadas de uma carteira GasFree; faça a triagem do endereço remetente separadamente.
  • subtype_status: "unavailable" significa que a lista GasFree não pôde ser consultada. O restante do veredito (blocked, category, matches) continua válido.
  • O próprio controlador e outros contratos não são carteiras GasFree: eles retornam com subtype: null.

Contratos excluídos ​

Um contrato pode excluir a si mesmo (autodestruição). O endereço permanece no conjunto smart_contract: ele era um endereço de contrato, não uma carteira de usuário, e a Netts não delega recursos nem envia pagamentos para ele. Esse endereço é reportado como category: "smart_contract" com subtype: "selfdestructed_contract".

  • confirmed significa excluído de acordo com o estado mais recente confirmado por um nó TRON. Não é uma garantia sobre o futuro: um contrato pode ser implantado novamente no mesmo endereço e, então, o subtipo é removido enquanto o endereço continua como smart_contract.
  • Uma chamada de autodestruição por si só não significa exclusão: na TRON, um contrato criado em uma transação anterior mantém seu código após ela. Apenas o estado do nó conta.
  • Se um endereço for tanto um contrato excluído quanto estiver em uma lista GasFree, selfdestructed_contract prevalece — o endereço não é reportado como uma carteira GasFree funcional.
  • subtype_status: "unavailable" significa que a lista de contratos excluídos não pôde ser consultada; o restante do veredito continua válido e nenhum endereço é confirmado como uma carteira GasFree até que ela possa ser consultada novamente.

Códigos de motivo e o provedor de dados ​

Para aml_risk, o reason_code e o label descrevem por que o endereço está listado. Autoridades públicas de sanções são mantidas como estão — SANCTIONS_OFAC_SDN, SANCTIONS_EU_FSF, SANCTIONS_UK_FCDO e assim por diante. O nome do provedor comercial de triagem por trás de uma conclusão nunca é exposto: esses códigos são normalizados para SANCTIONS_SCREENING, e qualquer nome de provedor é removido de label.

Tamanho da lista de negação ​

GET https://netts.io/apiv2/compliance/stats

Tamanhos agregados dos conjuntos por trás do veredito, a partir do mesmo cache. Aberto e sem chave.

json
{
    "code": 0,
    "status": "ok",
    "data": {
        "aml_risk": 1079,
        "usdt_frozen": 8022,
        "smart_contract": 7581686,
        "spam_sender": 27039018,
        "gasfree_wallets_subset": 512487,
        "selfdestructed_contracts_subset": 4065766,
        "total": 34629805,
        "revision": 1117,
        "checked_at": "2026-10-23T21:40:00+00:00"
    }
}

smart_contract é a maior parte neutra em AML do total — veja a nota sobre contratos acima. gasfree_wallets_subset (carteiras GasFree ativas) e selfdestructed_contracts_subset (contratos excluídos) são partes de smart_contract; eles não são somados ao total. Se um desses dois contadores não puder ser lido no momento, ele será null e os outros números ainda serão retornados.

Consulta em lote (chave de API) ​

Para verificar muitos endereços de uma só vez, use o endpoint em lote autenticado. Ele existe para economizar viagens de ida e volta na rede: uma única requisição e um único pipeline interno em vez de N GETs separados. Um único endereço é apenas um array de um elemento.

POST https://netts.io/apiv2/compliance/batch
x-api-key: YOUR_KEY
Content-Type: application/json

{ "addresses": ["TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL", "TWaGxHZ9pFCFwUyzKtDsGNb6hEJ7tSjxEC"] }

Até 1000 endereços por requisição. Os vereditos retornam na mesma ordem, cada um com os mesmos campos da resposta de endereço único (incluindo subtype, subtype_status, matches e checks_complete), além de category: "invalid" (com um campo error) para qualquer entrada malformada — uma entrada inválida não falha o lote inteiro. Se a lista de negação central não estiver carregada, um endereço que de outra forma estaria limpo retorna como category: "unavailable" (blocked: null, com um campo error) em vez de clean — veja Lista de negação central indisponível.

json
{
    "code": 0,
    "status": "ok",
    "data": {
        "count": 2,
        "checked_at": "2026-09-27T12:00:00+00:00",
        "results": [
            { "address": "TTVUvAWUZafeHqQP82sYnfk4jNFPEHCRpL", "blocked": true, "category": "aml_risk", "subtype": null, "subtype_status": "not_found", "matches": ["aml_risk"], "checks_complete": true, "severity": "BLOCK", "reason_code": "SANCTIONS_SCREENING", "label": "DPRK Bitget Exploit - September 2026" },
            { "address": "TWaGxHZ9pFCFwUyzKtDsGNb6hEJ7tSjxEC", "blocked": false, "category": "clean", "subtype": null, "subtype_status": "not_found", "matches": [], "checks_complete": true }
        ]
    }
}

O endpoint em lote requer uma chave de API (cabeçalho x-api-key) e a chave pode opcionalmente ser vinculada a uma lista de permissões de IP. Entre em contato conosco para obter uma chave.

Seu limite de requisições é por chave e mais alto do que o endpoint público de endereço único:

PeríodoLimite
1 segundo200 requisições
1 minuto12.000 requisições

Cada requisição pode conter até 1000 endereços, de modo que uma única chave pode analisar bem mais de cem mil endereços por segundo dentro deste limite.

Respostas de Erro ​

Formato de endereço inválido (400) ​

json
{
    "code": 1001,
    "status": "error",
    "msg": "Invalid TRON address format (expected base58, 'T' + 33 chars)"
}

Serviço temporariamente indisponível (503) ​

json
{
    "code": 5003,
    "status": "error",
    "msg": "compliance service temporarily unavailable"
}

Lista de negação central indisponível (503, código 5004) ​

O veredito é fornecido a partir de um cache em memória. Se esse cache estiver acessível, mas a lista de negação central de AML não estiver carregada no momento, ou sua revisão atual falhar em uma verificação de integridade, o endpoint não faz fallback para clean — isso reportaria um endereço não verificado como seguro. Em vez disso, ele informa claramente que não pôde produzir um veredito:

json
{
    "code": 5004,
    "status": "error",
    "msg": "compliance deny-list temporarily unavailable, verdict cannot be produced"
}

O que isso significa: o endereço não está confirmado como limpo nem como bloqueado. O serviço não pôde compará-lo com a lista de sanções/AML neste momento. Não trate o endereço como limpo — tente novamente em breve.

Um bloqueio definitivo ainda é retornado normalmente: se o endereço for correspondente a USDT congelado, contrato inteligente ou remetente de spam (conjuntos que não dependem da lista central), você recebe o veredito habitual blocked: true mesmo neste estado. Apenas uma resposta que seria clean torna-se 5004.

No endpoint em lote, a mesma situação é reportada por endereço como category: "unavailable" (blocked: null, com um campo error); o restante do lote não é afetado. Este é um estado raro e transitório.

Registro indisponível (503, código 5005) ​

Os conjuntos são atualizados no local e permanecem legíveis enquanto são atualizados, de modo que uma atualização de rotina nunca afeta o veredito. Apenas se a aplicação de um conjunto tiver falhado é que um endereço que de outra forma estaria limpo não poderá ser confirmado como limpo. O endpoint de endereço único então retorna:

json
{
    "code": 5005,
    "status": "error",
    "msg": "address registry temporarily unavailable, verdict cannot be produced, retry shortly"
}

Assim como no 5004, um bloqueio definitivo ainda é retornado normalmente, e o endpoint em lote reporta o caso por endereço como category: "unavailable". Tente novamente mais tarde.

Referência de Códigos de Erro ​

CódigoDescriçãoStatus HTTP
0Sucesso200
1001Formato de endereço TRON inválido400
5003Backend de cache temporariamente indisponível503
5004Lista de negação central não carregada — o veredito não pode ser produzido (tente novamente)503
5005Falha ao aplicar um conjunto — o veredito não pode ser produzido (tente novamente)503

Limites de Requisições ​

Existem dois níveis, aplicados no gateway:

EndpointAutenticaçãoLimitado por1 segundo1 minuto
GET /apiv2/compliance/{address}aberta, sem chaveIP10300
GET /apiv2/compliance/statsaberta, sem chaveIP10300
POST /apiv2/compliance/batchchave de APIchave20012.000

O endpoint público de endereço único destina-se ao uso interativo e programático leve. Para triagem em massa, use o endpoint em lote: com até 1000 endereços por requisição e 200 requisições/segundo por chave, uma única chave analisa bem mais de cem mil endereços por segundo. Precisa de mais? O limite por chave é uma definição de política, não um teto técnico — entre em contato conosco.

Limite de Requisições Excedido (429) ​

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

Notas ​

  • Sem autenticação e sem custo. Qualquer pessoa pode chamá-lo; não há nada para assinar.
  • Apenas em cache. O veredito nunca consulta o banco de dados ou um nó, portanto é rápido e seguro para realizar consultas frequentes dentro do limite de requisições.
  • Não é um relatório completo de AML. Para uma pontuação de risco, detalhamento de exposição e um relatório assinado, use a API de triagem autenticada (POST /apiv2/screening). Este endpoint responde a uma pergunta mais restrita: o endereço está na nossa lista de negação e por quê.