API para integraciones
Integridad
Verificación de la huella de los registros inalterables.
En esta página
Verificar la cadena de huellas
POST/movimientos/integridad/verify
- Permiso
lectura
Recorre la cadena de huellas de los registros inalterables de tu empresa, recalcula cada huella a partir de lo guardado y dice si está íntegra o cuál es la primera entrada rota.
status: intact: la cadena está entera;entriesdice cuántas entradas se comprobaron.status: broken:brokentrae la primera entrada rota y el motivo (abajo).status: empty: el ajuste nunca se activó; no hay cadena.
lastHash es la huella de la última entrada comprobada (la «huella de la cadena» hoy): guárdala
con tus copias si quieres poder demostrar después qué había registrado en esa fecha. anchored: true indica que la conservación (4 años) ya purgó el principio de la cadena y la verificación
parte de la primera entrada conservada. enabled dice si el ajuste sigue activo.
broken.reason |
Qué significa |
|---|---|
genesis_mismatch |
La entrada 1 no parte de la huella cero. |
sequence_gap |
Falta un número: se borró una entrada (seq es el que falta). |
link_mismatch |
Su huella anterior no es la de la entrada anterior: se alteró esta o la anterior. |
entry_hash_mismatch |
La cabecera no da su huella: se cambió quién, cuándo, qué registro o qué cambio. |
content_hash_mismatch |
El contenido no da su huella: se cambió la instantánea, el motivo o las huellas de los ficheros. |
content_missing |
Falta el contenido de la entrada. |
content_mismatch |
El contenido no es el JSON esperado o es de otro cambio. |
head_mismatch |
La última entrada no es la que dice la cabeza de la cadena: se borraron las últimas (seq es la que debería ser la última). |
Recorre la cadena entera cada vez: no la llames en bucle; basta con una vez al día o tras cerrar el
mes. El cuerpo puede ir vacío o como {}: cualquier campo se ignora.
Con clave API verifica la cadena de la empresa del owner que creó la clave; cada verificación queda auditada a su nombre. Solo lectura.
Errores propios
422 invalid_input: el cuerpo no es un objeto JSON.
Petición
Cuerpo opcional
Sin campos ({}). Cualquier campo se ignora.
object
Ejemplo
curl -sS -X POST "https://app.flotadoc.com/api/movimientos/integridad/verify" \
-H "Authorization: Bearer $FLOTADOC_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Respuesta
200
Resultado de la verificación.
Cabeceras
X-Request-Idstring (uuid)Id de la petición en el historial de la empresa (para soporte).
dataobjectverificationIntegridadVerification
Ejemplo de respuesta: Cadena íntegra
{
"data": {
"verification": {
"tenantId": 4,
"enabled": true,
"since": "2026-10-11T09:00:00.123Z",
"checkedAt": "2026-11-02T10:15:00.000Z",
"status": "intact",
"entries": 1840,
"firstSeq": 1,
"lastSeq": 1840,
"anchored": false,
"lastHash": "9f1c2b3a4d5e6f708192a3b4c5d6e7f8091a2b3c4d5e6f708192a3b4c5d6e7f8",
"broken": null
}
}
}
Ejemplo de respuesta: Cadena rota
{
"data": {
"verification": {
"tenantId": 4,
"enabled": true,
"since": "2026-10-11T09:00:00.123Z",
"checkedAt": "2026-11-02T10:15:00.000Z",
"status": "broken",
"entries": 311,
"firstSeq": 1,
"lastSeq": 311,
"anchored": false,
"lastHash": "4be8d0c2a6f1e3b5d7c9a0b2c4d6e8f0a1b3c5d7e9f0a2b4c6d8e0f1a3b5c7d9",
"broken": {
"seq": 312,
"reason": "content_hash_mismatch",
"recordType": "trip",
"recordId": 812,
"recordedAt": "2026-10-20T07:31:02.512338Z"
}
}
}
}
Además, las respuestas comunes: 401, 403, 404, 422, 429, 503.
Modelos
Objetos que devuelven o reciben las operaciones de esta área. Cada campo enlaza a su modelo.
IntegridadVerificationobject
tenantIdintegerTu empresa.
enabledbooleanSi los registros inalterables están activos ahora.
sincestring (date-time) | nullPrimera activación («Registros inalterables desde»).
nullsi nunca se activaron.checkedAtstring (date-time)Hora de la comprobación (servidor).
statusstringintact: íntegra ·broken: rota (verbroken) ·empty: el ajuste nunca se activó.Valores:
intactbrokenemptyentriesintegerEntradas comprobadas (hasta la rota, si la hay).
firstSeqinteger | nullPrimera entrada comprobada.
lastSeqinteger | nullÚltima entrada comprobada.
anchoredbooleanLa primera conservada no es la 1 (la conservación purgó las anteriores) y su huella anterior hace de ancla.
lastHashstring | nullHuella SHA-256 de la última entrada comprobada (la huella de la cadena hoy).
Patrón:
^[0-9a-f]{64}$brokenIntegridadBrokenEntry | nullPrimera entrada rota, o
null.
IntegridadBrokenEntryobject
seqintegerNúmero de la entrada rota (en
sequence_gap, el que falta; enhead_mismatch, el que debería ser el último).reasonstringValores:
genesis_mismatchsequence_gaplink_mismatchentry_hash_mismatchcontent_hash_mismatchcontent_missingcontent_mismatchhead_mismatchrecordTypestring | nullQué registra la entrada: el propio ajuste, un viaje, un gasto o un cierre de vehículo y mes.
nullenhead_mismatch.Valores:
settingstripexpenseperiodrecordIdinteger | nullId del viaje, del gasto o del cierre;
nullen el ajuste y enhead_mismatch.recordedAtstring (date-time) | nullHora de la entrada (UTC, con microsegundos).
nullenhead_mismatch.
¿Quieres conectar tu sistema?
Cuéntanos qué quieres integrar y lo vemos en una llamada: qué datos necesitas, con qué permisos y cada cuánto.
Si tu empresa ya usa FlotaDoc, el titular puede pedir el acceso desde la web, en Mi cuenta › Integraciones.