Statistics dashboard
The Statistics dashboard is the Monitoring area's analytics view. It turns your CDN traffic into summary cards, charts, and tables so you can see request volume, cache efficiency, errors, geography, devices, and origin performance at a glance.
All data is read from Paradarum's analytics store and served by the monitoring API under the base route /api/monitoring. Every endpoint requires a JWT Bearer token and is automatically scoped to your account — the API resolves your account's property hostnames and filters on them, so you only ever see your own traffic.
Scoping your view
The property selector
At the top of the Statistics page, a property selector lets you choose All Properties or a single property. You can also arrive pre-filtered through a ?propertyId= query parameter, and the page otherwise defaults to your globally selected current property.
Behind the scenes the API attaches propertyId to each request. Because data is always isolated to your account's hostnames, narrowing to one property simply restricts the result set further.
:::info Account isolation
The accountId is enforced from your token (the GroupSid claim). Passing a propertyId you do not own yields no matching hostnames and therefore empty results — there is no way to read another account's data.
:::
Date range
A From / To date range (with quick presets) controls the window for every card and chart. The default is the current calendar month in UTC, which lines up with your billing counters. See Date ranges & live mode for the presets, automatic chart granularity, and the realtime Live Mode view.
Summary cards
The cards at the top of the dashboard come from GET /api/monitoring/stats/summary. Each value is computed over the selected range and property.
| Card | Field | Unit / meaning |
|---|---|---|
| Total requests | totalRequests | Count of requests served |
| Total bytes | totalBytes | Bandwidth in bytes |
| Cache hit rate | cacheHitRate | Percentage (%) |
| Avg response time | avgResponseTime | Milliseconds |
| Unique visitors | uniqueVisitors | Distinct visitors |
| 4xx errors | errors4xx | Count of all 4xx responses |
| 403 errors | errors403 | Count of 403 responses |
| 404 errors | errors404 | Count of 404 responses |
| 429 errors | errors429 | Count of 429 (rate limited) responses |
| 5xx errors | errors5xx | Count of all 5xx responses |
curl -H "Authorization: Bearer $TOKEN" \
"https://api.paradarum.com/api/monitoring/stats/summary?from=2026-06-01T00:00:00Z&to=2026-06-10T00:00:00Z&propertyId=42"
{
"succeeded": true,
"message": "success",
"data": {
"totalRequests": 1532210,
"totalBytes": 84210334567,
"cacheHitRate": 92.41,
"avgResponseTime": 38.2,
"errors4xx": 1204,
"errors403": 12,
"errors404": 990,
"errors429": 3,
"errors5xx": 27,
"uniqueVisitors": 48211
}
}
:::note 403, 404, and 429 are also inside 4xx
The dedicated errors403, errors404, and errors429 counters are subsets of errors4xx, broken out because they are the codes operators most often watch. Do not add them on top of the 4xx total.
:::
Chart families
Below the cards, the dashboard groups charts and tables into families. Each is backed by its own /stats/* endpoint and rendered as a chart or top-N table.
| Family | What it shows | Notable limit |
|---|---|---|
| Traffic | Requests and bandwidth over time (area chart) | Bandwidth in bytes |
| Cache | Hits / misses / bypass and hit rate (donut) | — |
| Countries | Top countries by hits and bytes (bar) | Top 20 |
| Devices | Requests by device type (bar) | — |
| Tech | Browser and OS breakdown (donuts) | Top 10 each |
| Content types | Requests and bytes by content type (donut) | Top 20 |
| Top URIs | Most-requested paths (table) | Top 20 |
| Errors | Status-code / category breakdown | Top 20 |
| Upstream performance | Origin vs total latency over time (line) | Latency in ms |
| Origin vs edge | Edge-served vs origin-served traffic and cache offload | — |
| Origin shield | Shield-served vs origin traffic and shield offload | — |
| Bandwidth saved | Bytes from cache vs origin and percent saved | Bytes |
| Per-PoP traffic | Traffic, cache, and errors per PoP region (table) | — |
| Top IPs | Busiest client IPs (table) | Top 50 |
| Top referers | Top referring URLs (table) | Top 50 |
| Security | WAF / security events and timeline (table + stacked bar) | Top 50 |
:::tip Top-N is fixed The top-N cutoffs above are set server-side and are not configurable. Countries, errors, top URIs, and content types are capped at 20; IPs, referers, and security events at 50; browsers and OS at 10. :::
For the exact JSON shape of each endpoint, see the API reference.
Reading the units correctly
Units are not uniform across the dashboard. Mixing them up is the most common source of confusion.
:::warning Watch the units
- Traffic bandwidth values are in bytes.
- Realtime (Live Mode) bandwidth is in bits per second (bps) — the UI divides by
1e6to display Mbps. - Latency fields (
avgResponseTime, upstream latency) are in milliseconds. - All timestamps are UTC and serialized with a trailing
Z. :::
:::note Same-day numbers can differ slightly
Summary and cache queries do not extend the to bound for "today" (to keep the totals stable), while time-series charts add a +2h margin when to falls on the current day. As a result, a same-day summary card and a same-day chart can cover marginally different windows.
:::
Where to go next
- Date ranges & live mode — presets, auto granularity, and realtime polling.
- Raw access logs — drill into individual requests behind these aggregates.
- Export logs to CSV — download raw logs (aggregate stats are not exportable).
- Monitoring API reference — call the
/stats/*endpoints directly.