Once data have been drawn from the document at the previous step, this information has been verified against several official lists That step is vital to ensuring that a person is not linked to illicit activity or found within high-risk searches while at the same time confirming his or her existence at legitimate government bases.

Not all lists have a restrictive or risk approach and some are designed to confirm official information. That's why, rather than "blacklists," we referred to this stage as an anti official listsSome examples:

International risk lists: how Interpol or OFACused to detect links with illicit activities or sanctions.

National validation lists: how INE, RENAPO or SAT, employed to confirm an individual's legal identity and existence.

The services available at this stage are: INE, Interpol, OFAC, RENAPO and SAT.

Important

You can only check a list by request. Although the signature to consume the service is the same, each list requires specific parameters depending on the nature of the data that it valids.

URL

POST https://api.sandbox.jaak.ai/api/v2/blacklist/investigate
@POST("api/v2/blacklist/investigate")
    suspend fun livenessVerifyApi(@Header("Authorization") auth: String,
                                  @Body request: InvestigateRequest): Response<InvestigateResponse>

Leader

Authorization: Bearer token-session-kyc
FieldTypeRequiredDescription
AuthorisationstringYesThe Session Token should be sent at this headquarters KYC That's been obtained from the exchange with Short Key

Request

{
    "services": {
        "ine": Boolean,
        "interpol": Boolean,
        "ofac": Boolean,
        "renapo": {
            "curp": Boolean
        },
        "sat": {
            "sat69b": Boolean
        },
        "cdc": {
            "rccFico": Boolean
        }
    },
    "payload": {
        "person": {
            "name": String,
            "secondName": String,
            "lastName": String,
            "secondLastName": String,
            "birthDate": String,
            "nationality": String,
            "additionalLastName": String
        },
        "address": {
            "address": String,
            "neighborhood": String,
            "municipality": String,
            "city": String,
            "state": String,
            "postalCode": String
        },
        "identifications": {
            "curp": String,
            "rfc": String,
            "socialSecurityNumber": String,
            "electorKey": String,
            "ine": {
                "cic": String,
                "ocr": String
            }
        },
        "extras": {
            "commonId": String,
            "wantedIn": String
        }
    }
}
 data class InvestigateRequest(
    @SerializedName("services") val services: Services,
    @SerializedName("payload") val payload: Payload
)

data class Services(
    @SerializedName("ine") val ine: Boolean,
    @SerializedName("interpol") val interpol: Boolean,
    @SerializedName("ofac") val ofac: Boolean,
    @SerializedName("renapo") val renapo: Renapo,
    @SerializedName("sat") val sat: Sat,
    @SerializedName("cdc") val cdc: Cdc
)

data class Renapo(
    @SerializedName("curp") val curp: Boolean
)

data class Sat(
    @SerializedName("sat69b") val sat69b: Boolean
)

data class Cdc(
    @SerializedName("rccFico") val rccFico: Boolean
)

data class Payload(
    @SerializedName("person") val person: Person,
    @SerializedName("address") val address: Address,
    @SerializedName("identifications") val identifications: Identifications,
    @SerializedName("extras") val extras: Extras
)

data class Person(
    @SerializedName("name") val name: String,
    @SerializedName("secondName") val secondName: String,
    @SerializedName("lastName") val lastName: String,
    @SerializedName("secondLastName") val secondLastName: String,
    @SerializedName("birthDate") val birthDate: String,
    @SerializedName("nationality") val nationality: String,
    @SerializedName("additionalLastName") val additionalLastName: String
)

data class Address(
    @SerializedName("address") val address: String,
    @SerializedName("neighborhood") val neighborhood: String,
    @SerializedName("municipality") val municipality: String,
    @SerializedName("city") val city: String,
    @SerializedName("state") val state: String,
    @SerializedName("postalCode") val postalCode: String
)

data class Identifications(
    @SerializedName("curp") val curp: String,
    @SerializedName("rfc") val rfc: String,
    @SerializedName("socialSecurityNumber") val socialSecurityNumber: String,
    @SerializedName("electorKey") val electorKey: String,
    @SerializedName("ine") val ine: Ine
)

data class Ine(
    @SerializedName("cic") val cic: String,
    @SerializedName("ocr") val ocr: String
)

data class Extras(
    @SerializedName("commonId") val commonId: String,
    @SerializedName("wantedIn") val wantedIn: String
)
FieldTypeDescription
servicesSubject matterContains different blacklist services where a check can be performed (see sub-tables)
payloadSubject matterContains information to search for the chosen service (see sub-boards)

Object * services *

FieldTypeDescription
inebooleanCheck at National Electoral Institute (INE).
interpolbooleanCheck with Interpol.
ofacbooleanCheck with Office of Control of Foreign Assets (OFAC).
renap.curpbooleanConducts verification at National Population Registry (RENAPO).
sat.sat69bbooleanCheck with Tax Administration Service (SAT).
cdc.rccFicobooleanCheck at Credit Data Center (CDC).

Object * payload *

FieldTypeDescription
payload.personSubject matterContains response information (see sub-tables)
payload.addressSubject matterContains response information (see sub-tables)
payload.identificationsSubject matterContains response information (see sub-tables)
payload.extrasSubject matterContains response information (see sub-tables)

Object * payload.person *

FieldTypeDescription
namestringFirst name of person to seek.
secondstringThe second name of the person to be found.
laststringFirst name of person to be found.
secondstringThe second name of the person to be found.
birthDatestringDate of birth of person to be sought (Format: YYYY-MM-DD).
nationalitystringNationality of person to seek.
AdditionalstringAdditional name of person to seek.

Object * payload.address *

FieldTypeDescription
addressstringStreet and address number of person to seek.
neighborhoodstringColony or place of user of person to seek.
MunicipalitystringMunicipality or delegation of person to seek.
citystringThe town of residence of the person to be sought.
statusstringState of residence of the person to be sought.
postalCodestringThe postal code of the person's address to be sought.

Object * payload.identifications *

FieldTypeDescription
curpstringUnique Population Registration Key (CURP) from person to seek.
rfcstringFY (RFC) from person to seek.
Social SecuritystringSocial Security number (NSS) of person to be sought.
KeystringElector's Key from INE from the person to seek.
ineObjectObject with data from the INE from person to seek. (see sub-boards)

Object * payload.identifications.ine *

FieldTypeDescription
icstringCredit Identification Code INE from document to be found.
ocrstringOfficial Identification number (OCR) of the document to be sought.

Object * payload.extras *

FieldTypeDescription
commonIdstringCommon user identifier (can be internal system ID) of the person to search.
wantedInstringCode of the country where the user is sought ("MEX" for Mexico) of the person to seek.

Answer

{
    "eventId": String,
    "responseId": String,
    "processTime": Double,
    "organization": String,
    "service": String,
    "result": {},
    "state": {
        "foundInService": Bolean,
        "mustBeFound": Boolean,
        "message": String
    }
}
data class InvestigateResponse(
    @SerializedName("eventId") val eventId: String,
    @SerializedName("responseId") val responseId: String,
    @SerializedName("processTime") val processTime: Double,
    @SerializedName("organization") val organization: String,
    @SerializedName("service") val service: String,
    @SerializedName("result") val result: Any?, // Can be null or an object, depending on use
    @SerializedName("state") val state: InvestigationState
)

data class InvestigationState(
    @SerializedName("message") val message: String,
    @SerializedName("foundInService") val foundInService: Boolean,
    @SerializedName("mustBeFound") val mustBeFound: Boolean
)
FieldTypeDescription
eventstringID for traceability of event details.
respondedstringAnswer ID.
organizationstringThe governmental entity that supports the consultation
servicestringIt's the service of the entity at which the consultation takes place
ProcessTimedoubleService consultation processing time
resultobjectObject with information from person found if applicable
statusobjectThey're states you can get back to figure out if the person was found.

Object * state *

FieldTypeDescription
foundInServicebooleanIt indicates whether or not the person was found at the service.
mostobooleanDefine if you are expected to find the person at the service for success or otherwise. OFAC the failure to find a person at service is a success case, on the contrary INE if you find a person it's considered a success case.
messagestringMessage concerning the search for the person in service

A number of tables organised by list service will then be shown and the fields required for each list and their correspondence with information from the previous step will be detailed.

To conduct check by service INE The following information shall be submitted:

Field sent to call APIRequiredData extracted from document at previous step
payload.identifications.ine.cicYeah.content.data.document.additionalNumber
payload.identifications.ine.ocrYeah.content.data.personal.extra.ocr

To conduct check by service INTERPOL The following information shall be submitted:

Field sent to call APIRequiredData extracted from document at previous step
payload.person.nameYeah.content.data.personal.name
payloadNocontent.data.person.secondName
payload.person.lastYeah.content.data.personal .sureName
payload.person.secondNocontent.data.personal.motherSurname

To conduct check by service OFAC The following information shall be submitted:

Field sent to call APIRequiredData extracted from document at previous step
payload.person.nameYeah.content.data.personal.name
payloadNocontent.data.person.secondName
payload.person.lastYeah.content.data.personal .sureName
payload.person.secondNocontent.data.personal.motherSurname

To conduct check by service RENAPO The following information shall be submitted:

Field sent to call APIRequiredData extracted from document at previous step
payload.identifications.curpYeah.content.data.document.personalIdNumber

To conduct check by service SAT The following information shall be submitted:

Field sent to call APIRequiredData extracted from document at previous step
payload.person.nameYeah.content.data.personal.name
payloadNocontent.data.person.secondName
payload.person.lastYeah.content.data.personal .sureName
payload.person.secondNocontent.data.personal.motherSurname
payload.identifications.rfcYeah.content.data.personal.extra.rfc

Below we will show you an example of a consultation at the service RENAPO

Request

{
    "services": {
        "ine": false,
        "interpol": false,
        "ofac": false,
        "renapo": {
            "curp": true
        },
        "sat": {
            "sat69b": false
        },
        "cdc": {
            "rccFico": false
        }
    },
    "payload": {
        "identifications": {
            "curp": "Here goes the curp."
        }
    }
}

Answer

{
    "eventId": "749f88b9-ecce-4f4c-920a-f8ece706501a",
    "responseId": "",
    "processTime": 0.23123526573181152,
    "organization": "curp",
    "service": "validaCurp",
    "result": null,
    "state": {
        "message": "Investigation completed successfully",
        "foundInService": false,
        "mustBeFound": true
    }
}

A consultation was conducted with the service of RENAPOIn the request, we can note that only a service was activated, * services.renap.curp * and that only the fields necessary to conduct the search for that service were sent.

The * state * field within the * Response * should have indicated that a person was found to have been found to be successful. Nevertheless, the * foundInService * field shows that the person was not found.

To sum up, by contrasting information extracted from the document with several blacklists, we guarantee the protection of both the company and users. That process guarantees the integrity and compliance of the system and helps prevent fraud.

Once we have checked the document's data from the blacklists we will continue with the following steps.