Referencia de la API: arquitectura, campos y códigos de estado

Los componentes comunes a todas las operaciones: flujo de solicitudes, campos JSON comunes, tipos de plantilla, códigos de estado, puertos y cifrado del payload.

Arquitectura de la API

PropiedadAPI de callbackAPI RESTful
IniciadorDispositivo / Biometric GatewaySu servidor
DirecciónDispositivo → Su servidorSu servidor → Dispositivo
LatenciaTiempo real (milisegundos)~15 segundos
DisparadorEvento biométrico en el dispositivoHTTP POST desde su código
Su rolRecibir y confirmarEnviar el comando y consultar/esperar la respuesta
Cuerpo de la respuesta{"status":"done"}{"Status":"done","OperationID":"…","StatusCode":0}
Comportamiento sin conexiónAlmacenado en caché por el motor; se entrega cuando el servidor vuelve a estar en líneaPuesto en cola por el motor; se entrega cuando el dispositivo se reconecta

Campos comunes

Todas las solicitudes, tanto de callback como RESTful, comparten estos campos de nivel superior.

AuthTokenString. Un token de 32 caracteres que identifica y autentica las solicitudes de un dispositivo concreto. Se configura en el portal API Monitor. Valídelo en cada callback entrante.
OperationIDString. Un identificador único de esta instancia de operación (p. ej. "j95xfejt3vr1"). Las respuestas RESTful devuelven el mismo OperationID para que pueda asociar solicitudes y respuestas.
TimeString. Marca de tiempo UTC del momento en que se procesó el evento, con el formato YYYY-MM-DD HH:mm:ss GMT +0000. Las marcas de tiempo locales del dispositivo dentro del payload pueden usar un desfase horario distinto.
stgid (parámetro de consulta)String. Service Tag ID: identifica el dispositivo de destino en las llamadas a la API RESTful. Páselo como parámetro de consulta de la URL al endpoint que figura en su cuenta de API Monitor: POST https://<your-endpoint>?stgid=YOUR_TAG_ID.

Tipos de plantilla

Los datos biométricos y de credenciales se transportan en un arreglo Template. Cada elemento tiene un campo Type:

Comportamiento de combinación de plantillas — Importante para los controladores de callback
Cuando los datos de usuario se envían desde el dispositivo (operaciones de callback n.º 3–9), las plantillas pueden llegar una a una o en grupos, a lo largo de varios callbacks. Cada callback no contiene el conjunto completo de plantillas del usuario: solo incluye las plantillas añadidas o modificadas.

Su servidor debe combinar (merge) las plantillas entrantes con las plantillas ya almacenadas de ese usuario. La clave única de cada plantilla es Type + Index. Por ejemplo:
• El callback 1 llega con Fingerprint Index 0 → almacénelo
• El callback 2 llega con Face Index 0 + Card → combine, no sobrescriba la huella
• El callback 3 llega con Fingerprint Index 0 (datos nuevos) → actualice la huella existente en Index 0
Nunca reemplace todas las plantillas en un callback: haga siempre un upsert por Type + Index.
TipoDescripciónCampos adicionales clave
CardNúmero de tarjeta RFID / de proximidadData (cadena con el número de tarjeta)
PasswordPIN numéricoData (cadena del PIN)
FingerprintPlantilla de huella dactilar — binario codificado en Base64Index (índice del dedo 0–9), Size, Data
FacePlantilla facial — JPEG o binario codificado en Base64Index, Size, Data
PalmPlantilla de venas de la palma — binario codificado en Base64Index, Data
UserPhotoFoto de perfil del usuario — JPEG codificado en Base64Data

Códigos de estado de la respuesta

Las respuestas de la API RESTful incluyen un StatusCode numérico. Las respuestas de la API de callback siempre usan la forma simple {"status":"done"}, sea cual sea el resultado.

CódigoEstadoDescripción
0ÉxitoLa operación se completó correctamente.
1Datos de solicitud no válidosEl cuerpo JSON está mal formado o contiene valores no válidos.
2Service Tag ID no válidoEl parámetro de consulta stgid no coincide con ningún dispositivo registrado.
3Solicitud no válidaLa estructura de la solicitud no coincide con el formato esperado de la operación.
4Cifrado no válidoNo se pudo descifrar el payload cifrado (AES-256). Compruebe su clave de cifrado.
5Dispositivo sin conexiónEl dispositivo de destino no está conectado actualmente al Biometric Gateway.
6Tiempo de espera de la operación agotadoEl dispositivo no confirmó el comando dentro del tiempo de espera.
7AuthToken no válidoEl AuthToken de la solicitud no coincide con el token configurado del dispositivo.
8El usuario ya existeSe intentó una operación Add para un UserID que ya existe en el dispositivo.
9Usuario no encontradoEl UserID especificado no existe en el dispositivo.
10Error de plantillaLos datos de la plantilla biométrica están dañados o tienen un formato no admitido.
11Memoria del dispositivo llenaEl dispositivo ha alcanzado su capacidad máxima de usuarios o plantillas.
13Clave de seguridad no válidaLa clave de seguridad configurada en API Monitor no coincide.
15Función no compatibleEl modelo de este dispositivo o el modo de comunicación no admite la operación solicitada.
999Error desconocidoSe produjo un error inesperado. Póngase en contacto con el soporte de Cams indicando el OperationID.

Puertos admitidos

Para recibir información de asistencia en tiempo real, su servidor debe exponer un endpoint HTTP(S) al que pueda acceder el Cams Protocol Engine.

PuertoProtocoloUso
80HTTPProducción. Asocie su URL de callback al puerto 80. Se configura en API Monitor y se invoca automáticamente en cada marcación.
443HTTPSProducción (seguro). HTTPS con un certificado SSL válido. Recomendado para producción.
8123HTTPSolo para pruebas. Puerto no estándar disponible temporalmente durante el desarrollo.
Se recomienda HTTPS. Use HTTPS con un certificado SSL válido en producción. Asegúrese de que la renovación sea automática y no requiera reiniciar el servidor.

Datos de ejemplo

Los payloads de ejemplo de solicitud y respuesta de las 38 operaciones están documentados arriba, en la sección de cada operación. Para una vista consolidada:

Esta páginaCada sección de operación anterior incluye JSON de solicitud y respuesta listo para copiar, con datos de ejemplo.
Página de ejemplos heredadabiometric-web-api-sample-request-response.html — selector desplegable para cada operación.

Cifrado

Se puede habilitar el cifrado AES-256 opcional para todos los datos intercambiados entre el Cams Protocol Engine y su servidor.

AlgoritmoAES-256 en modo ECB con relleno PKCS5 (AES/ECB/PKCS5PADDING).
Configuración de la claveEstablezca su clave como Security Key en API Monitor. Una vez configurada, todos los payloads JSON sin procesar se cifran.
CodificaciónLos payloads cifrados se codifican en Base64 para un transporte HTTP seguro.

Ejemplo en Java

Cifrar / descifrar (Java)
// Encryption
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
SecretKeySpec keySpec = new SecretKeySpec(securityKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
String encrypted = Base64.getEncoder().encodeToString(cipher.doFinal(rawJson.getBytes("UTF-8")));

// Decryption
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = Base64.getDecoder().decode(encryptedPayload);
String decrypted = new String(cipher.doFinal(decoded), "UTF-8");
Importante: Cuando el cifrado está habilitado, descifre los payloads de callback entrantes y cifre los cuerpos de solicitud RESTful salientes con la misma clave.