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

POST /apiv2/aml

Reemplazado por POST /apiv2/screening

POST /apiv2/screening es el contrato de la versión 2: una única estructura de respuesta para cada proveedor y cada estado de la orden, números decimales como cadenas en lugar de números JSON, participaciones en una sola escala y un único formato de error. Este endpoint sigue funcionando y no se retirará sin previo aviso.

Envía una dirección para verificación AML (Anti-Lavado de Dinero). Devuelve la puntuación de riesgo, el nivel de riesgo y un análisis detallado de exposición.

Todas las marcas de tiempo en la respuesta están en UTC. El formato de cadena no cambia — "2026-09-09 23:01:44", sin sufijo de zona horaria.

URL del endpoint

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

Encabezados de solicitud

HeaderRequiredDescription
Content-Typeapplication/json
X-API-KEYTu clave de API del panel de Netts

Cuerpo de la solicitud

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

Parámetros

ParameterTypeRequiredDescription
addressstringDirección de blockchain a verificar (10-100 caracteres)
networkstringIdentificador de la red blockchain (consulta Redes compatibles a continuación)
providerstringNoProveedor de AML: elliptic (predeterminado)
waitbooleanNoSi es true, espera el resultado de forma sincrónica (hasta 15 segundos). Si es false o se omite, responde inmediatamente con estado pending y un client_order_id — úsalo para consultar el resultado mediante sondeo a través de GET /apiv2/aml/{order_id}
response_formatstringNoNivel de detalle de la respuesta: rate (solo puntuación), full (predeterminado, datos completos)
report_languagestringNoIdioma del reporte: en (predeterminado)

Proveedores

ProviderScore RangeDescription
elliptic0 — 10Puntuación de riesgo de Elliptic. 0 = sin riesgo, 10 = riesgo máximo. null = no se detectaron detonantes

Ejemplos

cURL (sincrónico)

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 (asincrónico)

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

Respuesta

Éxito — Pendiente (200 OK)

Cuando no se define wait o la verificación aún se está procesando:

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

Éxito — Elliptic completado (200 OK)

Respuesta completa de Elliptic con todas las estructuras de datos:

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 de la respuesta

FieldTypeDescription
data.client_order_idstringID de orden único para consultar el estado mediante sondeo
data.statusstringpending, processing, completed, failed, skipped
data.risk_scorenumber | nullPuntuación de riesgo. Elliptic: 0-10. null = sin detonantes
data.risk_levelstring | nullnone, low, medium, high o severe. Elliptic devuelve low, medium, high; BitOK añade none y severe. null cuando el proveedor no detectó ningún detonante
data.is_sanctionedbooleantrue si se detecta exposición a entidades sancionadas. Sin cambios desde el lanzamiento del endpoint: no distingue entre una dirección sancionada y una dirección simplemente vinculada a una — consulta data.sanctions para eso
data.sanctionsobject | nullDesglose del hallazgo de sanciones: si la dirección misma está listada, qué tan cercano es el vínculo y de qué tamaño. Consulta Sanciones
data.resultobjectRespuesta completa del proveedor (cuando response_format=full)

Sanciones

is_sanctioned es un único valor booleano y dice true en dos situaciones muy diferentes: la dirección verificada está en sí misma en una lista de sanciones, o la dirección verificada alguna vez recibió una fracción de un porcentaje a través de dos intermediarios de alguien que lo está. La bandera mantiene su significado original por compatibilidad hacia atrás; data.sanctions diferencia ambos casos.

FieldTypeDescription
sanctions.selfbooleantrue cuando la propia dirección analizada es la entidad sancionada
sanctions.self_entitiesarray | nullNombres de sus propias entidades sancionadas, cuando self es true
sanctions.exposureobject | nullEl vínculo de sanciones individual más grande — qué mostrar en un resumen
sanctions.exposure.sharenumberProporción de fondos involucrados, en porcentaje (8.03 significa 8.03%)
sanctions.exposure.proximitystringscreened_address, counterparty, indirect o mixed
sanctions.exposure.hopsnumber | nullNúmero mínimo de saltos de transacción hasta la entidad sancionada
sanctions.exposure.entitystring | nullNombre de la entidad sancionada, incluyendo la lista y la fecha
sanctions.exposure.directionstring | nullsource para fondos entrantes, destination para salientes
sanctions.itemsarrayCada contribución de sanciones, la mayor proporción primero, los mismos campos que exposure más counterparty_share, indirect_share, value_usd y trigger
sanctions.relatedarray | nullSolo BitOK: exposición a exchanges bajo sanciones de la UE o el Reino Unido, mantenidos al margen de la lista de sanciones en sí

Proximidad refleja la columna Closest Proximity de un informe de Elliptic:

ValueMeaning
screened_addressLa dirección analizada es el detonante en sí, no una contraparte
counterpartyContraparte directa de la dirección analizada
indirectAlcanzada a través de intermediarios — consulta hops
mixedFlujos tanto directos como indirectos hacia la misma entidad

Una contribución cuenta como un vínculo de sanciones solo cuando el proveedor la marca como tal — risk_triggers.is_sanctioned para Elliptic, la categoría sanctions para BitOK. La regla de Elliptic llamada Sanctioned, TF & CSAM también se activa con detonantes de país y categoría, por lo que el nombre de la regla por sí solo no es un veredicto de sanciones.

Objeto result de Elliptic

FieldTypeDescription
risk_scorenumberPuntuación de riesgo precisa (0-10)
risk_score_detailobjectDesglose: puntuaciones de source y destination
contributionsobjectArreglos source y destination de los contribuyentes al flujo de fondos
contributions[].entitiesarrayEntidades conocidas asociadas con la contribución
contributions[].entities[].namestringNombre de la entidad (ej. "Binance", "KuCoin")
contributions[].entities[].categorystringTipo de entidad (ej. "Exchange", "Payment Services Provider")
contributions[].entities[].is_vaspboolean | nullSi la entidad es un Proveedor de Servicios de Activos Virtuales
contributions[].contribution_value.usdnumberVolumen total en USD de la contribución
contributions[].contribution_percentagenumberPorcentaje del total de fondos provenientes de esta entidad
contributions[].indirect_value.usdnumberVolumen en USD recibido indirectamente (a través de intermediarios)
contributions[].indirect_percentagenumberPorcentaje de fondos recibidos indirectamente
contributions[].counterparty_value.usdnumberVolumen en USD como contraparte directa
contributions[].counterparty_percentagenumberPorcentaje como contraparte directa
contributions[].min_number_of_hopsnumberSaltos mínimos de transacción desde la entidad (0 = directo)
contributions[].is_screened_addressbooleantrue si se trata de la propia dirección verificada
cluster_entitiesarrayEntidades conocidas directamente asociadas con el clúster de la dirección
cluster_entities[].namestringNombre de la entidad
cluster_entities[].categorystringCategoría de la entidad
cluster_entities[].is_vaspboolean | nullEstado de VASP
cluster_entities[].is_after_sanction_datebooleantrue si la actividad ocurrió después de que la entidad fuera sancionada
evaluation_detailobjectArreglos source y destination de reglas de riesgo activadas
evaluation_detail[].rule_namestringNombre de la regla (ej. "Sanctions", "Illicit Activity", "Obfuscating & Misc.")
evaluation_detail[].rule_typestringTipo de regla (ej. "exposure")
evaluation_detail[].risk_scorenumberContribución a la puntuación de riesgo proveniente de esta regla
evaluation_detail[].matched_elementsarrayCategorías y entidades que activaron la regla
evaluation_detail[].matched_elements[].categorystringCategoría de riesgo (ej. "Sanctioned Entity", "Gambling", "Token Blacklisting")
evaluation_detail[].matched_elements[].contributionsarrayEntidades dentro de la categoría coincidente
evaluation_detail[].matched_elements[].contributions[].entitystringNombre de la entidad
evaluation_detail[].matched_elements[].contributions[].contribution_percentagenumberPorcentaje de exposición
evaluation_detail[].matched_elements[].contributions[].min_number_of_hopsnumberSaltos de transacción
evaluation_detail[].matched_elements[].contributions[].is_screened_addressbooleantrue cuando la propia dirección verificada activó la regla
evaluation_detail[].matched_elements[].contributions[].risk_triggersobjectRazón por la que se activó la regla: is_sanctioned para una lista de sanciones, country para una jurisdicción, category para un tipo de entidad
evaluation_detail[].matched_behaviorsarrayPatrones de comportamiento detectados
detected_behaviorsarrayPatrones de comportamiento globales detectados en la dirección

Niveles de riesgo

Elliptic (escala 0-10):

RangeLevelDescription
0 — 3lowRiesgo mínimo. Sin exposición significativa
3 — 7mediumRiesgo moderado. Se detectaron algunas categorías riesgosas
7 — 10highRiesgo alto. Entidades sancionadas, ilícitas o de alto riesgo
null-No se detectaron detonantes de riesgo

BitOK (escala 0-1): el proveedor devuelve el nivel en sí — none, low, medium, high o severe.

risk_level es el veredicto único utilizado en todas partes: la respuesta de la API, el panel de control y el informe en PDF muestran la misma palabra para la misma comprobación.

Respuestas de error

Error de autenticación (401)

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

Error de validación (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"
}

Proveedor no disponible (503)

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

Referencia de códigos de error

CodeDescriptionHTTP Status
-1La autenticación falló401
4001Dirección inválida o ausente400
4002Proveedor inválido400
4020Saldo insuficiente402
5030Proveedor no disponible503

Límites de tasa

Los siguientes límites de tasa se aplican a todos los endpoints de AML (por dirección IP):

PeriodLimitDescription
1 segundo2 solicitudesMáximo 2 solicitudes por segundo
1 minuto30 solicitudesMáximo 30 solicitudes por minuto

Límite de tasa excedido (429)

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

Almacenamiento en caché de resultados

Si se verificó la misma combinación de dirección + proveedor en los últimos 60 segundos, el resultado almacenado en caché se devuelve sin costo.

Redes compatibles

El parámetro network es obligatorio. Usa el ticker de la tabla a continuación.

Elliptic — Verificación integral (Holistic)

La verificación se realiza para una dirección específica en una red específica. Sin embargo, Elliptic rastrea todos los activos asociados con esa dirección — incluidos tokens, transferencias cross-chain e interacciones con entidades conocidas a través de otras redes.

NetworkTickerNative Asset
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

Verificación de un solo activo (Single Asset)

Estas redes admiten la verificación individual de direcciones/transacciones:

NetworkTickerNative Asset
Bitcoin CashbchBCH
HorizenzenZEN
ZCashzecZEC

Compatibilidad de proveedores y redes

Al usar provider: "elliptic" — todas las redes de las tablas Holistic y Single Asset están disponibles (47 redes). Si se pasa una red no compatible, la API devuelve el código de error 4001.

Notas

  • Precios: Elliptic — $0.98 por comprobación. Precios mostrados en TRX a la tasa actual
  • Tiempo de espera sincrónico: wait: true espera hasta 15 segundos. Si la verificación toma más tiempo, devuelve el estado pending
  • Tiempo de procesamiento: La mayoría de las verificaciones se completan en pocos segundos. Sin embargo, algunas solicitudes (especialmente para direcciones con un historial de transacciones complejo) pueden tardar hasta 3 minutos en procesarse. Usa el modo asincrónico (omite wait o establece wait: false) y realiza sondeos mediante GET /apiv2/aml/{order_id} para tales casos
  • Direcciones inactivas: Las direcciones sin actividad en la blockchain devuelven el estado skipped sin costo