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
| Field | Type | Description |
|---|---|---|
id | string | ID del registro de auditoría (UUID). |
organization_id | string | null | Organization a la que pertenece el evento, con prefijo org_. |
merchant_id | string | null | Merchant al que pertenece el evento, con prefijo mrc_. |
entity_type | string | Tipo de entidad afectada (p. ej., merchant_connector). |
entity_id | string | null | ID de la entidad afectada. |
action | string | Acción realizada (p. ej., created). |
actor_type | string | Tipo de actor. Uno de: user, system, api_key, psp_webhook. |
actor_id | string | null | ID del actor (usuario o clave de API). Nulo para eventos anónimos o puramente internos. |
before_state | object | null | Estado antes del cambio. Nulo en la creación. |
after_state | object | null | Estado después del cambio. Nulo en la eliminación. |
outcome | string | Resultado del evento. Uno de: success, failure. |
error_message | string | null | Mensaje de error cuando outcome es failure. |
ip_address | string | null | Dirección IP del cliente desde donde se originó la acción. |
created_at | string | Marca 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
| Value | Meaning |
|---|---|
user | Un usuario con sesión iniciada en el Dashboard realizó la acción. |
system | El propio Tokeflow realizó la acción (p. ej., una transición de ciclo de vida automatizada). |
api_key | La acción llegó a través de la API pública, autenticada con una clave de API. |
psp_webhook | El cambio fue provocado por una notificación de un proveedor de pagos conectado. |
Endpoints
GET/api/v1/merchant/activity
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
| Header | Required | Description |
|---|---|---|
x-merchant-id | Sí | 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
| Field | Type | Required | Description |
|---|---|---|---|
page | number | No | Número de página, indexado desde 1 (valor predeterminado 1, mín. 1). |
limit | number | No | Elementos 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
| Field | Type | Description |
|---|---|---|
page | number | Número de página actual. |
limit | number | Número de elementos por página. |
total | number | Número total de elementos. |
total_pages | number | Número total de páginas. |
has_next | boolean | Si hay una página siguiente. |
has_prev | boolean | Si 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
| HTTP | type | Typical cause |
|---|---|---|
400 | validation_error | page o limit fuera del rango permitido. |
401 | authentication_error | Token de sesión ausente, expirado o inválido — inicia sesión nuevamente. |
403 | authorization_error | El 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
- Registro de auditoría de la Organization — actividad en toda la Organization.
- API de registros de auditoría — acceso programático con claves de API.
- Autenticación del Dashboard — cómo se establecen las sesiones.
- Organizations y Merchants — cómo funcionan la membresía y los roles.