Listas Oficiales


JAAK - Versión 2.0


1. Introducción

El API de Listas Oficiales de JAAK permite realizar consultas de verificación contra diferentes bases de datos oficiales de México y organismos internacionales. Este servicio es fundamental para procesos de KYC (Know Your Customer) y verificación de identidad.

1.1 Endpoints

Sandbox (Desarrollo)

POST https://sandbox.api.jaak.ai/api/v2/blacklist/investigate

Producción

POST https://services.api.jaak.ai/api/v2/blacklist/investigate

1.2 Autenticación

El API utiliza autenticación mediante Bearer Token. Debes incluir tu token de API en el header Authorization:

Authorization: Bearer {tu_token_de_api}

1.3 Servicios Disponibles

El API soporta los siguientes servicios de verificación:

  • CURP - Validación de CURP contra la base de datos de RENAPO
  • INE - Verificación de credencial de elector del INE
  • OFAC - Consulta de listas de sanciones de la Oficina de Control de Activos Extranjeros (EEUU)
  • SAT69B - Consulta de lista 69-B del SAT
  • INTERPOL - Búsqueda en listas de INTERPOL

2. Servicio CURP

El servicio de CURP permite validar una Clave Única de Registro de Población contra la base de datos oficial de RENAPO (Registro Nacional de Población).

2.1 Request

Estructura del Request

{
    "eventId": "example_event_id",
    "services": {
        "renapo": {
            "curp": true
        }
    },
    "payload": {
        "identifications": {
            "curp": "GOMA900101HDFRRL09"
        }
    }
}

Parámetros

CampoTipoDescripción
eventIdStringIdentificador único del evento
services.renapo.curpBooleanActivar servicio de validación de CURP (true)
payload.identifications.curpStringCURP a validar (18 caracteres)

2.2 Response

El servicio retorna información completa de la persona registrada con el CURP:

{
    "eventId": "abc123-def456-ghi789",
    "responseId": "",
    "processTime": 0,
    "organization": "curp",
    "service": "validaCurp",
    "result": {
        "validaCurp": {
            "content": {
                "codeError": "0",
                "curp": "GOMA900101HDFRRL09",
                "error": "False",
                "errorMessage": "",
                "personalDataBirthDate": "1990-01-01",
                "personalDataBirthEntity": "CIUDAD DE MEXICO",
                "personalDataFirstName": "JUAN",
                "personalDataGender": "HOMBRE",
                "personalDataLastName": "GOMEZ",
                "personalDataNationality": "MEX",
                "personalDataSecondLastName": "MARTINEZ",
                "probativeDocActNumber": "00123",
                "probativeDocProbativeDoc": "",
                "probativeDocRegistrationEntity": "CIUDAD DE MEXICO",
                "probativeDocRegistrationMunicipality": "BENITO JUAREZ",
                "probativeDocRegistrationYear": "1990",
                "statusCURP": "RCN",
                "valid": "true"
            }
        }
    },
    "state": {
        "message": "",
        "foundInService": true,
        "mustBeFound": true
    }
}

Campos de la Respuesta

CampoDescripción
personalDataFirstNameNombre(s) de la persona
personalDataLastNameApellido paterno
personalDataSecondLastNameApellido materno
personalDataBirthDateFecha de nacimiento (formato: YYYY-MM-DD)
personalDataGenderGénero (HOMBRE/MUJER)
personalDataBirthEntityEntidad de nacimiento
personalDataNationalityNacionalidad (código ISO)
probativeDocActNumberNúmero de acta de nacimiento
probativeDocRegistrationEntityEntidad de registro
probativeDocRegistrationMunicipalityMunicipio de registro
probativeDocRegistrationYearAño de registro
statusCURPEstado del CURP (RCN: Registrado y Certificado por RENAPO)
validIndica si el CURP es válido (true/false)

3. Servicio INE

El servicio de INE permite verificar la autenticidad de una credencial de elector mediante la validación de sus números de identificación (CIC y OCR).

3.1 Request

Estructura del Request

{
    "eventId": "example_event_id",
    "services": {
        "ine": true
    },
    "payload": {
        "identifications": {
            "ine": {
                "cic": "123456789",
                "ocr": "1234567890123"
            }
        }
    }
}

Parámetros

CampoTipoDescripción
eventIdStringIdentificador único del evento
services.ineBooleanActivar servicio de verificación de INE (true)
payload.identifications.ine.cicStringClave de Identificación del Ciudadano (9 dígitos)
payload.identifications.ine.ocrStringNúmero OCR de la credencial (13 dígitos)

3.2 Response

Si la credencial es válida, el servicio retorna:

{
    "eventId": "def456-abc789-ghi012",
    "responseId": "",
    "processTime": 0.5180230140686035,
    "organization": "ine",
    "service": "all",
    "result": null,
    "state": {
        "message": "Investigation completed successfully",
        "foundInService": true,
        "mustBeFound": true
    }
}

Nota: El campo foundInService: true indica que la credencial es válida. Si es false, significa que la credencial no fue encontrada o es inválida.


4. Servicio OFAC

El servicio OFAC permite consultar si una persona se encuentra en las listas de sanciones de la Office of Foreign Assets Control (OFAC) del Departamento del Tesoro de Estados Unidos. Estas listas incluyen individuos y entidades sancionadas por actividades relacionadas con narcotráfico, terrorismo, proliferación de armas, y otras amenazas a la seguridad nacional.

4.1 Request

Estructura del Request

{
    "eventId": "example_event_id",
    "services": {
        "ofac": true
    },
    "payload": {
        "person": {
            "name": "JUAN",
            "lastName": "PEREZ",
            "secondName": "",
            "secondLastName": "GARCIA"
        },
        "extras": {
            "commonId": "",
            "wantedIn": "MEX"
        }
    }
}

Parámetros

CampoTipoDescripción
eventIdStringIdentificador único del evento
services.ofacBooleanActivar servicio de búsqueda OFAC (true)
payload.person.nameStringNombre de la persona
payload.person.lastNameStringApellido paterno
payload.person.secondNameStringSegundo nombre (opcional)
payload.person.secondLastNameStringApellido materno (opcional)
payload.extras.commonIdStringID común para búsqueda (opcional)
payload.extras.wantedInStringPaís de búsqueda (código ISO 3166-1 alpha-3)

4.2 Response

Si se encuentran coincidencias en las listas OFAC:

{
    "eventId": "mno345-pqr678-stu901",
    "responseId": "",
    "processTime": 21.192708730697632,
    "organization": "ofac",
    "service": "coincidences",
    "result": {
        "0": {
            "content": {
                "address": "Calle Principal No. 123, Colonia Centro",
                "city": "",
                "country": "All",
                "idNumber": "",
                "lookupId": "12345",
                "lookupType": "Individual",
                "minimumNameScore": "90",
                "name": "PEREZ GARCIA, Juan",
                "programLists": "SDN",
                "programs": "SDNTK",
                "sanctionProgram": "All",
                "score": "100",
                "searchType": "Individual",
                "state": ""
            }
        }
    },
    "state": {
        "message": "Investigation completed successfully",
        "foundInService": true,
        "mustBeFound": false
    }
}

Si NO se encuentran coincidencias:

{
    "eventId": "mno345-pqr678-stu901",
    "responseId": "",
    "processTime": 15.5,
    "organization": "ofac",
    "service": "coincidences",
    "result": null,
    "state": {
        "message": "Investigation completed successfully",
        "foundInService": false,
        "mustBeFound": false
    }
}

Campos de la Respuesta (cuando hay coincidencias)

CampoDescripción
nameNombre completo registrado en la lista OFAC
scorePorcentaje de coincidencia (0-100)
lookupIdIdentificador único en la lista OFAC
lookupTypeTipo de entrada (Individual, Entity)
programListsLista de programa (SDN: Specially Designated Nationals)
programsPrograma de sanciones específico (SDNTK: Narcotics Trafficking Kingpin)
addressDirección conocida
minimumNameScoreScore mínimo configurado para la búsqueda
sanctionProgramPrograma de sanción aplicable

Nota: foundInService: true es un resultado NEGATIVO, indica que la persona está en las listas de sanciones de OFAC. Si el valor es false, significa que la persona NO aparece en las listas (resultado positivo).


5. Servicio SAT69B

El servicio SAT69B permite consultar si un RFC se encuentra en la lista negativa del SAT (Lista 69-B), que contiene contribuyentes con operaciones inexistentes o simuladas.

5.1 Request

Estructura del Request

{
    "eventId": "example_event_id",
    "services": {
        "sat69b": true
    },
    "payload": {
        "identifications": {
            "rfc": "AAA010101AAA"
        }
    }
}

Parámetros

CampoTipoDescripción
eventIdStringIdentificador único del evento
services.sat69bBooleanActivar servicio de consulta SAT 69-B (true)
payload.identifications.rfcStringRFC a consultar (12 o 13 caracteres)

5.2 Response

Si el RFC NO está en la lista 69-B (resultado positivo):

{
    "eventId": "ghi789-jkl012-mno345",
    "responseId": "",
    "processTime": 0.16448426246643066,
    "organization": "sat",
    "service": "sat69b",
    "result": null,
    "state": {
        "message": "Investigation completed successfully",
        "foundInService": false,
        "mustBeFound": false
    }
}

Nota: foundInService: false es un resultado POSITIVO, indica que el RFC NO está en la lista negativa. Si el valor es true, significa que el RFC está en la lista 69-B.


6. Servicio INTERPOL

El servicio INTERPOL permite consultar si una persona se encuentra en las listas de búsqueda internacional de INTERPOL (difusiones rojas, azules, verdes, amarillas, naranjas, moradas y negras).

6.1 Request

Estructura del Request

{
    "eventId": "example_event_id",
    "services": {
        "interpol": true
    },
    "payload": {
        "person": {
            "name": "JUAN",
            "lastName": "PEREZ",
            "secondName": "",
            "secondLastName": "GARCIA",
            "nationality": "MEX"
        },
        "extras": {
            "wantedIn": "MEX"
        }
    }
}

Parámetros

CampoTipoDescripción
eventIdStringIdentificador único del evento
services.interpolBooleanActivar servicio de búsqueda INTERPOL (true)
payload.person.nameStringNombre de la persona
payload.person.lastNameStringApellido paterno
payload.person.secondLastNameStringApellido materno (opcional)
payload.person.nationalityStringCódigo de nacionalidad ISO 3166-1 alpha-3 (ej: MEX, USA, FRA)
payload.extras.wantedInStringPaís donde está siendo buscado (opcional)

6.2 Response

Si la persona NO está en las listas de INTERPOL:

{
    "eventId": "jkl012-mno345-pqr678",
    "responseId": "",
    "processTime": 0.09499883651733398,
    "organization": "interpol",
    "service": "all",
    "result": null,
    "state": {
        "message": "Investigation completed successfully",
        "foundInService": false,
        "mustBeFound": false
    }
}

Nota: foundInService: false es un resultado POSITIVO, indica que la persona NO está en las listas de INTERPOL. Si el valor es true, significa que la persona aparece en alguna lista de búsqueda.


7. Códigos de Estado HTTP

El API utiliza códigos de estado HTTP estándar para indicar el resultado de las peticiones:

CódigoDescripción
200OK - La solicitud se procesó correctamente
400Bad Request - Error en los parámetros enviados
401Unauthorized - Token de autenticación inválido o no proporcionado
403Forbidden - No tiene permisos para acceder al servicio solicitado
429Too Many Requests - Se ha excedido el límite de peticiones
500Internal Server Error - Error interno del servidor

8. Ejemplos de Uso

Ejemplo 1: Validar CURP

curl -X POST https://services.api.jaak.ai/api/v2/blacklist/investigate \
  -H "Authorization: Bearer tu_token_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "eventId": "mi_evento_123",
    "services": {
        "renapo": {
            "curp": true
        }
    },
    "payload": {
        "identifications": {
            "curp": "GOMA900101HDFRRL09"
        }
    }
}'

Ejemplo 2: Verificar INE

curl -X POST https://services.api.jaak.ai/api/v2/blacklist/investigate \
  -H "Authorization: Bearer tu_token_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "eventId": "mi_evento_456",
    "services": {
        "ine": true
    },
    "payload": {
        "identifications": {
            "ine": {
                "cic": "123456789",
                "ocr": "1234567890123"
            }
        }
    }
}'

Ejemplo 3: Consultar en OFAC

curl -X POST https://services.api.jaak.ai/api/v2/blacklist/investigate \
  -H "Authorization: Bearer tu_token_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "eventId": "mi_evento_789",
    "services": {
        "ofac": true
    },
    "payload": {
        "person": {
            "name": "JUAN",
            "lastName": "PEREZ",
            "secondLastName": "GARCIA"
        },
        "extras": {
            "wantedIn": "MEX"
        }
    }
}'

Ejemplo 4: Consultar RFC en SAT69B

curl -X POST https://services.api.jaak.ai/api/v2/blacklist/investigate \
  -H "Authorization: Bearer tu_token_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "eventId": "mi_evento_789",
    "services": {
        "sat69b": true
    },
    "payload": {
        "identifications": {
            "rfc": "AAA010101AAA"
        }
    }
}'

Ejemplo 5: Buscar en INTERPOL

curl -X POST https://services.api.jaak.ai/api/v2/blacklist/investigate \
  -H "Authorization: Bearer tu_token_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "eventId": "mi_evento_101",
    "services": {
        "interpol": true
    },
    "payload": {
        "person": {
            "name": "JUAN",
            "lastName": "PEREZ",
            "secondLastName": "GARCIA",
            "nationality": "MEX"
        },
        "extras": {
            "wantedIn": "MEX"
        }
    }
}'

9. Mejores Prácticas

9.1 Gestión de EventId

  • Usa identificadores únicos para cada petición (UUID recomendado)
  • Almacena el eventId para trazabilidad y auditoría
  • Útil para debugging y soporte técnico

9.2 Manejo de Errores

  • Implementa reintentos con backoff exponencial para errores 5xx
  • No reintentes errores 4xx (requieren corrección de parámetros)
  • Valida parámetros localmente antes de enviar la petición

9.3 Seguridad

  • Nunca expongas tu token de API en el frontend
  • Almacena tokens en variables de entorno
  • Implementa rate limiting en tu aplicación
  • Usa HTTPS para todas las peticiones

9.4 Performance

  • Implementa caché para consultas repetidas (especialmente CURP e INE)
  • Procesa requests en lotes cuando sea posible
  • Monitorea el tiempo de respuesta (processTime)

10. Interpretación de Resultados

Campo foundInService

El campo foundInService tiene diferentes interpretaciones según el servicio:

ServiciofoundInService: truefoundInService: false
CURPCURP válido y encontradoCURP inválido o no encontrado
INECredencial válidaCredencial inválida
OFACPersona está en listas de sanciones (❌ malo)Persona NO está en listas (✅ bueno)
SAT69BRFC está en lista negativa (❌ malo)RFC NO está en lista negativa (✅ bueno)
INTERPOLPersona está en listas (❌ malo)Persona NO está en listas (✅ bueno)

Campo mustBeFound

  • mustBeFound: true - Se espera que el dato sea encontrado (CURP, INE)
  • mustBeFound: false - Se espera que el dato NO sea encontrado (SAT69B, INTERPOL)

11. Límites y Restricciones

Rate Limits

  • Desarrollo/Sandbox: 100 peticiones por minuto
  • Producción: Según plan contratado
  • Header X-RateLimit-Remaining indica peticiones restantes

Tamaños Máximos

  • Tamaño máximo de request: 1 MB
  • Timeout de petición: 30 segundos
  • Límite de caracteres por campo: según especificación de cada servicio

12. Ambientes

Sandbox (Desarrollo)

POST https://sandbox.api.jaak.ai/api/v2/blacklist/investigate
  • Datos de prueba
  • Sin costo
  • Rate limits reducidos

Producción

POST https://services.api.jaak.ai/api/v2/blacklist/investigate
  • Datos reales
  • Según plan contratado
  • SLA garantizado

13. Soporte

Para obtener soporte técnico o reportar problemas con el API, contacta al equipo de JAAK:

Información a incluir al reportar problemas

  1. eventId de la petición
  2. Timestamp de la petición
  3. Código de estado HTTP recibido
  4. Mensaje de error completo
  5. Request enviado (sin incluir el token)

Changelog

Versión 2.0 (Actual)

  • Soporte para múltiples servicios en una sola petición
  • Mejoras en tiempo de respuesta
  • Nuevos campos en respuesta de CURP
  • Soporte para códigos de nacionalidad ISO 3166-1

Versión 1.0

  • Release inicial
  • Soporte para CURP, INE, SAT69B e INTERPOL

Documento generado: Enero 2026
Versión: 2.0
© 2026 JAAK - Todos los derechos reservados