Skip to main content
La bitácora de auditoría es el registro de las acciones importantes de tu organización: quién timbró, canceló, descargó o modificó algo, desde dónde y a qué hora. Sirve para resolver dudas internas (“¿quién canceló esta factura?”), para responder a un auditor y para detectar usos que no esperabas.

Quién la puede ver

  • En la web: Configuración → Auditoría. Solo la ven los usuarios con rol owner o admin; un member no tiene acceso.
  • Por API, SDK o CLI: con una sesión de owner o admin, o con una API key que tenga el scope read:audit-logs.
La bitácora es de solo lectura: no existe forma de crear, editar ni borrar entradas desde la aplicación.

Qué se registra

Cada acción de esta lista deja exactamente una entrada, sin importar si se hizo desde la web, la API, el SDK, la CLI o un proceso automático. En la web y en el CSV verás estas acciones con texto claro (“Timbró CFDI”, “Cambió el rol de un miembro”), no con el código. El código solo aparece en la API. Algunas notas:
  • Un CFDI timbrado genera una sola entrada cfdi.stamped, aunque haya reintentos o el timbrado se confirme después de forma automática.
  • cfdi.stamp_failed solo se registra cuando la solicitud llegó al PAC y fue rechazada. Los rechazos previos (datos fiscales inválidos, límite del plan, organización cerrada) no dejan entrada.
  • Los intentos que fallan en el resto de las acciones no se registran, porque no cambiaron nada.
  • No se registran inicios de sesión ni cambios de contraseña.

Qué guarda cada entrada

La bitácora nunca guarda contraseñas del CSD, API keys, secretos de webhooks, tokens ni el contenido de los XML. De la URL de un webhook solo se guarda el dominio y el primer tramo de la ruta, por ejemplo https://hooks.slack.com/services/…. Nunca el usuario, la contraseña, los parámetros (?token=...) ni el resto de la ruta, que es donde suelen ir las credenciales. Si una entrada no se puede guardar en el momento (por ejemplo, por una falla breve de la base de datos), tu acción sigue adelante y la entrada se reintenta sola hasta guardarse, normalmente en uno o dos minutos. En ese caso metadata.recordedLate.occurredAt trae la hora en que ocurrió la acción, y la fecha de la entrada es la hora en que se guardó.

Inmutabilidad

Las entradas no se pueden modificar ni borrar. La base de datos rechaza cualquier UPDATE, DELETE o TRUNCATE sobre la bitácora, incluso desde la propia aplicación, y los usuarios normales no pueden insertar entradas inventadas ni leer las de otra organización. Eliminar una organización nunca borra su historial de auditoría: la bitácora no depende de la organización para conservarse.

Integridad verificada

Además de bloquear los cambios, la bitácora deja evidencia si alguien los logra por un camino excepcional, como un acceso directo y privilegiado a la base de datos. Funciona como una cadena: cada entrada se sella con una huella (hash SHA-256) que se calcula a partir de su propio contenido y de la huella de la entrada anterior de tu organización. Si alguien cambia, borra o mete una entrada en medio, todas las huellas posteriores dejan de coincidir. Para comprobarlo, el panel de Configuración → Auditoría muestra el indicador Integridad verificada, que recorre la cadena completa. Si encuentra un problema, indica el número de la primera entrada afectada. También puedes hacerlo por API:
Si valid es false, firstBrokenSeq es el número (seq) de la primera entrada alterada, borrada o insertada. Ver Verify Audit Log Integrity.

Retención

Las entradas se conservan 5 años.

Exportar a CSV

Desde el panel con el botón Exportar CSV, o por API/SDK/CLI, con los mismos filtros que el listado. El archivo trae las fechas en hora de México y las acciones con su texto en español. Cada exportación se registra a su vez en la bitácora (audit_log.exported). El límite es de 50,000 filas por archivo. Si tu filtro devuelve más, la API responde 422 con el código AUDIT_EXPORT_TOO_LARGE; acota el rango de fechas y vuelve a intentar.

Consultarla por API, SDK o CLI

Necesitas una API key con el scope read:audit-logs (ver Create API Key). Con una API key, la organización se toma de la llave.

API

Una fecha sola (YYYY-MM-DD) se interpreta en hora de México: from empieza a las 00:00 y to incluye todo ese día.

SDK

CLI

Referencia completa: List, Get, Export y Verify.