Resumen
API REST de solo lectura para extraer metricas de campanas, push, codigos, puntos, ranking, tiers, journeys y marketplace.
La API de Metricas permite a sistemas externos (BI, data warehouses, dashboards propios) extraer de forma programatica las metricas de tu organizacion. Es de solo lectura y vive bajo el namespace /api/v1/metrics/**.
Base URL
https://southgames.ai/api/v1/metrics
Autenticacion y permisos
Como el resto de la API, requiere los headers Authorization: Bearer <api_key> y X-Org-Id. Ademas, la API key debe tener el scope metrics:read (o ser una key de acceso completo).
Crea una key de solo metricas en Configuracion > Desarrollador > API Keys, eligiendo el permiso "Solo metricas". Una key de metricas no puede llamar endpoints de escritura (p. ej. /points/spend, /games/play).
Ver Autenticacion para mas detalles sobre keys y scopes.
Rate limiting
Cada API key tiene un limite de 120 solicitudes por minuto (ventana fija). Las respuestas exitosas incluyen headers informativos:
| Header | Descripcion |
|---|---|
X-RateLimit-Limit | Maximo de solicitudes por ventana |
X-RateLimit-Remaining | Solicitudes restantes en la ventana actual |
X-RateLimit-Reset | Momento (epoch en segundos) en que se reinicia la ventana |
Al superar el limite la API responde 429 con codigo RATE_LIMITED.
Rango de fechas
La mayoria de los endpoints aceptan un rango de fechas comun:
| Parametro | Tipo | Descripcion |
|---|
El rango maximo es de 366 dias. Un rango invalido (from posterior a to, fecha no parseable, tz invalida o rango excedido) devuelve 400 con codigo VALIDATION_ERROR.
Frescura de los datos
Hay dos clases de endpoints:
| Frescura | Endpoints | Detalle |
|---|---|---|
| En vivo | campaigns/*, points/summary, tiers/distribution, ranking/leaderboard, store | Leen agregados/contadores ya materializados; reflejan el estado actual. |
Rollup diario (freshness: "daily-rollup") | points/timeseries, codes/summary, push/summary, journeys/summary, marketplace/summary | Se consolidan en un rollup nocturno; pueden tener hasta ~24h de retraso. Los buckets son dias UTC. |
Formato de respuesta
Las respuestas exitosas devuelven el objeto de datos directamente (sin envoltorio success), con HTTP 200 y los headers X-RateLimit-*:
{
"range": { "from": "2026-05-17T00:00:00.000Z", "to": "2026-06-16T00:00:00.000Z" },
"totals": { "sessions": 12840, "winRate": 40 }
}
Los errores devuelven { error, code } con el HTTP correspondiente:
{ "error": "Limite de solicitudes excedido. Intenta de nuevo mas tarde.", "code": "RATE_LIMITED" }
Codigos de error
| Codigo | HTTP | Descripcion |
|---|---|---|
VALIDATION_ERROR | 400 | Parametros de query invalidos (rango/fecha/tz) |
INSUFFICIENT_SCOPE | 403 | La API key no tiene el scope metrics:read |
FEATURE_NOT_AVAILABLE | 403 | La funcionalidad no esta en tu plan (p. ej. metricas de tienda) |
RATE_LIMITED | 429 | Limite de solicitudes excedido |
Tambien aplican los errores de autenticacion comunes (MISSING_API_KEY, INVALID_API_KEY, etc.).
Endpoints
| Metodo | Ruta | Descripcion |
|---|---|---|
| GET | /metrics/campaigns/summary | Totales de sesiones/juego del periodo + tendencia |
| GET | /metrics/campaigns/timeseries | Serie diaria de sesiones |
| GET | /metrics/campaigns/detail | Stats historicas de una campana |
| GET | /metrics/points/summary | Economia de puntos (emitidos/gastados/saldo) |
| GET | /metrics/points/timeseries | Serie diaria de puntos emitidos/gastados |
| GET | /metrics/codes/summary | Codigos emitidos vs canjeados + tasa |
| GET | /metrics/push/summary | Entregas push (delivered/failed/clicks) |
| GET | /metrics/tiers/distribution | Distribucion de clientes por tier |
| GET | /metrics/ranking/leaderboard | Leaderboard (top-N o "mi ranking") |
| GET | /metrics/journeys/summary | Inscripciones diarias a journeys |
| GET | /metrics/marketplace/summary | Compras y revenue del marketplace |
| GET | /metrics/store | Metricas de tienda (instalaciones, rating, etc.) |