Clients whose traffic resembles a proxy tunnel
const url = 'https://api.nsin.ir/analytics/tunnel-suspects?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/tunnel-suspects?period=3h' \ --header 'Authorization: Bearer <token>'Clients whose WebSocket/gRPC traffic looks like a VPN or proxy tunnel run behind the CDN: sustained volume over a single fixed path, with opaque payloads and no sign of ordinary browsing (no real assets fetched, no referer).
This is a heuristic for investigation, not proof of abuse. balance is
informational — tunnels used for browsing are download-heavy, so
symmetry is not a criterion.
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.
Responses
Section titled “ Responses ”Suspected tunnel clients.
object
object
The client’s network operator (AS organisation).
All requests from this client to this host.
Requests with opaque payloads.
Distinct paths used — around 1 for a tunnel.
Client-to-edge bytes.
Edge-to-client bytes.
min/max of up and down. Informational only.
Longest single connection, in seconds.
The heaviest single path.
TLS fingerprint.
HTTP fingerprint.
Example
{ "suspects": [ { "transport": "ws" } ]}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"}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"}