GET /v1/recap
Datos de Recap, métricas resumidas y páginas principales para valores predefinidos o un rango de fechas personalizado.
Solicitud
https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=25
Utilice Recap cuando la integración necesite consultar datos anteriores: informes históricos, exportaciones de páginas principales, rangos de fechas personalizados o resultados filtrados mediante búsqueda.
Autenticación
Requiere una clave de API en la cabecera Authorization: Bearer nm_YOUR_KEY.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
site |
string |
obligatorio | Identificador del tracker. La clave de API debe tener acceso a este tracker. |
preset |
string |
opcional | Valor predefinido de fecha. Puede ser today, yesterday, last7, last14, last30, last90, this_month, last_month, all_time o custom. Valor predeterminado: last30. |
start |
date |
opcional | Fecha de inicio para preset=custom. Formato: YYYY-MM-DD. |
end |
date |
opcional | Fecha de finalización para preset=custom. Formato: YYYY-MM-DD. |
limit |
integer |
opcional | Número máximo de páginas principales por respuesta, incluidas las respuestas paginadas. Los valores se limitan al intervalo 1–100. Valor predeterminado: 100. |
q |
string |
opcional | Término de búsqueda para las páginas principales. Busca coincidencias en la URL, el título o el autor. Alias: search. |
search |
string |
opcional | Alias de q. |
offset |
integer |
opcional | Inicia la paginación con offset=0. Entero de 0 a 2000. Las páginas posteriores requieren snapshot. Sin offset ni snapshot, la respuesta existente no cambia. |
snapshot |
string |
opcional | Utilice pagination.snapshot_id de la primera respuesta. Repita los parámetros originales site, preset, start, end y search. El tamaño de página puede cambiar. Omita snapshot para iniciar un recorrido nuevo. |
Ejemplo de cURL
curl -H "Authorization: Bearer nm_YOUR_KEY" \
"https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=25"
Ejemplo de respuesta
{
"site": "TRACKER_ID",
"preset": "last30",
"timezone": "Europe/Zurich",
"range": {
"from": "2026-05-28",
"to": "2026-06-26",
"label": "Last 30 Days",
"days": 30
},
"limits": {
"min_date": "2025-03-17",
"max_date": "2026-06-26",
"max_days": null
},
"search": {
"query": ""
},
"daily": [
{
"date": "2026-06-25",
"pageviews": 102400,
"visits": 12800
},
{
"date": "2026-06-26",
"pageviews": 98450,
"visits": 12130
}
],
"summary": {
"total_pageviews": 3158127,
"total_visits": 388450,
"pages_per_visitor": 8.1
},
"top_pages": [
{
"rank": 1,
"title": "Home page",
"author": "",
"pubdate": "",
"url": "/",
"url_full": "https://example-media.test/",
"url_id": "5dc0a5883395e2a126e5239650d9268e",
"thumbnail": "https://realtimemetadata.fra1.cdn.digitaloceanspaces.com/thumbnails/example.jpg",
"pageviews": 159280
},
{
"rank": 2,
"title": "Culture desk live notes",
"author": "Alex Morgan",
"pubdate": "2026-06-24",
"url": "/culture/live-notes",
"url_full": "https://example-media.test/culture/live-notes",
"url_id": "b35c1a5f2fd0cbb7f3c13b853c2a9d2c",
"thumbnail": "https://realtimemetadata.fra1.cdn.digitaloceanspaces.com/thumbnails/example-2.jpg",
"pageviews": 85632
}
],
"generated_at": "2026-06-26T12:30:00Z"
}
Paginación
Añada offset=0 para activar la paginación. Cada respuesta contiene como máximo 100 artículos; la instantánea contiene como máximo 2000. Sin offset ni snapshot, el formato de respuesta y el límite existentes no cambian.
Para cada página siguiente, envíe pagination.next_offset como offset y pagination.snapshot_id como snapshot. Repita los parámetros originales site, preset, start, end y search, incluidas las fechas personalizadas. Deténgase cuando next_offset sea null. Un offset igual o superior al número disponible devuelve una matriz top_pages vacía.
El orden de los artículos, las páginas vistas, los valores diarios, el resumen y generated_at permanecen fijos entre páginas, incluso en rangos que incluyen el día actual. Las métricas de resumen abarcan todo el rango seleccionado; pagination.total solo cuenta los artículos de la instantánea limitada. Todas las solicitudes siguen requiriendo una autorización válida y cuentan para el límite de solicitudes del tracker.
Las instantáneas caducan después de 10 minutos. La lectura de las páginas no prolonga ese plazo. En HTTP 410, descarte el recorrido parcial y reinícielo con offset=0 sin snapshot. Los ejemplos siguientes muestran la primera solicitud, una continuación y el objeto de paginación adicional.
GET https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=100&offset=0
GET https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=100&offset=100&snapshot=0123456789abcdef0123456789abcdef0123456789abcdef
{
"pagination": {
"limit": 100,
"offset": 0,
"total": 2000,
"max_results": 2000,
"has_more": true,
"next_offset": 100,
"snapshot_id": "0123456789abcdef0123456789abcdef0123456789abcdef",
"expires_at": "2026-06-26T12:40:00Z"
}
}
Campos de la respuesta
| Campo | Tipo | Descripción |
|---|---|---|
site |
string |
Identificador del tracker utilizado para la solicitud. |
preset |
string |
Valor predefinido resuelto utilizado para la respuesta. |
timezone |
string |
Zona horaria del tracker utilizada para resolver las fechas locales. |
range |
object |
Rango de fechas resuelto, con from, to, label y el número de días. |
limits |
object |
Límites del historial disponible para el tracker. |
search.query |
string |
Consulta de búsqueda normalizada utilizada para filtrar las páginas principales. |
daily[] |
array<object> |
Páginas vistas y visitas diarias del rango resuelto. |
summary.total_pageviews |
integer |
Total de páginas vistas en el rango resuelto. |
summary.total_visits |
integer |
Total de visitas en el rango resuelto. |
summary.pages_per_visitor |
number |
Páginas vistas divididas por visitas, redondeadas a un decimal. |
top_pages[] |
array<object> |
Páginas principales ordenadas por páginas vistas. |
top_pages[].rank |
integer |
Posición en la instantánea completa al paginar; las posiciones continúan entre páginas. |
top_pages[].title |
string |
Título de la página. |
top_pages[].author |
string |
Autor, si está disponible. |
top_pages[].pubdate |
string |
Fecha de publicación, si está disponible. |
top_pages[].url |
string |
Ruta o URL abreviada. |
top_pages[].url_full |
string |
URL absoluta, si está disponible. |
top_pages[].url_id |
string |
Identificador estable de la URL. |
top_pages[].thumbnail |
string |
URL de la miniatura, si está disponible. |
top_pages[].pageviews |
integer |
Páginas vistas en el rango resuelto. |
generated_at |
string |
Marca de tiempo UTC de la generación de la carga útil. |
pagination |
object |
Solo está presente en el modo de paginación. Hay como máximo 2000 artículos disponibles entre todas las páginas. |
pagination.limit |
integer |
Tamaño efectivo de página, de 1 a 100. |
pagination.offset |
integer |
Posición de la página solicitada, basada en cero. |
pagination.total |
integer |
Número de artículos de esta instantánea, limitado a 2000. No es el número total sin límite de URL coincidentes. |
pagination.max_results |
integer |
Número máximo de artículos por instantánea: 2000. |
pagination.has_more |
boolean |
Indica si hay otra página disponible en esta instantánea. |
pagination.next_offset |
integer|null |
Pase este valor como offset para la página siguiente. Null indica que se ha llegado al final. |
pagination.snapshot_id |
string |
Identificador opaco para las solicitudes posteriores que utilicen el parámetro snapshot. Está vinculado al usuario autenticado y al tracker. |
pagination.expires_at |
string |
Caducidad fija en UTC, 10 minutos después del almacenamiento. La lectura de páginas no la prolonga. |
Actualización y caché
Las solicitudes sin paginación utilizan la microcaché existente de 60 segundos y el mecanismo alternativo para datos históricos. La paginación almacena una instantánea inmutable en el Stats Redis local durante 600 segundos, con caducidad automática y sin renovación deslizante. Los inicios idénticos del mismo usuario en un intervalo de 60 segundos pueden reutilizar una instantánea, por lo que debe utilizar expires_at como fecha límite. Las continuaciones nunca vuelven a generar los datos ni utilizan otra instantánea como alternativa.
Errores
| HTTP | Código | Descripción |
|---|---|---|
| 400 | site_required |
Falta el parámetro site obligatorio. |
| 401 | missing_token |
Falta la cabecera Authorization. |
| 401 | invalid_token |
El token no es válido o se ha revocado. |
| 403 | site_not_authorized |
La clave de API no tiene acceso a este tracker. |
| 429 | rate_limit_exceeded |
Se ha superado el límite de solicitudes. |
| 503 | redis_unavailable |
El backend en tiempo real no está disponible temporalmente. |
| 503 | clickhouse_unavailable |
Los datos históricos no están disponibles temporalmente. |
| 500 | encoding_failed |
No se ha podido codificar la respuesta de Recap. |
| 400 | invalid_pagination |
Los parámetros de consulta de paginación deben ser valores escalares. |
| 400 | invalid_offset |
El offset debe ser un entero de 0 a 2000. |
| 400 | invalid_snapshot |
El identificador de la instantánea tiene un formato no válido. |
| 400 | snapshot_required |
Los offsets superiores a cero requieren un identificador de instantánea. Comience con offset=0. |
| 400 | snapshot_mismatch |
El valor predefinido, las fechas o la búsqueda difieren de la solicitud original. |
| 410 | snapshot_expired |
La instantánea ha caducado o ya no está disponible en este contexto de usuario y tracker. Reinicie con offset=0 y sin snapshot. |
| 503 | snapshot_storage_unavailable |
No se puede leer ni escribir el almacenamiento de instantáneas. Vuelva a intentarlo; el identificador de una instantánea existente debe permanecer sin cambios. |
| 503 | recap_unavailable |
No se puede crear una instantánea nueva completa en este momento. Vuelva a intentarlo en breve. |
{
"error": {
"code": "invalid_token",
"message": "Bearer token is invalid or revoked."
}
}