Point de terminaison de l’API REST

GET /v1/recap

Données Recap, indicateurs récapitulatifs et pages principales pour des périodes prédéfinies ou une période personnalisée.

Requête

GET https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=25

Utilisez Recap lorsque votre intégration doit consulter l’historique : rapports historiques, exportations des pages principales, périodes personnalisées ou résultats filtrés par recherche.

Authentification

Une clé API est requise dans l’en-tête Authorization : Authorization: Bearer nm_YOUR_KEY.

Paramètres de requête

Nom Type Obligatoire Description
site string obligatoire Identifiant du tracker. La clé API doit disposer d’un accès à ce tracker.
preset string facultatif Période prédéfinie. Valeur parmi today, yesterday, last7, last14, last30, last90, this_month, last_month, all_time, custom. Valeur par défaut : last30.
start date facultatif Date de début pour preset=custom. Format : YYYY-MM-DD.
end date facultatif Date de fin pour preset=custom. Format : YYYY-MM-DD.
limit integer facultatif Nombre maximal de pages principales par réponse, y compris les réponses paginées. Les valeurs sont limitées à 1–100. Valeur par défaut : 100.
q string facultatif Terme de recherche pour les pages principales. Recherche dans l’URL, le titre ou l’auteur. Alias : search.
search string facultatif Alias de q.
offset integer facultatif Commencez la pagination avec offset=0. Entier compris entre 0 et 2000. Les pages suivantes nécessitent snapshot. Sans offset ni snapshot, la réponse existante reste inchangée.
snapshot string facultatif Utilisez pagination.snapshot_id de la première réponse. Répétez les paramètres site, preset, start, end et search d’origine. La taille de page peut changer. Omettez snapshot pour commencer un nouveau parcours.

Exemple cURL

curl -H "Authorization: Bearer nm_YOUR_KEY" \
  "https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=25"

Exemple de réponse

{
  "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"
}

Pagination

Ajoutez offset=0 pour activer la pagination. Chaque réponse contient au maximum 100 articles ; le snapshot en contient au maximum 2000. Sans offset ni snapshot, le format de réponse et la limite existants restent inchangés.

Pour chaque page suivante, envoyez pagination.next_offset comme offset et pagination.snapshot_id comme snapshot. Répétez les paramètres site, preset, start, end et search d’origine, y compris les dates personnalisées. Arrêtez-vous lorsque next_offset vaut null. Un offset supérieur ou égal au nombre disponible renvoie un tableau top_pages vide.

L’ordre des articles, les pages vues, les valeurs quotidiennes, le récapitulatif et generated_at restent fixes d’une page à l’autre, y compris pour les périodes comprenant aujourd’hui. Les indicateurs récapitulatifs couvrent toute la période sélectionnée ; pagination.total ne compte que les articles du snapshot plafonné. Chaque requête nécessite toujours une autorisation valide et est comptabilisée dans la limite de requêtes du tracker.

Les snapshots expirent après 10 minutes. La lecture des pages ne prolonge pas ce délai. En cas de réponse HTTP 410, abandonnez le parcours partiel et recommencez avec offset=0, sans snapshot. Les exemples ci-dessous présentent la première requête, une continuation et l’objet de pagination supplémentaire.

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"
  }
}

Champs de réponse

Champ Type Description
site string Identifiant du tracker utilisé pour la requête.
preset string Période prédéfinie résolue utilisée pour la réponse.
timezone string Fuseau horaire du tracker utilisé pour déterminer les dates locales.
range object Période déterminée avec les champs from, to et label, ainsi que le nombre de jours.
limits object Limites de l’historique disponible pour le tracker.
search.query string Requête de recherche normalisée utilisée pour filtrer les pages principales.
daily[] array<object> Pages vues et visites quotidiennes pour la période résolue.
summary.total_pageviews integer Nombre total de pages vues sur la période résolue.
summary.total_visits integer Nombre total de visites sur la période résolue.
summary.pages_per_visitor number Nombre de pages vues divisé par le nombre de visites, arrondi à une décimale.
top_pages[] array<object> Pages principales classées selon le nombre de pages vues.
top_pages[].rank integer Rang dans le snapshot complet lors de la pagination ; les rangs se poursuivent d’une page à l’autre.
top_pages[].title string Titre de la page.
top_pages[].author string Auteur, s’il est disponible.
top_pages[].pubdate string Date de publication, si elle est disponible.
top_pages[].url string Chemin ou URL abrégée.
top_pages[].url_full string URL absolue, si elle est disponible.
top_pages[].url_id string Identifiant stable de l’URL.
top_pages[].thumbnail string URL de la miniature, si elle est disponible.
top_pages[].pageviews integer Nombre de pages vues pour la période résolue.
generated_at string Horodatage UTC de génération de la charge utile.
pagination object Présent uniquement en mode pagination. Au maximum 2000 articles sont disponibles sur l’ensemble des pages.
pagination.limit integer Taille de page effective, comprise entre 1 et 100.
pagination.offset integer Position de base zéro de la page demandée.
pagination.total integer Nombre d’articles dans ce snapshot, plafonné à 2000. Il ne s’agit pas du nombre non plafonné d’URL correspondantes.
pagination.max_results integer Nombre maximal d’articles par snapshot : 2000.
pagination.has_more boolean Indique si une autre page est disponible dans ce snapshot.
pagination.next_offset integer|null Transmettez cette valeur comme offset pour la page suivante. La valeur null indique que la fin a été atteinte.
pagination.snapshot_id string Identifiant opaque pour les requêtes suivantes utilisant le paramètre snapshot. Lié à l’utilisateur authentifié et au tracker.
pagination.expires_at string Date d’expiration fixe en UTC, 10 minutes après le stockage. La lecture des pages ne la prolonge pas.

Actualisation et mise en cache

Les requêtes sans pagination utilisent le microcache existant de 60 secondes et le mécanisme de repli historique. La pagination stocke un snapshot immuable dans le Stats Redis local pendant 600 secondes, avec expiration automatique et sans renouvellement glissant. Des démarrages identiques effectués par le même utilisateur dans un délai de 60 secondes peuvent réutiliser un snapshot ; utilisez donc expires_at comme échéance. Les continuations ne reconstruisent jamais les données et n’utilisent pas un autre snapshot comme solution de repli.

Erreurs

HTTP Code Description
400 site_required Le paramètre site obligatoire est manquant.
401 missing_token L’en-tête Authorization est manquant.
401 invalid_token Le jeton est invalide ou a été révoqué.
403 site_not_authorized La clé API n’a pas accès à ce tracker.
429 rate_limit_exceeded La limite de requêtes a été dépassée.
503 redis_unavailable Le backend temps réel est temporairement indisponible.
503 clickhouse_unavailable Les données historiques sont temporairement indisponibles.
500 encoding_failed La réponse Recap n’a pas pu être encodée.
400 invalid_pagination Les paramètres de requête de pagination doivent être des valeurs scalaires.
400 invalid_offset offset doit être un entier compris entre 0 et 2000.
400 invalid_snapshot Le format de l’identifiant du snapshot est invalide.
400 snapshot_required Les offsets supérieurs à zéro nécessitent un identifiant de snapshot. Commencez avec offset=0.
400 snapshot_mismatch La période prédéfinie, les dates ou la recherche diffèrent de la requête d’origine.
410 snapshot_expired Le snapshot a expiré ou n’est plus disponible dans ce contexte utilisateur/tracker. Recommencez avec offset=0 et sans snapshot.
503 snapshot_storage_unavailable Le stockage du snapshot ne peut pas être lu ou écrit. Réessayez ; un identifiant de snapshot existant doit rester inchangé.
503 recap_unavailable Un nouveau snapshot complet ne peut pas être créé pour le moment. Réessayez dans quelques instants.
{
  "error": {
    "code": "invalid_token",
    "message": "Bearer token is invalid or revoked."
  }
}