GET /v1/recap
Dane Recap, podsumowanie statystyk i najpopularniejsze strony dla presetów lub niestandardowego zakresu dat.
Żądanie
https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=25
Recap służy do analizy danych historycznych, w tym do raportowania, eksportu najpopularniejszych stron, obsługi niestandardowych zakresów dat oraz filtrowania wyników za pomocą wyszukiwania.
Uwierzytelnianie
Wymagany jest klucz API w nagłówku Authorization: Bearer nm_YOUR_KEY.
Parametry zapytania
| Nazwa | Typ | Wymagany | Opis |
|---|---|---|---|
site |
string |
wymagany | Identyfikator trackera. Klucz API musi zapewniać dostęp do tego trackera. |
preset |
string |
opcjonalny | Preset zakresu dat. Jedna z wartości: today, yesterday, last7, last14, last30, last90, this_month, last_month, all_time, custom. Wartość domyślna: last30. |
start |
date |
opcjonalny | Data początkowa dla preset=custom. Format: YYYY-MM-DD. |
end |
date |
opcjonalny | Data końcowa dla preset=custom. Format: YYYY-MM-DD. |
limit |
integer |
opcjonalny | Maksymalna liczba najpopularniejszych stron w odpowiedzi, także w odpowiedziach stronicowanych. Wartość jest ograniczana do zakresu 1–100. Wartość domyślna: 100. |
q |
string |
opcjonalny | Wyszukiwana fraza dotycząca najpopularniejszych stron. Dopasowanie obejmuje URL, tytuł lub autora. Alias: search. |
search |
string |
opcjonalny | Alias parametru q. |
offset |
integer |
opcjonalny | Rozpoczęcie stronicowania za pomocą offset=0. Liczba całkowita od 0 do 2000. Kolejne strony wymagają parametru snapshot. Bez parametru offset lub snapshot dotychczasowa odpowiedź pozostaje bez zmian. |
snapshot |
string |
opcjonalny | Należy użyć wartości pagination.snapshot_id z pierwszej odpowiedzi. Należy powtórzyć pierwotne parametry site, preset, start, end i search. Rozmiar strony może się zmienić. Pominięcie snapshot rozpoczyna nowe przejście przez wyniki. |
Przykład cURL
curl -H "Authorization: Bearer nm_YOUR_KEY" \
"https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=25"
Przykład odpowiedzi
{
"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"
}
Stronicowanie
Dodanie offset=0 włącza stronicowanie. Każda odpowiedź zawiera maksymalnie 100 artykułów, a migawka — maksymalnie 2000. Bez parametru offset lub snapshot dotychczasowy format odpowiedzi i limit pozostają bez zmian.
Aby pobrać kolejną stronę, należy przesłać pagination.next_offset jako offset oraz pagination.snapshot_id jako snapshot. Należy powtórzyć pierwotne parametry site, preset, start, end i search, w tym niestandardowe daty. Należy zakończyć pobieranie, gdy next_offset ma wartość null. Offset równy liczbie dostępnych elementów lub od niej większy zwraca pustą tablicę top_pages.
Kolejność artykułów, wartości pageviews i daily, podsumowanie oraz generated_at pozostają stałe na wszystkich stronach, także w zakresach obejmujących bieżący dzień. Statystyki podsumowania dotyczą całego wybranego zakresu, natomiast pagination.total obejmuje tylko artykuły znajdujące się w ograniczonej migawce. Każde żądanie nadal wymaga prawidłowego uwierzytelnienia i jest uwzględniane w limicie zapytań trackera.
Migawki wygasają po 10 minutach i nie są odnawiane podczas odczytu. Po otrzymaniu HTTP 410 należy odrzucić częściowo pobrane dane i rozpocząć ponownie od offset=0 bez parametru snapshot. Poniższe przykłady przedstawiają pierwsze żądanie, kontynuację oraz dodatkowy obiekt paginacji.
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"
}
}
Pola odpowiedzi
| Pole | Typ | Opis |
|---|---|---|
site |
string |
Identyfikator trackera użyty w żądaniu. |
preset |
string |
Rozpoznany preset użyty w odpowiedzi. |
timezone |
string |
Strefa czasowa trackera użyta do określenia dat lokalnych. |
range |
object |
Rozpoznany zakres dat zawierający wartości from, to, label oraz liczbę dni. |
limits |
object |
Limity dostępnej historii dla trackera. |
search.query |
string |
Znormalizowane zapytanie użyte do filtrowania najpopularniejszych stron. |
daily[] |
array<object> |
Dzienna liczba odsłon i wizyt dla rozpoznanego zakresu. |
summary.total_pageviews |
integer |
Łączna liczba odsłon w rozpoznanym zakresie. |
summary.total_visits |
integer |
Łączna liczba wizyt w rozpoznanym zakresie. |
summary.pages_per_visitor |
number |
Liczba odsłon podzielona przez liczbę wizyt, zaokrąglona do jednego miejsca po przecinku. |
top_pages[] |
array<object> |
Najpopularniejsze strony posortowane według liczby odsłon. |
top_pages[].rank |
integer |
Pozycja w pełnej migawce podczas stronicowania; numeracja jest kontynuowana na kolejnych stronach. |
top_pages[].title |
string |
Tytuł strony. |
top_pages[].author |
string |
Autor, jeśli jest dostępny. |
top_pages[].pubdate |
string |
Data publikacji, jeśli jest dostępna. |
top_pages[].url |
string |
Ścieżka lub skrócony URL. |
top_pages[].url_full |
string |
Pełny URL, jeśli jest dostępny. |
top_pages[].url_id |
string |
Stały identyfikator URL. |
top_pages[].thumbnail |
string |
URL miniatury, jeśli jest dostępny. |
top_pages[].pageviews |
integer |
Liczba odsłon w rozpoznanym zakresie. |
generated_at |
string |
Znacznik czasu UTC wskazujący moment wygenerowania danych. |
pagination |
object |
Obecny tylko w trybie stronicowania. Łącznie na wszystkich stronach dostępnych jest maksymalnie 2000 artykułów. |
pagination.limit |
integer |
Efektywny rozmiar strony od 1 do 100. |
pagination.offset |
integer |
Pozycja żądanej strony liczona od zera. |
pagination.total |
integer |
Liczba artykułów w tej migawce, ograniczona do 2000. Nie jest to pełna liczba pasujących URL-i bez ograniczenia. |
pagination.max_results |
integer |
Maksymalna liczba artykułów w migawce: 2000. |
pagination.has_more |
boolean |
Informacja, czy w tej migawce dostępna jest kolejna strona. |
pagination.next_offset |
integer|null |
Wartość, którą należy przekazać jako offset dla kolejnej strony. Wartość null oznacza osiągnięcie końca. |
pagination.snapshot_id |
string |
Nieprzejrzysty identyfikator do kolejnych żądań z parametrem snapshot. Jest powiązany z uwierzytelnionym użytkownikiem i trackerem. |
pagination.expires_at |
string |
Stały termin wygaśnięcia w UTC, przypadający 10 minut po zapisaniu. Odczyt stron nie przedłuża tego terminu. |
Aktualność danych i buforowanie
Żądania bez stronicowania korzystają z istniejącej 60-sekundowej mikropamięci podręcznej oraz awaryjnego mechanizmu danych historycznych. W trybie stronicowania niezmienna migawka jest zapisywana w lokalnym Stats Redis na 600 sekund i automatycznie wygasa; jej ważność nie jest odnawiana przy odczycie. Identyczne żądania początkowe tego samego użytkownika w ciągu 60 sekund mogą ponownie wykorzystać migawkę, dlatego jako termin graniczny należy traktować expires_at. Żądania kontynuacji nigdy nie przebudowują danych ani nie korzystają awaryjnie z innej migawki.
Błędy
| HTTP | Kod | Opis |
|---|---|---|
| 400 | site_required |
Brakuje wymaganego parametru site. |
| 401 | missing_token |
Brakuje nagłówka Authorization. |
| 401 | invalid_token |
Token jest nieprawidłowy lub został unieważniony. |
| 403 | site_not_authorized |
Klucz API nie zapewnia dostępu do tego trackera. |
| 429 | rate_limit_exceeded |
Przekroczono limit zapytań. |
| 503 | redis_unavailable |
Backend danych bieżących jest tymczasowo niedostępny. |
| 503 | clickhouse_unavailable |
Dane historyczne są tymczasowo niedostępne. |
| 500 | encoding_failed |
Nie udało się zakodować odpowiedzi Recap. |
| 400 | invalid_pagination |
Parametry zapytania dotyczące stronicowania muszą być wartościami skalarnymi. |
| 400 | invalid_offset |
Offset musi być liczbą całkowitą od 0 do 2000. |
| 400 | invalid_snapshot |
Identyfikator migawki ma nieprawidłowy format. |
| 400 | snapshot_required |
Offset większy od zera wymaga identyfikatora migawki. Należy rozpocząć od offset=0. |
| 400 | snapshot_mismatch |
Preset, daty lub wyszukiwanie różnią się od wartości z pierwotnego żądania. |
| 410 | snapshot_expired |
Migawka wygasła lub nie jest już dostępna w kontekście tego użytkownika i trackera. Należy rozpocząć ponownie od offset=0 bez parametru snapshot. |
| 503 | snapshot_storage_unavailable |
Nie można odczytać ani zapisać migawki. Należy ponowić próbę; istniejący identyfikator migawki musi pozostać bez zmian. |
| 503 | recap_unavailable |
Nie można obecnie utworzyć kompletnej nowej migawki. Należy spróbować ponownie za chwilę. |
{
"error": {
"code": "invalid_token",
"message": "Bearer token is invalid or revoked."
}
}