Ir al contenido
EN

API — AML

El módulo AML filtra nombres contra listas de sanciones y vigilancia (OFAC-SDN, EU, UN, UK-OFSI). El motor solo reporta hits: nunca decide la aprobación. Un hit fuerza la revisión manual de la sesión aguas arriba (in_review).

Prefijo: /v1/aml. Requiere API key (X-API-Key: zkyc_...).

MétodoRutaAuthDescripción
POST/v1/aml/screenAPI keyScreening de un nombre contra listas
POST/v1/aml/refreshOperadorRecargar todas las listas habilitadas
GET/v1/aml/statusAPI keyConteo por fuente + último refresh
POST /v1/aml/screen
X-API-Key: zkyc_...
Content-Type: application/json
{
"fullName": "John Doe",
"dateOfBirth": "1990-05-12",
"nationality": "US",
"entityType": "person"
}
CampoTipoRequeridoDescripción
fullNamestring 2–200Nombre a filtrar
dateOfBirthstring ≤40NoFecha de nacimiento
nationalitystring ≤120NoNacionalidad
entityTypeperson | entityNoTipo de entidad

Respuesta:

{
"ok": true,
"match": true,
"score": 0.92,
"hits": [
{
"name": "JOHN DOE",
"source": "OFAC-SDN",
"score": 0.92,
"programs": ["SDGT"],
"entityType": "person"
}
]
}
CampoDescripción
matchtrue si hay al menos un hit por encima del umbral
scoreMejor puntuación de coincidencia (0–1)
hits[]Coincidencias: name, source, score, programs, entityType

Fuentes (source): OFAC-SDN, EU, UN, UK-OFSI.

Ventana de terminal
curl -X POST https://kyc.zentto.net/v1/aml/screen \
-H "X-API-Key: $KYC_API_KEY" \
-H "Content-Type: application/json" \
-d '{"fullName":"John Doe","entityType":"person"}'
const { match, score, hits } = await kyc.aml.screen({
fullName: "John Doe",
entityType: "person",
});

Si fullName tiene menos de 2 caracteres, la API responde 400 invalid_payload.

Recarga (descarga + parseo + UPSERT) todas las listas habilitadas. Operación pesada, pensada para cron o administración. Requiere rol operador.

POST /v1/aml/refresh
X-API-Key: zkyc_<operador>
{ "ok": true, "counts": { "OFAC-SDN": 12000, "EU": 3400, "UN": 1100, "UK-OFSI": 2600 } }
GET /v1/aml/status
X-API-Key: zkyc_...
{
"ok": true,
"entities": [
{ "source": "EU", "count": 3400 },
{ "source": "OFAC-SDN", "count": 12000 },
{ "source": "UK-OFSI", "count": 2600 },
{ "source": "UN", "count": 1100 }
],
"lastRefresh": [
{
"source": "OFAC-SDN",
"entities": 12000,
"status": "ok",
"message": null,
"created_at": "2026-06-21T03:00:00.000Z"
}
]
}
CampoDescripción
entities[]Conteo de entidades por fuente
lastRefresh[]Último refresco por fuente (entities, status, message, created_at)

Vista no técnica: qué listas revisa el screening y qué ocurre según el resultado.

Flujo del usuario — KYC · AML

Editable en draw.io: descarga el SVG → en draw.io: File → Import from → Device → selecciona el SVG. Cada nodo queda editable.

Vista técnica: POST /v1/aml/screen → pg_trgm sobre aml_entities (OFAC/EU/UN/UK) → hits → decisión in_review si match.

Flujo técnico — KYC · AML

ComponenteTipoUbicación
POST /v1/aml/screenRoute Expresssrc/aml/routes.ts
POST /v1/aml/refreshRoute Express (rol operador)src/aml/routes.ts
GET /v1/aml/statusRoute Expresssrc/aml/routes.ts
src/aml/aml.service.tsMotor de screening pg_trgmsrc/aml/aml.service.ts
aml_entitiesTabla sanciones (OFAC/EU/UN/UK, índice GIN pg_trgm)src/db/migrations/
aml_refresh_logHistorial de refresco por fuentesrc/db/migrations/
session_resultsTabla (aml_match, aml_score, aml_hits jsonb)src/db/migrations/
sessions.orchestrator.tsRegla: hit → in_review forzadosrc/sessions/sessions.orchestrator.ts

Editable en draw.io: descarga el SVG → File → Import from → Device.