AVANZADO
DocsAnalítica y reglas por la API
Dos cosas se apoyan sobre un enlace y vale la pena automatizar: leer su tráfico y dirigirlo. Las estadísticas son GET de solo lectura que una clave de lectura puede llamar; las reglas de enrutamiento son acciones de escritura que se evalúan dentro de la redirección en el edge. Ambas son los mismos endpoints que usa el panel.
Lee las estadísticas de un enlace
GET /api/links/:slug/stats devuelve un resumen para un rango de tiempo. Elige el rango con ?range= - uno de 1h, 24h, 7d, 30d, 90d, 183d, 365d, mtd o ytd - o da una ventana explícita con ?from=<ms>&to=<ms> en milisegundos de época.
curl "https://qr2r.com/api/links/aA3k9/stats?range=30d" \
-H "Authorization: Bearer $KILO_API_KEY"La respuesta devuelve el rango resuelto, tu plan, los totales de cabecera, una serie temporal y desgloses por dimensión:
{
"range": { "from": 1716408000000, "to": 1719000000000, "clamped": false, "bucket": "day" },
"plan": { "slug": "pro", "limits": { /* … */ } },
"totals": { "opens": 1284, "visitors": 512 },
"timeseries": [ /* one point per bucket */ ],
"meta": { "generated_at": 1719000000000, "query_ms": 37, "cache": "miss" }
}opens cuenta las redirecciones servidas; visitors es el recuento distinto. Cuando las dimensiones de tu plan lo permiten, la respuesta lleva además bloques de desglose (países, dispositivos, referentes, calidad de tráfico y más). La retención y qué dimensiones obtienes dependen del plan: si pides una ventana más larga de la que guarda tu plan, la respuesta vuelve con range.clamped puesto a true y from empujado hasta el borde de tu retención.
Los mismos números, sin IPs en bruto
Estas son las cifras de las que bebe la vista de analítica del panel - la API es solo el otro cliente. Como en todo Kilo, no se guarda ninguna IP en bruto para producirlas; los datos derivados de la IP se cifran antes con un pepper rotatorio.
GET compañeros cubren los mismos datos en formas distintas: /stats/breakdown para una sola dimensión, /stats/timeseries para la serie sola y /stats/export para una descarga. Los totales a nivel de grupo viven en GET /api/groups/:id/stats.
Lista y añade reglas de enrutamiento
Las reglas de un enlace deciden a dónde va realmente un escaneo. Léelas con GET /api/links/:slug/rules:
{ "rules": [ /* rule objects, in priority order */ ] }Añade una con POST /api/links/:slug/rules. El type de una regla es geo, device o ab, y cada una lleva un target_url. Una regla geo segmenta por una lista de códigos de país ISO-2:
curl https://qr2r.com/api/links/aA3k9/rules \
-H "Authorization: Bearer $KILO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "type": "geo", "condition": { "countries": ["DE", "AT"] }, "target_url": "https://example.com/de" }'Una creación devuelve 201 con la regla almacenada:
{
"id": 44,
"type": "geo",
"condition": { "countries": ["DE", "AT"] },
"target_url": "https://example.com/de",
"weight": 1,
"priority": 0,
"created_at": 1719000000000
}Actualiza el destino, el peso o la prioridad de una regla con PUT /api/rules/:id, y elimina una con DELETE /api/rules/:id (que devuelve { "ok": true }). Reordena las reglas de un enlace de forma atómica con POST /api/links/:slug/rules/reorder.
Las reglas son una función de pago
Aplicado en la API, no solo en el panel: una regla geo o device necesita el límite de plan targeting_rules, y una regla ab necesita ab_testing. Sin ello, la creación se rechaza con 402 plan_required, así que el plan gratuito no se puede desbloquear llamando al endpoint directamente.
Las reglas se evalúan en el edge dentro de la propia redirección, sin tocar nunca una base de datos en la ruta caliente - la mecánica está en la guía de reglas de enrutamiento. Esa es la superficie de la API: claves y ámbitos, enlaces, estadísticas y reglas, hasta el fondo.
Volver a todas las guías