Trazabilidad y bitácora de auditoría
Cómo Vecnet registra una bitácora de solo escritura — cada petición y cada evento de pago, enlazados por correlation_id y request_id.
Vecnet escribe una bitácora de auditoría de solo escritura en el registro de
events. Ahí caen dos tipos de cosas:
- Cada petición a la API: un evento
http.requestpor llamada HTTP. - Cada evento de pago o de dominio:
payment.approved,checkout_session.createdy el resto.
Cada evento es inmutable una vez escrito, lleva marca de tiempo y queda cosido
al resto del ciclo de vida de un pago por correlation_id, y a una sola
llamada HTTP por request_id. Juntos permiten reconstruir exactamente qué
pasó, en orden, con cualquier pago.
Los números de tarjeta (PAN) nunca se registran. Los eventos guardan solo
la marca y los últimos cuatro dígitos (por ejemplo visa / 4242).
Cómo trabajan juntos los dos IDs
correlation_idenlaza el ciclo de vida completo de un pago: la sesión de checkout, el intento, la aprobación o el rechazo y cualquier entrega de webhook. También coincide contransactions.correlation_id, así que puedes pivotar entre la bitácora y el registro de la transacción.request_ididentifica una sola petición HTTP. Se devuelve en el encabezado de respuestaX-Request-Id, para que tu sistema lo cite al reportar un problema.
Un ciclo de vida tiene un correlation_id pero muchos request_id
(uno por llamada HTTP). Filtra por correlation_id para ver la historia
completa; filtra por request_id para acercarte a una sola llamada.
El encabezado X-Request-Id
Cada respuesta de la API incluye un encabezado X-Request-Id cuyo valor
coincide con el request_id registrado en el evento http.request de esa
llamada. Captúralo en tus logs: es lo primero que te pedirá soporte para
encontrar tu petición exacta.
const res = await fetch("https://api.vecnet.io/checkout/v1/sessions", { method: "POST", headers, body });
console.log("vecnet request", res.headers.get("X-Request-Id"), res.status);Reconstruir el ciclo de vida de un pago
La bitácora se consulta con GET /api/events. Para repetir todo lo que pasó
con un solo pago, filtra por su correlation_id (el mismo valor que lleva la
transacción), ordenado ascendentemente por tiempo.
curl "https://api.vecnet.io/api/events?correlation_id=corr_8f3c2a91&order=occurred_at&dir=asc" \
-H "Authorization: Bearer <jwt>" \
-H "X-Merchant-Id: mrc_3f9a2c1b"La respuesta es el sobre de lista estándar: un arreglo data de eventos más los
metadatos de paginación. Un pago en línea con tarjeta típico se reconstruye en
cuatro eventos:
{
"data": [
{
"action": "checkout_session.created",
"category": "checkout",
"correlation_id": "corr_8f3c2a91",
"request_id": "req_a1b2c3d4",
"target_id": "cs_7Hn2pQ",
"status_code": 201,
"amount_cents": 150000,
"currency": "MXN"
},
{
"action": "checkout_session.viewed",
"category": "checkout",
"correlation_id": "corr_8f3c2a91",
"request_id": "req_e5f6g7h8",
"target_id": "cs_7Hn2pQ"
},
{
"action": "payment.attempted",
"category": "payment",
"correlation_id": "corr_8f3c2a91",
"request_id": "req_i9j0k1l2",
"target_id": "cs_7Hn2pQ",
"metadata": { "brand": "visa", "last4": "4242" }
},
{
"action": "payment.approved",
"category": "payment",
"correlation_id": "corr_8f3c2a91",
"request_id": "req_i9j0k1l2",
"target_id": "txn_9Rm3sT",
"metadata": { "brand": "visa", "last4": "4242" }
}
],
"count": 4,
"limit": 50,
"offset": 0
}Los eventos payment.attempted y payment.approved comparten un request_id
(vinieron de la misma llamada), mientras que los cuatro comparten un
correlation_id, así que se leen como un solo ciclo de vida coherente.
Filtros útiles
GET /api/events acepta los parámetros de lista estándar más filtros propios de
la bitácora:
correlation_id: el ciclo de vida completo de un pago.request_id: una sola llamada HTTP.action: por ejemplopayment.declined,checkout_session.created.category: por ejemplopayment,checkout,webhook,error.target_id: todo lo que tocó un objeto (una sesión, una transacción).from/to: rango de fechas (YYYY-MM-DD).
# Todos los rechazos de un comercio en un rango de fechas
curl "https://api.vecnet.io/api/events?action=payment.declined&from=2026-06-01&to=2026-06-22" \
-H "Authorization: Bearer <jwt>" \
-H "X-Merchant-Id: mrc_3f9a2c1b"La consulta de GET /api/events está disponible desde el panel para
operadores, que limitan el alcance a un comercio con X-Merchant-Id. Si
integras por API, cita el X-Request-Id o el correlation_id a soporte y
reconstruimos el caso contigo.