Traffic by edge node, across your domains
const url = 'https://api.nsin.ir/analytics/nodes-overview?period=3h';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.nsin.ir/analytics/nodes-overview?period=3h' \ --header 'Authorization: Bearer <token>'Per-node totals, error and cache rates, latency, a requests-over-time
series, and the busiest domains on each node — aggregated over every
domain you can see, or one domain with domain_id.
This is the account-wide counterpart of /analytics/traffic-by-node,
which covers a single domain and splits by cache status instead.
Two kinds of row need care when reading the list:
node: ""— requests the serving edge did not stamp with a node name. They are counted so the per-node rows still add up tototals, but they cannot be attributed to a point of presence.requests: 0withregistered: true— a node that is in service but served nothing in the period. Kept in the list so a node that stopped reporting is visible rather than silently absent.
error_rate and cache_hit_rate are percentages (0–100). Durations are
in milliseconds and exclude WebSocket requests, whose lifetime is the
whole upgraded connection.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Time window, ending now. Buckets are hourly up to 24h and daily for
7d and 30d. An unrecognised value falls back to 24h.
Numeric domain id — note this endpoint scopes by id, not by the domain name the rest of the API uses. Omit to cover every active domain you can see.
Responses
Section titled “ Responses ”Per-node totals with the scope-wide total they add up to.
object
object
Node identifier. Empty when the serving edge reported no node name.
Human-readable name. Absent for a node that is not registered.
ISO country code.
Whether the name matches a registered edge node.
Whether the registered node is in service.
Egress bytes.
Bytes received from clients.
Percentage of requests that returned 4xx or 5xx, 0–100.
Percentage of cache lookups served from cache, 0–100.
Mean response time in milliseconds, WebSocket requests excluded.
95th percentile response time in milliseconds, WebSocket requests excluded.
Most recent request this node served in scope. Null when it served none.
Traffic over time, one bucket per period step.
object
Egress bytes in the bucket.
The busiest domains on this node, at most five.
object
Empty when the traffic matched no registered domain.
Egress bytes.
What the per-node rows add up to over the same scope.
object
Egress bytes.
Requests whose row carried no node name.
Example generated
{ "data": [ { "node": "example", "node_label": "example", "country": "example", "registered": true, "active": true, "requests": 1, "bandwidth": 1, "bytes_in": 1, "unique_visitors": 1, "error_rate": 1, "errors_5xx": 1, "cache_hit_rate": 1, "cached_requests": 1, "avg_duration": 1, "p95_duration": 1, "latest_event": "2026-04-15T12:00:00Z", "series": [ { "timestamp": "2026-04-15T12:00:00Z", "count": 1, "bytes": 1 } ], "top_domains": [ { "domain_id": 1, "domain_name": "example", "requests": 1, "bandwidth": 1 } ] } ], "totals": { "requests": 1, "bandwidth": 1, "nodes_with_traffic": 1, "unattributed_requests": 1 }}Missing, malformed, revoked or expired API key — or the owning account is inactive.
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Examples
{ "error": "invalid API key"}No such domain, or it is not visible to this account. Domains you cannot access are reported as not found rather than forbidden.
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Example
{ "error": "read-only API key"}The key exceeded its request budget (300 requests per minute by default).
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Examples
{ "error": "rate limit exceeded"}The analytics backend is temporarily unreachable. Retry; no data is lost.
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Examples
{ "error": "analytics unavailable"}