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

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/history

Encabezados de solicitud

HeaderRequiredDescription
X-API-KEYTu 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.

ParameterTypeDefaultDescription
addressstringDirección exacta, 10–128 caracteres
networkstringTicker de la red
providerstringelliptic o bitok
statusstringpending, processing, completed, skipped, failed
fromstringSolo verificaciones creadas en o después de este momento, RFC 3339
tostringSolo verificaciones creadas en o antes de este momento, RFC 3339
cursorstringDesde dónde continuar. Tómalo de next_cursor
limitinteger50Elementos 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

bash
curl "https://netts.io/apiv2/screening/history?limit=50" \
  -H "X-API-KEY: your_api_key"

Python — recorrer todo el historial

python
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

json
{
  "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
}
FieldTypeDescription
itemsarrayLa página, los más recientes primero
next_cursorstring | nullEnvíalo de vuelta para obtener la siguiente página. null significa que has llegado al final
limitintegerEl 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.

ValueMeaning
listedLa dirección en sí está en una lista de sanciones
linkedSe encontró un vínculo de sanciones, pero la dirección en sí no está sancionada
noneEl análisis se ejecutó y no encontró nada
nullAú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, porque created_at no 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: null significa 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.

CodeHTTPWhen
4001400limit 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 / 4011401Sin clave API, o una clave o IP que no es aceptada
json
{
  "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.