GET /apiv2/screening/history
Tu historial de screening, los más recientes primero, con paginación por cursor.
Este es el contrato de la versión 2. Reemplaza a GET /apiv2/aml/history, que sigue funcionando.
URL del endpoint
GET https://netts.io/apiv2/screening/historyEncabezados de solicitud
| Header | Required | Description |
|---|---|---|
| X-API-KEY | Sí | Tu clave API del panel de control de Netts |
Parámetros de consulta
Todos los filtros son opcionales. Sin ninguno de ellos obtienes todo tu historial.
| Parameter | Type | Default | Description |
|---|---|---|---|
| address | string | — | Dirección exacta, 10–128 caracteres |
| network | string | — | Ticker de la red |
| provider | string | — | elliptic o bitok |
| status | string | — | pending, processing, completed, skipped, failed |
| from | string | — | Solo verificaciones creadas en o después de este momento, RFC 3339 |
| to | string | — | Solo verificaciones creadas en o antes de este momento, RFC 3339 |
| cursor | string | — | Desde dónde continuar. Tómalo de next_cursor |
| limit | integer | 50 | Elementos por página, 1 a 200 |
En la versión 1 tanto address como network eran obligatorios, por lo que no había forma de preguntar "¿qué he verificado últimamente?".
Se incluyen las verificaciones con estado skipped. La versión 1 las oculta. Una verificación omitida es una orden real —la dirección no tuvo actividad en la blockchain, por lo que nunca se envió al proveedor y nunca se cobró— y pertenece al historial.
Ejemplos
cURL
curl "https://netts.io/apiv2/screening/history?limit=50" \
-H "X-API-KEY: your_api_key"Python — recorrer todo el historial
import requests
headers = {"X-API-KEY": "your_api_key"}
params = {"limit": 200, "provider": "elliptic"}
while True:
page = requests.get("https://netts.io/apiv2/screening/history",
headers=headers, params=params).json()
for item in page["items"]:
print(item["order"]["client_order_id"],
item["order"]["status"],
item["risk"]["level"],
item["sanctions"]["verdict"])
if not page["next_cursor"]:
break
params = {"limit": 200, "provider": "elliptic", "cursor": page["next_cursor"]}Mantén los filtros idénticos durante la paginación. Cambiar uno mientras se conserva el mismo cursor es un error, no un cambio silencioso a un conjunto diferente.
Respuesta
{
"schema_version": 2,
"items": [
{
"order": {
"client_order_id": "A6F3221BAAE093A",
"status": "completed",
"api_version": "v2",
"cache_hit": false,
"created_at": "2026-09-13T08:24:19.838584Z",
"started_at": "2026-09-13T08:24:20.998619Z",
"completed_at": "2026-09-13T08:24:25.179967Z"
},
"request": {
"address": "YOUR_ADDRESS_HERE",
"network": "trx",
"provider": "elliptic"
},
"check": {
"provider": "elliptic",
"provider_check_id": "1cc2fd64-1483-4ce3-946f-23a614f41a12",
"checked_at": "2026-09-13T08:24:22.372000Z",
"status": "completed",
"provider_status": "complete"
},
"risk": {
"score": "0.12428176721891304",
"scale": { "min": 0, "max": 10 },
"level": "low",
"level_source": "computed",
"provider_level": null,
"policy": "netts-risk-v1",
"by_direction": { "source": "0.12428176721891304", "destination": null }
},
"sanctions": { "verdict": "linked" }
}
],
"next_cursor": "eyJmIjp7InN0YXR1cyI6ImNvbXBsZXRlZCJ9LCJpIjoxMzQyNywidCI6...",
"limit": 1
}| Field | Type | Description |
|---|---|---|
| items | array | La página, los más recientes primero |
| next_cursor | string | null | Envíalo de vuelta para obtener la siguiente página. null significa que has llegado al final |
| limit | integer | El límite que se aplicó |
La forma corta de un elemento
Los bloques order, request, check y risk son idénticos a los de la respuesta completa de GET /apiv2/screening/{client_order_id}, campo por campo, por lo que el mismo analizador procesa ambos.
Lo que se omite: provider_data, exposure[], rules[], entities[], wallet, billing, precheck, y el bloque completo sanctions. Un solo resultado de Elliptic tiene alrededor de 150 KB, y una página de cincuenta ocuparía siete megabytes. Obtén una verificación individual cuando necesites el detalle.
sanctions.verdict
El análisis de sanciones comprimido en una sola palabra.
| Value | Meaning |
|---|---|
listed | La dirección en sí está en una lista de sanciones |
linked | Se encontró un vínculo de sanciones, pero la dirección en sí no está sancionada |
none | El análisis se ejecutó y no encontró nada |
null | Aún no hay un resultado para analizar |
La diferencia entre listed y linked es el propósito de este campo — consulta Sanciones en un resultado de AML.
Pagination
La versión 1 pagina por número: ?page=2, 100 por página. El orden es por fecha de creación, los más recientes primero, por lo que mientras pasas de la página 1 a la página 2 llegan nuevas verificaciones y desplazan todo hacia abajo. Registros que ya viste vuelven a aparecer, registros que no has visto se te escapan. Con una cuenta muy activa, este no es un caso aislado.
Un cursor apunta a un lugar dentro del conjunto en vez de a su número ordinal, por lo que las nuevas verificaciones que llegan durante el recorrido no lo alteran.
- el orden es
created_at DESC, id DESC. Ambos campos están en el cursor, porquecreated_atno es único — de lo contrario, dos verificaciones creadas en el mismo microsegundo causarían bucles u omisiones; - el cursor es opaco. Su contenido es un detalle de implementación; envíalo de vuelta exactamente como lo recibiste;
- los filtros son parte del cursor. Modificar uno mientras se reutiliza el cursor devuelve
400, no un cambio silencioso a un conjunto diferente — de lo contrario, creerías haber leído un conjunto que nunca leíste; next_cursor: nullsignifica el final. No hay un conteo total: contar todo el conjunto en cada página cuesta más de lo que aporta.
Respuestas de error
RFC 9457, application/problem+json. La lista completa de códigos está en la página de POST.
| Code | HTTP | When |
|---|---|---|
4001 | 400 | limit fuera de 1…200, un valor desconocido para network, provider o status, un valor de from/to que no sea RFC 3339, un cursor mal formado, o un cursor emitido para filtros diferentes |
4010 / 4011 | 401 | Sin clave API, o una clave o IP que no es aceptada |
{
"type": "https://doc.netts.io/api/v2/errors/validation-failed",
"title": "Request validation failed",
"status": 400,
"detail": "Cursor was issued for a different set of filters",
"instance": "/apiv2/screening/history",
"code": 4001
}Límites de tasa
Compartido con cualquier otra ruta de AML: 5 solicitudes por segundo, 150 por minuto. Con limit=200, un historial completo de diez mil verificaciones son cincuenta solicitudes.