Registros de auditoría

Consulta el registro de auditoría inmutable que Tokeflow mantiene para cada evento de cambio y acceso — quién hizo qué, a qué recurso, cuándo, desde dónde y con qué resultado.

Todo cambio de estado y todo acceso sensible en Tokeflow escribe una entrada de registro de auditoría — un registro de solo inserción (append-only) de quién hizo qué a qué recurso. Cada entrada captura al actor (un usuario del Dashboard, una clave de API, el sistema o un webhook de proveedor), la acción realizada, la entidad afectada, el estado antes y después del cambio, la dirección IP del cliente y si la operación se realizó correctamente o falló.

Los registros de auditoría son de solo lectura a través de la API: puedes listarlos y filtrarlos, pero nunca crearlos, modificarlos ni eliminarlos. Úsalos para responder "¿quién cambió este conector?", para reconstruir el historial de un pedido o de un perfil de enrutamiento, o para alimentar tu propio SIEM y tus flujos de generación de informes de cumplimiento. El campo outcome registra el éxito o el fracaso del evento, conforme a PCI DSS 10.3.1.

Los resultados están delimitados por la clave de API con la que te autenticas:

Las claves de Merchant devuelven registros de auditoría solo de ese Merchant. Las claves de Organization devuelven registros de auditoría de toda la Organization — pasa el parámetro de consulta opcional merchant_id para profundizar en un Merchant específico. Enviar merchant_id con una clave de Merchant no tiene efecto; se ignora.

El objeto de registro de auditoría

FieldTypeDescription
idstringID del registro de auditoría (UUID).
organization_idstring | nullOrganization a la que pertenece el evento.
merchant_idstring | nullMerchant al que pertenece el evento. Nulo para eventos a nivel de Organization.
entity_typestringTipo de entidad afectada. Consulta Tipos de entidad.
entity_idstring | nullID de la entidad afectada.
actionstringAcción realizada. Consulta Acciones.
actor_typestringTipo de actor que realizó la acción (p. ej., user, system, api_key, psp_webhook).
actor_idstring | nullID del actor — un UUID de usuario o de clave de API. Nulo para eventos anónimos o iniciados por el sistema.
before_stateobject | nullEstado de la entidad antes del cambio. Nulo en la creación.
after_stateobject | nullEstado de la entidad después del cambio. Nulo en la eliminación.
outcomestringResultado del evento (PCI DSS 10.3.1): success o failure.
error_messagestring | nullMensaje de error cuando outcome es failure. Nulo en caso contrario.
ip_addressstring | nullDirección IP del cliente desde donde se originó la solicitud.
created_atstringMarca de tiempo del evento de auditoría (ISO 8601 UTC).

Comparar before_state y after_state te muestra exactamente qué cambió un evento determinado — para la activación de un conector, por ejemplo, verías el estado antiguo y el nuevo uno junto al otro.

Tipos de entidad

El campo (y filtro) entity_type acepta:

organization, merchant, user, auth_session, merchant_connector, routing_profile, routing_rule_node, payment_instrument, order, api_key, user_membership, webhook_config, transaction, transaction_attempts, transaction_refund, transaction_refunds, audit_log.

Acciones

El campo (y filtro) action acepta los siguientes valores, agrupados aquí según lo que describen:

GrupoValores
Ciclo de vida de la entidadcreated, updated, deleted, activated, deactivated, revoked, status_changed
Acceso a datoslist, read, retrieve
Operaciones de pagocreate, capture, void, refund
Autenticaciónlogin_success, login_failure, logout, password_changed, account_locked, account_unlocked, token_issued, token_refreshed, token_revoked

Endpoints

GET/api/v1/audit-logs

OrgMerchant

Auth: clave de Organization (en toda la Organization; merchant_id opcional para profundizar) o clave de Merchant (sus propios registros). Scope: audit_logs:read.

Devuelve una lista paginada de entradas de registro de auditoría, delimitada por la clave de API autenticada. Combina filtros para acotar el registro — por ejemplo, todos los inicios de sesión fallidos de enero, o todos los cambios realizados alguna vez en un conector específico.

Parámetros de consulta

FieldTypeRequiredDescription
pageintegerNoNúmero de página, indexado desde 1 (predeterminado 1).
limitintegerNoElementos por página (predeterminado 20, máx. 100).
merchant_idstringNoProfundiza en un Merchant específico. Solo para claves de Organization — se ignora para claves de Merchant.
entity_typestringNoFiltra por el tipo de entidad afectada. Consulta Tipos de entidad.
entity_idstringNoFiltra por el ID de la entidad afectada (UUID).
actionstringNoFiltra por la acción. Consulta Acciones.
actor_typestringNoFiltra por el tipo de actor: user, system, scheduler o psp_webhook.
actor_idstringNoFiltra por el ID del actor — un UUID de usuario o de clave de API.
outcomestringNoFiltra por el resultado (PCI DSS 10.3.1): success o failure.
start_datestringNoEventos a partir de esta marca de tiempo, inclusive (ISO 8601, p. ej., 2025-01-01T00:00:00.000Z).
end_datestringNoEventos hasta esta marca de tiempo, inclusive (ISO 8601, p. ej., 2025-12-31T23:59:59.999Z).

Ejemplo de solicitud

curl -G https://api.tokeflow.com/api/v1/audit-logs \
  -H "Authorization: Bearer sk_live_org_…" \
  --data-urlencode "merchant_id=mrc_123" \
  --data-urlencode "entity_type=merchant_connector" \
  --data-urlencode "outcome=success" \
  --data-urlencode "start_date=2026-01-01T00:00:00.000Z" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20"

Ejemplo de respuesta — 200 OK

El endpoint devuelve las entradas coincidentes en data (las más recientes primero) y los metadatos de paginación en meta:

{
  "data": [
    {
      "id": "9d3f2c1e-7a45-4b8e-9c12-3f6a8d0e5b21",
      "organization_id": "org_123",
      "merchant_id": "mrc_123",
      "entity_type": "merchant_connector",
      "entity_id": "1f7c9a2d-5e83-4b06-a914-c2d7e8f0a634",
      "action": "activated",
      "actor_type": "user",
      "actor_id": "550e8400-e29b-41d4-a716-446655440000",
      "before_state": { "status": "inactive" },
      "after_state": { "status": "active" },
      "outcome": "success",
      "error_message": null,
      "ip_address": "203.0.113.42",
      "created_at": "2026-01-15T12:30:00.000Z"
    },
    {
      "id": "4b8a1d6f-2c93-47e5-b120-9e5f7a3c8d16",
      "organization_id": "org_123",
      "merchant_id": "mrc_123",
      "entity_type": "merchant_connector",
      "entity_id": "1f7c9a2d-5e83-4b06-a914-c2d7e8f0a634",
      "action": "updated",
      "actor_type": "system",
      "actor_id": null,
      "before_state": { "priority": 2 },
      "after_state": { "priority": 1 },
      "outcome": "success",
      "error_message": null,
      "ip_address": null,
      "created_at": "2026-01-14T09:12:44.000Z"
    }
  ],
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 87,
    "total_pages": 5,
    "has_next": true,
    "has_prev": false
  }
}

Los eventos con error también se registran. Una entrada login_failure, por ejemplo, incluye outcome: "failure" y un error_message legible por humanos, junto con la ip_address de origen — útil para detectar intentos de fuerza bruta contra cuentas del Dashboard.


Errores

Todos los errores usan el envoltorio estándar. Los casos más comunes para este recurso:

HTTPtypeCausa típica
400validation_errorValor de filtro inválido — por ejemplo, un entity_type desconocido o una fecha con formato incorrecto.
401authentication_errorClave de API ausente o inválida.
403authorization_errorLa clave carece del scope requerido.
429rate_limit_errorLímite de tasa excedido — reduce la frecuencia exponencialmente.

Consulta Errores para conocer el envoltorio completo y el catálogo de tipos.

Relacionado

En esta página