Saltar al contenido
FlotaDoc

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; entries dice cuántas entradas se comprobaron.
  • status: broken: broken trae 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).

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

  • tenantIdinteger

    Tu empresa.

  • enabledboolean

    Si los registros inalterables están activos ahora.

  • sincestring (date-time) | null

    Primera activación («Registros inalterables desde»). null si nunca se activaron.

  • checkedAtstring (date-time)

    Hora de la comprobación (servidor).

  • statusstring

    intact: íntegra · broken: rota (ver broken) · empty: el ajuste nunca se activó.

    Valores: intact broken empty

  • entriesinteger

    Entradas comprobadas (hasta la rota, si la hay).

  • firstSeqinteger | null

    Primera entrada comprobada.

  • lastSeqinteger | null

    Última entrada comprobada.

  • anchoredboolean

    La primera conservada no es la 1 (la conservación purgó las anteriores) y su huella anterior hace de ancla.

  • lastHashstring | null

    Huella SHA-256 de la última entrada comprobada (la huella de la cadena hoy).

    Patrón: ^[0-9a-f]{64}$

  • Primera entrada rota, o null.

IntegridadBrokenEntryobject

  • seqinteger

    Número de la entrada rota (en sequence_gap, el que falta; en head_mismatch, el que debería ser el último).

  • reasonstring

    Valores: genesis_mismatch sequence_gap link_mismatch entry_hash_mismatch content_hash_mismatch content_missing content_mismatch head_mismatch

  • recordTypestring | null

    Qué registra la entrada: el propio ajuste, un viaje, un gasto o un cierre de vehículo y mes. null en head_mismatch.

    Valores: settings trip expense period

  • recordIdinteger | null

    Id del viaje, del gasto o del cierre; null en el ajuste y en head_mismatch.

  • recordedAtstring (date-time) | null

    Hora de la entrada (UTC, con microsegundos). null en head_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.

Habla con nosotros