TLS versions, cipher suites and session resumption
const url = 'https://api.nsin.ir/analytics/tls?domain=example.com&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/tls?domain=example.com&period=3h' \ --header 'Authorization: Bearer <token>'What your visitors negotiate with the edge. Every count here is
restricted to TLS-terminated requests, so plain-HTTP traffic never
enters the totals — a domain redirecting :80 to :443 does not read
as though a slice of its visitors used no TLS at all.
pct in versions is a share of all TLS requests. pct in ciphers
is a share of the returned suites only: the list is capped at the top
12, and the shares are normalised over that list so they still add up
to 100%.
This is the visitor-to-edge leg only. The edge-to-origin handshake is not reported here.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”The domain name (for example example.com). These endpoints take the
domain as a query parameter rather than a path segment.
Example
example.comTime window, ending now. Buckets are hourly up to 24h and daily for
7d and 30d. An unrecognised value falls back to 24h.
Narrow to one subdomain. Matches the exact host, any subdomain of it, or
a bare label — so example.com matches api.example.com, and api
matches api.example.com, but exam matches neither.
Narrow to a URL path prefix.
Responses
Section titled “ Responses ”TLS mix for the period.
object
object
TLS-terminated requests in the period.
Requests whose TLS session was resumed rather than negotiated afresh.
resumed / requests, as a percentage; 0 when there were no TLS requests.
object
Negotiated version, e.g. TLSv1.3.
Percentage share of all TLS requests.
Top 12 cipher suites, most used first.
object
Negotiated cipher suite, e.g. TLS_AES_128_GCM_SHA256.
Percentage share of the returned suites
Example generated
{ "summary": { "requests": 1, "resumed": 1, "resumption_rate": 1 }, "versions": [ { "version": "example", "requests": 1, "pct": 1 } ], "ciphers": [ { "cipher": "example", "requests": 1, "pct": 1 } ]}The domain query parameter is missing.
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Examples
{ "error": "domain is required"}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 domain’s plan does not include the feature this endpoint needs
(monitoring for most sections, logs for raw and top-N request data).
The single error shape used by every endpoint.
object
Human-readable description of what went wrong.
Example
{ "error": "read-only 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"}