Skip to main content
GET
/
events
/
user
/
stats
Estadísticas
curl --request GET \
  --url http://api.gu1.ai/events/user/stats \
  --header 'Authorization: Bearer <token>'
{
  "success": true,
  "stats": [
    {
      "stats[].event_type": "<string>",
      "stats[].count": 123,
      "stats[].last_occurrence": "<string>"
    }
  ]
}

Documentation Index

Fetch the complete documentation index at: https://docs.gu1.ai/llms.txt

Use this file to discover all available pages before exploring further.

Resumen

Recupera estadísticas agregadas sobre eventos de usuario, agrupados por tipo de evento. Este endpoint proporciona una vista rápida de la distribución de eventos, conteos y timestamps de última ocurrencia, perfecto para construir dashboards y monitorear patrones de actividad de usuarios.

Endpoint

GET https://api.gu1.ai/events/user/stats

Autenticación

Requiere una clave API válida en el encabezado de Authorization:
Authorization: Bearer YOUR_API_KEY

Parámetros de Consulta

user_id
string
Filtra estadísticas por identificador de usuario. Si no se proporciona, devuelve estadísticas de todos los usuarios en tu organización.Ejemplo: ?user_id=user_12345

Respuesta

success
boolean
Indica si la solicitud fue exitosa
stats
array
Array de objetos de estadísticas agrupados por tipo de evento
stats[].event_type
string
El tipo de evento (ej., “LOGIN_SUCCESS”, “TRANSFER_SUCCESS”)
stats[].count
number
Número total de eventos de este tipo
stats[].last_occurrence
string
Timestamp del evento más reciente de este tipo (ISO 8601)

Ejemplos

Obtener Estadísticas para Todos los Usuarios

curl https://api.gu1.ai/events/user/stats \
  -H "Authorization: Bearer YOUR_API_KEY"

Obtener Estadísticas para Usuario Específico

curl "https://api.gu1.ai/events/user/stats?user_id=user_12345" \
  -H "Authorization: Bearer YOUR_API_KEY"

Ejemplo de Respuesta

{
  "success": true,
  "stats": [
    {
      "event_type": "LOGIN_SUCCESS",
      "count": 45,
      "last_occurrence": "2026-01-30T14:30:00Z"
    },
    {
      "event_type": "LOGIN_FAILED",
      "count": 3,
      "last_occurrence": "2026-01-30T08:15:00Z"
    },
    {
      "event_type": "TRANSFER_SUCCESS",
      "count": 12,
      "last_occurrence": "2026-01-30T12:00:00Z"
    },
    {
      "event_type": "PROFILE_UPDATED",
      "count": 2,
      "last_occurrence": "2026-01-25T10:30:00Z"
    },
    {
      "event_type": "PASSWORD_CHANGE",
      "count": 1,
      "last_occurrence": "2026-01-20T16:45:00Z"
    }
  ]
}

Respuestas de Error

401 Unauthorized

{
  "success": false,
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Invalid or missing API key"
  }
}

403 Forbidden

{
  "success": false,
  "error": {
    "code": "FORBIDDEN",
    "message": "Insufficient permissions to read events"
  }
}

500 Internal Server Error

{
  "success": false,
  "error": {
    "code": "STATS_FETCH_FAILED",
    "message": "Failed to fetch event statistics"
  }
}

Casos de Uso

Resumen de Dashboard

Construye un dashboard mostrando la distribución de eventos:
async function buildEventDashboard(userId) {
  const response = await fetch(
    `https://api.gu1.ai/events/user/stats?user_id=${userId}`,
    {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    }
  );

  const data = await response.json();

  // Agrupa por categoría
  const authEvents = data.stats.filter(s =>
    ['LOGIN_SUCCESS', 'LOGIN_FAILED', 'LOGOUT'].includes(s.event_type)
  );

  const transferEvents = data.stats.filter(s =>
    ['TRANSFER_SUCCESS', 'TRANSFER_FAILED'].includes(s.event_type)
  );

  return {
    authentication: {
      total: authEvents.reduce((sum, e) => sum + e.count, 0),
      events: authEvents
    },
    transfers: {
      total: transferEvents.reduce((sum, e) => sum + e.count, 0),
      events: transferEvents
    }
  };
}

Monitoreo de Fraude

Monitorea patrones de actividad sospechosa:
async function detectSuspiciousActivity(userId) {
  const response = await fetch(
    `https://api.gu1.ai/events/user/stats?user_id=${userId}`,
    {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    }
  );

  const data = await response.json();
  const alerts = [];

  // Verifica intentos de inicio de sesión fallidos
  const failedLogins = data.stats.find(s => s.event_type === 'LOGIN_FAILED');
  if (failedLogins && failedLogins.count > 5) {
    alerts.push({
      type: 'HIGH_FAILED_LOGINS',
      count: failedLogins.count,
      lastOccurrence: failedLogins.last_occurrence
    });
  }

  // Verifica actividad de transferencias
  const transfers = data.stats.find(s => s.event_type === 'TRANSFER_SUCCESS');
  if (transfers && transfers.count > 10) {
    alerts.push({
      type: 'HIGH_TRANSFER_VOLUME',
      count: transfers.count,
      lastOccurrence: transfers.last_occurrence
    });
  }

  return alerts;
}

Reporte de Actividad de Usuario

Genera reportes de actividad:
async function generateActivityReport(userId) {
  const response = await fetch(
    `https://api.gu1.ai/events/user/stats?user_id=${userId}`,
    {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    }
  );

  const data = await response.json();

  const report = {
    userId,
    generatedAt: new Date().toISOString(),
    totalEvents: data.stats.reduce((sum, s) => sum + s.count, 0),
    eventsByType: data.stats.map(s => ({
      type: s.event_type,
      count: s.count,
      lastActivity: s.last_occurrence
    })),
    mostRecentActivity: data.stats.reduce((latest, s) =>
      new Date(s.last_occurrence) > new Date(latest.last_occurrence)
        ? s
        : latest
    )
  };

  return report;
}

Métricas de Análisis

Calcula métricas clave:
async function calculateMetrics(userId) {
  const response = await fetch(
    `https://api.gu1.ai/events/user/stats?user_id=${userId}`,
    {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    }
  );

  const data = await response.json();

  // Calcula tasas de éxito
  const loginSuccess = data.stats.find(s => s.event_type === 'LOGIN_SUCCESS')?.count || 0;
  const loginFailed = data.stats.find(s => s.event_type === 'LOGIN_FAILED')?.count || 0;
  const loginSuccessRate = loginSuccess / (loginSuccess + loginFailed) * 100;

  const transferSuccess = data.stats.find(s => s.event_type === 'TRANSFER_SUCCESS')?.count || 0;
  const transferFailed = data.stats.find(s => s.event_type === 'TRANSFER_FAILED')?.count || 0;
  const transferSuccessRate = transferSuccess / (transferSuccess + transferFailed) * 100;

  return {
    loginSuccessRate: loginSuccessRate.toFixed(2) + '%',
    transferSuccessRate: transferSuccessRate.toFixed(2) + '%',
    totalLogins: loginSuccess + loginFailed,
    totalTransfers: transferSuccess + transferFailed
  };
}

Análisis Comparativo

Compara actividad entre usuarios:
async function compareUsers(userIds) {
  const userStats = await Promise.all(
    userIds.map(async userId => {
      const response = await fetch(
        `https://api.gu1.ai/events/user/stats?user_id=${userId}`,
        {
          headers: { 'Authorization': `Bearer ${API_KEY}` }
        }
      );
      const data = await response.json();
      return {
        userId,
        totalEvents: data.stats.reduce((sum, s) => sum + s.count, 0),
        stats: data.stats
      };
    })
  );

  // Ordena por actividad total
  return userStats.sort((a, b) => b.totalEvents - a.totalEvents);
}

Ejemplos de Visualización

Preparación de Datos para Gráficos

Prepara datos para gráficos:
async function prepareChartData(userId) {
  const response = await fetch(
    `https://api.gu1.ai/events/user/stats?user_id=${userId}`,
    {
      headers: { 'Authorization': `Bearer ${API_KEY}` }
    }
  );

  const data = await response.json();

  // Para gráfico circular
  const pieData = data.stats.map(s => ({
    name: s.event_type,
    value: s.count
  }));

  // Para gráfico de barras
  const barData = data.stats.map(s => ({
    category: s.event_type,
    count: s.count
  }));

  return { pieData, barData };
}

Próximos Pasos

Listar Eventos

Consulta eventos individuales

Crear Evento

Rastrea nuevos eventos

Listar por Entidad

Obtén eventos para entidad específica

Análisis

Construye dashboards de análisis