Endpoints de la API. Especificación exacta de cada operación de la API v1 (parámetros, cuerpo, respuestas y ejemplos), generada del documento OpenAPI con el que se valida cada respuesta real. Los procedimientos completos están en Guías.
/audit-events
Eventos de la bitácora de auditoría
Los eventos posteriores a after_seq, en orden de seq. Continúa con next_after_seq; cuando es null, ya no
hay más por ahora. Un SIEM que consulta cada minuto guarda el último seq recibido.
- Alcance (cliente de integración)
audit:read- Permiso (token de usuario)
audit.view- Idempotency-Key
- No aplica
- Requisitos
- feature:enterprise.audit
Parámetros de consulta
-
after_seqinteger valor por omisión:0Último seq ya recibido (0 al empezar).
-
limitinteger valor por omisión:100Eventos por página.
Respuestas
200 Eventos en orden.
-
dataarray de objetos obligatorio15 campos de
data-
seqinteger obligatorioNúmero de secuencia sin huecos.
-
occurred_atstring obligatorioUTC con microsegundos y Z.
-
actor_typestring obligatorioValores:user,device,api_client,system,hub_admin -
actor_idstring | null -
actor_labelstring | null -
actionstring obligatorio -
target_typestring | null -
target_idstring | null -
beforeobjeto | array de textos | null -
afterobjeto | array de textos | null -
ipstring | null -
user_agentstring | null -
request_idstring | null -
prev_hashstring obligatorio -
hashstring obligatorio
-
-
next_after_seqinteger | null obligatorio
401 Falta el token o no es válido.
Cuerpo: el sobre de error.
402 La función no está en el plan de la empresa, o la cuenta está suspendida o cancelada.
Cuerpo: el sobre de error.
403
Al cliente le falta el alcance (missing_scope), al usuario el permiso (forbidden), o el token de usuario no
tiene acceso a la ruta (client_not_allowed: aplicación móvil o usuario con verificación en dos pasos).
Cuerpo: el sobre de error.
422
Datos no válidos (validation_failed), una llave de idempotencia reutilizada con otra solicitud
(idempotency_key_reused) o una regla de negocio que bloquea la operación (rule_blocked).
Cuerpo: el sobre de error.
429
Se superó el límite por minuto. Reintente después de los segundos de Retry-After.
Cuerpo: el sobre de error.
Probar
Probar con una instancia
curl "https://empresa.chainlink.mx/api/v1/audit-events" \
-H "Authorization: Bearer $CHAINLINK_TOKEN" \
-H "Accept: application/json"
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://empresa.chainlink.mx/api/v1/audit-events', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('CHAINLINK_TOKEN'),
'Accept' => 'application/json',
],
]);
$data = json_decode((string) $response->getBody(), true);
const response = await fetch('https://empresa.chainlink.mx/api/v1/audit-events', {
headers: {
Authorization: `Bearer ${process.env.CHAINLINK_TOKEN}`,
Accept: 'application/json',
},
});
const data = await response.json();
import os
import requests
response = requests.get(
"https://empresa.chainlink.mx/api/v1/audit-events",
headers={
"Authorization": f"Bearer {os.environ['CHAINLINK_TOKEN']}",
"Accept": "application/json",
},
)
data = response.json()
{
"data": [
{
"seq": 1201,
"occurred_at": "2026-10-17T16:30:00.123456Z",
"actor_type": "user",
"actor_id": "7",
"actor_label": "Carlos Méndez",
"action": "settings.changed",
"target_type": "setting",
"target_id": "receiving.over_tolerance_pct",
"before": {
"value": 5
},
"after": {
"value": 7
},
"ip": "10.0.0.8",
"user_agent": "Mozilla/5.0",
"request_id": null,
"prev_hash": "3f1c0b0e9d2a4c51b7f2a8e6d4c3b2a1908f7e6d5c4b3a291807f6e5d4c3b2a1",
"hash": "9a8b7c6d5e4f30211f2e3d4c5b6a79880a1b2c3d4e5f60718293a4b5c6d7e8f9"
}
],
"next_after_seq": null
}
{
"error": {
"code": "unauthenticated",
"message": "Falta el token de acceso o ya no es válido.",
"doc_url": "https://chainlink.mx/developers/errores#unauthenticated",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "Falta el token de acceso o ya no es válido."
}
{
"error": {
"code": "feature_not_in_plan",
"message": "Función no disponible en tu plan actual.",
"feature": "webhooks.enabled",
"upgrade_url": "/billing/plans",
"doc_url": "https://chainlink.mx/developers/errores#feature_not_in_plan",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "Función no disponible en tu plan actual."
}
{
"error": {
"code": "missing_scope",
"message": "El cliente no tiene el alcance products:write.",
"scope": "products:write",
"doc_url": "https://chainlink.mx/developers/errores#missing_scope",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "El cliente no tiene el alcance products:write."
}
{
"error": {
"code": "validation_failed",
"message": "El campo name es obligatorio.",
"field": "name",
"doc_url": "https://chainlink.mx/developers/errores#validation_failed",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [
{
"field": "name",
"message": "El campo name es obligatorio."
}
],
"message": "El campo name es obligatorio."
}
{
"error": {
"code": "rate_limited",
"message": "Superaste el límite de solicitudes por minuto. Espera los segundos que indica Retry-After.",
"doc_url": "https://chainlink.mx/developers/errores#rate_limited",
"request_id": "req_01j9x2m4k7q8r5t6v3w0y1z2a3"
},
"errors": [],
"message": "Superaste el límite de solicitudes por minuto. Espera los segundos que indica Retry-After."
}