GET /v1/recap
Data Recap, metrik ringkasan, dan halaman teratas untuk preset atau rentang tanggal khusus.
Permintaan
https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=25
Gunakan Recap saat integrasi Anda perlu melihat data historis: pelaporan historis, ekspor halaman teratas, rentang tanggal khusus, atau hasil yang difilter berdasarkan pencarian.
Autentikasi
Memerlukan kunci API dalam header Authorization: Authorization: Bearer nm_YOUR_KEY.
Parameter kueri
| Nama | Tipe | Wajib | Deskripsi |
|---|---|---|---|
site |
string |
wajib | ID tracker. Kunci API harus memiliki akses ke tracker ini. |
preset |
string |
opsional | Preset tanggal. Salah satu dari today, yesterday, last7, last14, last30, last90, this_month, last_month, all_time, custom. Default: last30. |
start |
date |
opsional | Tanggal mulai untuk preset=custom. Format: YYYY-MM-DD. |
end |
date |
opsional | Tanggal akhir untuk preset=custom. Format: YYYY-MM-DD. |
limit |
integer |
opsional | Jumlah maksimum halaman teratas per respons, termasuk respons berpaginasi. Nilai dibatasi dalam rentang 1–100. Default: 100. |
q |
string |
opsional | Istilah pencarian untuk halaman teratas. Mencocokkan URL, judul, atau penulis. Alias: search. |
search |
string |
opsional | Alias untuk q. |
offset |
integer |
opsional | Aktifkan paginasi dengan offset=0. Bilangan bulat dari 0 hingga 2000. Halaman berikutnya memerlukan snapshot. Tanpa offset atau snapshot, respons yang ada tetap tidak berubah. |
snapshot |
string |
opsional | Gunakan pagination.snapshot_id dari respons pertama. Ulangi parameter site, preset, start, end, dan search asli. Ukuran halaman dapat berubah. Hilangkan snapshot untuk memulai penelusuran baru. |
Contoh cURL
curl -H "Authorization: Bearer nm_YOUR_KEY" \
"https://api.nowmetrix.com/v1/recap?site=TRACKER_ID&preset=last30&limit=25"
Contoh respons
{
"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"
}
Paginasi
Tambahkan offset=0 untuk mengaktifkan paginasi. Setiap respons memuat paling banyak 100 artikel; snapshot memuat paling banyak 2000 artikel. Tanpa offset atau snapshot, format respons dan limit yang ada tetap tidak berubah.
Untuk setiap halaman berikutnya, kirim pagination.next_offset sebagai offset dan pagination.snapshot_id sebagai snapshot. Ulangi parameter site, preset, start, end, dan search asli, termasuk tanggal khusus. Hentikan proses saat next_offset bernilai null. Offset yang sama dengan atau melebihi jumlah data yang tersedia akan menghasilkan array top_pages kosong.
Urutan artikel, pageviews, nilai harian, summary, dan generated_at tetap sama di semua halaman, termasuk rentang yang mencakup hari ini. Metrik ringkasan mencakup seluruh rentang yang dipilih; pagination.total hanya menghitung artikel dalam snapshot yang jumlahnya dibatasi. Setiap permintaan tetap memerlukan autentikasi yang valid dan diperhitungkan dalam rate limit tracker.
Snapshot kedaluwarsa setelah 10 menit tanpa perpanjangan saat dibaca. Jika menerima HTTP 410, buang penelusuran parsial dan mulai ulang dengan offset=0 tanpa snapshot. Contoh berikut menunjukkan permintaan pertama, permintaan lanjutan, dan objek pagination tambahan.
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"
}
}
Kolom respons
| Kolom | Tipe | Deskripsi |
|---|---|---|
site |
string |
ID tracker yang digunakan untuk permintaan. |
preset |
string |
Preset hasil resolusi yang digunakan untuk respons. |
timezone |
string |
Zona waktu tracker yang digunakan untuk menentukan tanggal lokal. |
range |
object |
Rentang tanggal yang ditetapkan, dengan from, to, label, dan jumlah hari. |
limits |
object |
Batas riwayat yang tersedia untuk tracker. |
search.query |
string |
Kueri pencarian yang dinormalisasi dan digunakan untuk memfilter halaman teratas. |
daily[] |
array<object> |
Pageviews dan kunjungan harian untuk rentang hasil resolusi. |
summary.total_pageviews |
integer |
Total pageviews di seluruh rentang hasil resolusi. |
summary.total_visits |
integer |
Total kunjungan di seluruh rentang hasil resolusi. |
summary.pages_per_visitor |
number |
Pageviews dibagi jumlah kunjungan, dibulatkan menjadi satu angka desimal. |
top_pages[] |
array<object> |
Halaman teratas yang diurutkan berdasarkan pageviews. |
top_pages[].rank |
integer |
Peringkat dalam snapshot lengkap saat menggunakan paginasi; peringkat berlanjut di seluruh halaman. |
top_pages[].title |
string |
Judul halaman. |
top_pages[].author |
string |
Penulis jika tersedia. |
top_pages[].pubdate |
string |
Tanggal publikasi jika tersedia. |
top_pages[].url |
string |
Path atau URL ringkas. |
top_pages[].url_full |
string |
URL absolut jika tersedia. |
top_pages[].url_id |
string |
Pengidentifikasi URL yang stabil. |
top_pages[].thumbnail |
string |
URL thumbnail jika tersedia. |
top_pages[].pageviews |
integer |
Pageviews untuk rentang hasil resolusi. |
generated_at |
string |
Stempel waktu UTC saat payload dibuat. |
pagination |
object |
Hanya ada dalam mode paginasi. Paling banyak 2000 artikel tersedia di seluruh halaman. |
pagination.limit |
integer |
Ukuran halaman efektif, dari 1 hingga 100. |
pagination.offset |
integer |
Posisi halaman yang diminta, dimulai dari nol. |
pagination.total |
integer |
Jumlah artikel dalam snapshot ini, dibatasi hingga 2000. Nilai ini bukan jumlah URL yang cocok tanpa batas. |
pagination.max_results |
integer |
Jumlah maksimum artikel per snapshot: 2000. |
pagination.has_more |
boolean |
Menunjukkan apakah halaman lain tersedia dalam snapshot ini. |
pagination.next_offset |
integer|null |
Kirim nilai ini sebagai offset untuk halaman berikutnya. Null berarti sudah mencapai akhir. |
pagination.snapshot_id |
string |
ID opak untuk permintaan berikutnya yang menggunakan parameter snapshot. Terikat pada pengguna terautentikasi dan tracker. |
pagination.expires_at |
string |
Waktu kedaluwarsa tetap dalam UTC, 10 menit setelah penyimpanan. Pembacaan halaman tidak memperpanjangnya. |
Kebaruan dan caching
Permintaan tanpa paginasi menggunakan microcache 60 detik dan fallback historis yang sudah ada. Paginasi menyimpan snapshot yang tidak dapat diubah di Stats Redis lokal selama 600 detik, dengan kedaluwarsa otomatis dan tanpa perpanjangan bergulir. Permintaan awal yang identik dari pengguna yang sama dalam 60 detik dapat menggunakan kembali snapshot, jadi gunakan expires_at sebagai batas waktu. Permintaan lanjutan tidak pernah membuat ulang data atau menggunakan snapshot lain sebagai fallback.
Error
| HTTP | Kode | Deskripsi |
|---|---|---|
| 400 | site_required |
Parameter site yang wajib tidak ada. |
| 401 | missing_token |
Header Authorization tidak ada. |
| 401 | invalid_token |
Token tidak valid atau telah dicabut. |
| 403 | site_not_authorized |
Kunci API tidak memiliki akses ke tracker ini. |
| 429 | rate_limit_exceeded |
Rate limit telah terlampaui. |
| 503 | redis_unavailable |
Backend realtime sedang tidak tersedia. |
| 503 | clickhouse_unavailable |
Data historis sedang tidak tersedia. |
| 500 | encoding_failed |
Respons Recap tidak dapat dikodekan. |
| 400 | invalid_pagination |
Parameter kueri paginasi harus berupa nilai skalar. |
| 400 | invalid_offset |
Offset harus berupa bilangan bulat dari 0 hingga 2000. |
| 400 | invalid_snapshot |
ID snapshot memiliki format yang tidak valid. |
| 400 | snapshot_required |
Offset yang lebih besar dari nol memerlukan ID snapshot. Mulai dengan offset=0. |
| 400 | snapshot_mismatch |
Preset, tanggal, atau pencarian berbeda dari permintaan awal. |
| 410 | snapshot_expired |
Snapshot telah kedaluwarsa atau tidak lagi tersedia dalam konteks pengguna/tracker ini. Mulai ulang dengan offset=0 tanpa snapshot. |
| 503 | snapshot_storage_unavailable |
Penyimpanan snapshot tidak dapat dibaca atau ditulisi. Coba lagi; ID snapshot yang ada harus tetap sama. |
| 503 | recap_unavailable |
Snapshot baru yang lengkap belum dapat dibuat. Coba lagi beberapa saat kemudian. |
{
"error": {
"code": "invalid_token",
"message": "Bearer token is invalid or revoked."
}
}