Registro de auditoría del Merchant

Enumera el registro de auditoría de un Merchant en el Tokeflow Dashboard — quién cambió qué, cuándo, desde dónde y si la acción se realizó correctamente.

El registro de auditoría es el log de actividad inmutable del Merchant. Todo cambio relevante dentro de un Merchant — un conector creado, una clave de API revocada, un endpoint de webhook actualizado, un perfil de enrutamiento editado — se registra como una entrada de log de auditoría que captura la entidad afectada, la acción realizada, quién (o qué) la realizó, el estado antes y después del cambio, y si la acción se realizó correctamente.

La vista Actividad del Dashboard para un Merchant se basa en el único endpoint de esta página. Las entradas son de solo inserción (append-only) y no pueden editarse ni eliminarse, lo que hace que el registro sea adecuado para revisiones de cumplimiento y análisis forense de incidentes — los campos registrados están alineados con los requisitos de registro de auditoría de PCI DSS, incluido el outcome explícito de cada evento.

Esta página cubre el registro con alcance de Merchant. La actividad a nivel de Organization (que abarca todos los Merchants además de las entidades a nivel de Organization) se encuentra en Registro de auditoría de la Organization, y el acceso programático con claves de API está disponible a través de la API de registros de auditoría pública.

Este endpoint impulsa la interfaz del Tokeflow Dashboard. Se autentica con una Dashboard session (JWT bearer) obtenida al iniciar sesión — consulta Autenticación del Dashboard. No acepta claves de API sk_/pk_.

El objeto de entrada del registro de auditoría

FieldTypeDescription
idstringID del registro de auditoría (UUID).
organization_idstring | nullOrganization a la que pertenece el evento, con prefijo org_.
merchant_idstring | nullMerchant al que pertenece el evento, con prefijo mrc_.
entity_typestringTipo de entidad afectada (p. ej., merchant_connector).
entity_idstring | nullID de la entidad afectada.
actionstringAcción realizada (p. ej., created).
actor_typestringTipo de actor. Uno de: user, system, api_key, psp_webhook.
actor_idstring | nullID del actor (usuario o clave de API). Nulo para eventos anónimos o puramente internos.
before_stateobject | nullEstado antes del cambio. Nulo en la creación.
after_stateobject | nullEstado después del cambio. Nulo en la eliminación.
outcomestringResultado del evento. Uno de: success, failure.
error_messagestring | nullMensaje de error cuando outcome es failure.
ip_addressstring | nullDirección IP del cliente desde donde se originó la acción.
created_atstringMarca de tiempo del evento de auditoría (ISO 8601 UTC).

El par before_state / after_state es lo que hace que una entrada sea revisable: compara (diff) los dos objetos para ver exactamente qué campos cambiaron. Una entrada created tiene before_state: null; una entrada deleted tiene after_state: null.

Tipos de actor

ValueMeaning
userUn usuario con sesión iniciada en el Dashboard realizó la acción.
systemEl propio Tokeflow realizó la acción (p. ej., una transición de ciclo de vida automatizada).
api_keyLa acción llegó a través de la API pública, autenticada con una clave de API.
psp_webhookEl cambio fue provocado por una notificación de un proveedor de pagos conectado.

Endpoints

GET/api/v1/merchant/activity

Merchant

Auth: Dashboard session (JWT bearer). Se requiere membresía del Merchant.

Devuelve una lista paginada de las entradas del registro de auditoría del Merchant, de más reciente a más antigua. El contexto del Merchant proviene del header x-merchant-id, que el Dashboard envía para el Merchant seleccionado actualmente.

Headers

HeaderRequiredDescription
x-merchant-idSíEl Merchant cuyo registro de auditoría se va a listar, con prefijo mrc_. El usuario con sesión iniciada debe ser miembro de este Merchant.

Parámetros de consulta

FieldTypeRequiredDescription
pagenumberNoNúmero de página, indexado desde 1 (valor predeterminado 1, mín. 1).
limitnumberNoElementos por página (valor predeterminado 20, mín. 1, máx. 100).

Ejemplo de solicitud

curl -G https://api.tokeflow.com/api/v1/merchant/activity \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs…" \
  -H "x-merchant-id: mrc_123" \
  --data-urlencode "page=1" \
  --data-urlencode "limit=20"

Ejemplo de respuesta — 200 OK

{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "organization_id": "org_123",
      "merchant_id": "mrc_123",
      "entity_type": "merchant_connector",
      "entity_id": "conn_a1b2c3",
      "action": "created",
      "actor_type": "user",
      "actor_id": "9c1de2f4-77aa-4b0e-9a3d-2f6c8b1e5d90",
      "before_state": null,
      "after_state": {
        "provider_slug": "acquirer_a",
        "status": "active"
      },
      "outcome": "success",
      "error_message": null,
      "ip_address": "203.0.113.42",
      "created_at": "2026-08-10T14:22:05.000Z"
    },
    {
      "id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
      "organization_id": "org_123",
      "merchant_id": "mrc_123",
      "entity_type": "webhook_endpoint",
      "entity_id": "whe_5f8d2c",
      "action": "updated",
      "actor_type": "api_key",
      "actor_id": "b2f7c9a1-4e3d-4a6b-8c5e-1d9f0a7b3c62",
      "before_state": {
        "url": "https://example.com/webhooks/old"
      },
      "after_state": null,
      "outcome": "failure",
      "error_message": "Webhook endpoint URL failed validation",
      "ip_address": "198.51.100.7",
      "created_at": "2026-08-10T13:58:41.000Z"
    }
  ],
  "meta": {
    "page": 1,
    "limit": 20,
    "total": 42,
    "total_pages": 3,
    "has_next": true,
    "has_prev": false
  }
}

A diferencia del envelope de la API pública, este endpoint del dashboard devuelve el payload directamente — un array de entradas en data y los metadatos de paginación en meta.

Metadatos de paginación

FieldTypeDescription
pagenumberNúmero de página actual.
limitnumberNúmero de elementos por página.
totalnumberNúmero total de elementos.
total_pagesnumberNúmero total de páginas.
has_nextbooleanSi hay una página siguiente.
has_prevbooleanSi hay una página anterior.

Las acciones fallidas también se registran. Una entrada con outcome: "failure" significa que el intento fue denegado o generó un error — error_message explica el motivo, y la entidad objetivo permaneció sin cambios. No filtres estas entradas al revisar actividad relevante para la seguridad; los intentos fallidos suelen ser los más interesantes.


Errores

HTTPtypeTypical cause
400validation_errorpage o limit fuera del rango permitido.
401authentication_errorToken de sesión ausente, expirado o inválido — inicia sesión nuevamente.
403authorization_errorEl usuario con sesión iniciada no es miembro del Merchant indicado en x-merchant-id.

Consulta Errores para ver el envelope completo y el catálogo de tipos.

Relacionados

En esta página