Saltar a contenido

Biometric ID - API

En este documento encontrará una explicación de cómo se realiza la integración con el API BiometricID

Pre requisitos

Para hacer uso del API debe contar con un API Key válido.

Toda petición que se realice al api debe contener el siguiente header

ApiKey: {{ apiKey }}

Nota

Según el endpoint que se use se solicitarán headers adicionales.

Flujo de uso

El api está diseñado para utilizarse de manera secuencial, el flujo es el siguiente:

flowchart LR
    A([Consulta de documento]) --> B([Verificación biometrica])
    B --> C([Consulta de información adicional])

Endpoints expuestos

DocumentQuery

Este endpoint permite consultar si un documento está disponible para su verificación biométrica.

Nota

Se debe enviar el correo del usuario que está realizando la petición {{ USUARIO_SELFSERVICE }}, solo serán válidos correos de usuarios creados en el selfservice por el cliente dueño del ApiKey

Headers requeridos:

ApiKey: {{ apiKey }}
Authorization: ApiKey {{ apiKey }}
Content-Type: application/json

Ejemplo de request:

curl --location --request POST 'https://apibiometricid.racsa.go.cr/bioapi/api/DocumentQuery' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'ApiKey: {{ APIKEYVALID }}' \
--header 'Authorization: ApiKey {{ APIKEYVALID }}' \
--data-raw '{
  "documentType": "Foreigner",
  "documentNumber": "1234566",
  "userEmail": "{{ USUARIO_SELFSERVICE }}"
}'

Ejemplo de respuesta para un documento disponible:

{
    "biometricAvailable": true,
    "token": "{{ JWTVALIDTOKEN }}",
    "availableFingers": [
        "RightThumb",
        "RightIndex"
    ],
    "facialRecognitionAvailable": false,
    "name": "Pepito",
    "surname": "Peréz",
    "secondSurname": "HIT",
    "transactionId": "c3717a3c-32d5-b62b-b5d4-3a092a3dcb84"
}

Nota

En este caso la respuesta nos entrega un token que será requerido para hacer la verificación biométrica

Ejemplo de respuesta para un documento no disponible:

{
    "transactionId": "ab57808b-b6cd-c8db-5485-3a092a1ffc54",
    "biometricAvailable": false
}

BiometricVerification

Este endpoint permite realizar la verificación biométrica de una persona dada la imagen de su rostro o la imagen de una huella en formato wsq.

Headers requeridos:

ApiKey: {{ apiKey }}
Authorization: Bearer {{ JWTVALIDTOKEN }}
Content-Type: application/json

JWTVALIDTOKEN

Este token es entregado por la respuesta de DocumentQuery

Ejemplo de request verificación facial:

curl --location --request POST 'https://apibiometricid.racsa.go.cr/bioapi/api/BiometricVerification' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{ JWTVALIDTOKEN }}' \
--header 'ApiKey: {{ APIKEYVALID }}' \
--data-raw '{
  "fullFacePhoto": "BASE64ENCODEDJPEGIMAGE"
}'

Formato de la fotografía

El campo fullFacePhoto debe ser la fotografía del rostro de la persona codificada en Base64, en formato JPEG.

Ejemplo de request verificación por huella:

curl --location --request POST 'https://apibiometricid.racsa.go.cr/bioapi/api/BiometricVerification' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {{ JWTVALIDTOKEN }}' \
--header 'ApiKey: {{ APIKEYVALID }}' \
--data-raw '{
  "finger": "RightThumb",
  "fingerPrint": "BASE64ENCODEDWSQFINGER"
}'

Dedos disponibles

Los valores válidos para el campo finger son: RightThumb, RightIndex, RightMiddle, RightRing, RightLittle, LeftThumb, LeftIndex, LeftMiddle, LeftRing, LeftLittle. Los dedos disponibles para un documento en particular se retornan en el campo availableFingers de la respuesta de DocumentQuery.

Ejemplo de respuesta para una verificación exitosa:

{
    "hit": true,
    "documentImage": "BASE64ENCODEDDOCUMENTIMAGE",
    "documentExpirationDate": "2024-10-25T00:00:00",
    "token": "JWTVALIDTOKEN",
    "externalDataSources": [],
    "transactionId": "c3717a3c-32d5-b62b-b5d4-3a092a3dcb84",
    "remainingTries": 1,
    "scoreResult": 0,
    "scoreLimit": 0,
    "documentNumber": "123456789",
    "oldDocumentNumber": "2223333444",
    "lastName": "Carter",
    "secondLastName": "Doo",
    "name": "John",
    "category": "CATEGORY",
    "birthDay": "2023-06-09T15:07:11.978Z",
    "dateIssue": "2023-06-09T15:07:11.978Z",
    "nationality": "Colombian",
    "gender": "M",
    "status": "STATUS"
}

Nota

En este caso la respuesta nos entrega un token que será requerido para consultar las fuentes de información externas a través del endpoint ExternalSourceQuery.

Ejemplo de respuesta para una verificación fallida:

{
    "transactionId": "c3717a3c-32d5-b62b-b5d4-3a092a3dcb84",
    "remainingTries": 1,
    "hit": false,
    "scoreResult": 0,
    "scoreLimit": 0
}

Códigos de respuesta

DocumentQuery

Código HTTP Mensaje Descripción
200 Consulta exitosa. El campo biometricAvailable indica si el documento está disponible para verificación biométrica.
400 (detalle de validación) La solicitud no pudo ser procesada con la información provista. Revisar los campos enviados.
404 No se encontró el documento consultado.
500 An error occurred when querying document types No se lograron obtener los tipos de documentos habilitados desde el backoffice.
500 Document type {documentType} is not available for the query Se intentó consultar con un tipo de documento que no está habilitado para el cliente.
500 The {userEmail} is required No se envió el correo del usuario en la solicitud.
500 Ocurrio un error al consultar el usuario No se logró consultar el usuario en el backoffice.
500 Error de autenticación No se logró obtener el identificador del cliente.
500 No se encontró una sucursal válida dentro de la sesión No se encontró una sucursal válida asociada al usuario o ApiKey (documentos nacionales, TSE).
500 Ocurrio un error con la respuesta de TSE El servicio de TSE no respondió con éxito al consultar el documento (documentos nacionales).
500 Ocurrio un error al conectarse con el servicio de nacionales Excepción al comunicarse con TSE (documentos nacionales).
500 Error en la conexión con el servicio Error de conexión con el proveedor del documento (documentos de extranjería).

BiometricVerification

Código HTTP Mensaje Descripción
200 Verificación biométrica exitosa. hit: true. Incluye datos del documento y un token para consultar fuentes externas.
400 (detalle de validación) La solicitud no pudo ser procesada con la información provista. Revisar los campos enviados.
404 La biometría no coincide con el registro del documento. hit: false. El campo remainingTries indica los intentos restantes.
500 Debe enviar huella o foto La solicitud no incluyó ni fotografía (fullFacePhoto) ni huella (finger + fingerPrint).
500 Intentos máximos alcanzados Se agotaron los intentos de verificación permitidos (remainingTries llegó a 0).
500 Ocurrio un error al verificar el liveness El servicio de liveness no respondió con éxito al procesar la fotografía.
500 Ocurrio un error con el servicio de liveness Excepción al procesar la respuesta del servicio de liveness.
500 Error en la conexión con el servicio Error de conexión con el servicio biométrico (Innovatrics o DGME).
500 Ocurrio un error con la verificación facial Error interno al procesar la verificación facial (DGME).
500 No se encontró una sucursal válida dentro de la sesión No se encontró una sucursal válida asociada al usuario o ApiKey.
500 Ocurrio un error con el servicio de TSE, código: {código}, mensaje: {mensaje} TSE no respondió con éxito o devolvió una respuesta inválida durante la verificación de huella.
500 No se encontró al menos una huella de la persona en TSE TSE no devolvió huellas disponibles para el documento consultado.
500 Ocurrio un error al conectarse con el servicio de nacionales Excepción al comunicarse con TSE durante la verificación de huella (documentos nacionales).

ExternalSourceQuery

Código HTTP Mensaje Descripción
200 Consulta exitosa a la fuente externa.
400 (detalle de validación) La solicitud no pudo ser procesada con la información provista.
401 El token de la sesión ha expirado o se intentó consultar una fuente externa no autorizada para el token. Se debe realizar una nueva verificación biométrica.
404 La persona no fue encontrada No se encontró información en la fuente externa consultada.
500 No coinciden los datos con la transacción de origen El número de documento, tipo o número de transacción no coincide con la solicitud biométrica original.
500 Ocurrio un error con el servicio Error de conexión con la fuente externa (CCSS o CST).

Estructura de error

Los errores devuelven una estructura ProblemDetails con el siguiente formato:

{
    "title": "La solicitud fue recibida pero no pudo ser procesada",
    "status": 500,
    "detail": "Mensaje con el detalle del error"
}

Los errores de validación devuelven una estructura ValidationProblemDetails:

{
    "title": "One or more validation errors occurred.",
    "status": 400,
    "errors": {
        "Campo": ["Descripción del error de validación"]
    }
}

Más información:

Puede ver la documentación actualizada del enpoint en el swagger