Get the domain's advisory checklist
const url = 'https://api.nsin.ir/recommendations?domain=example.com&scope=records';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/recommendations?domain=example.com&scope=records' \ --header 'Authorization: Bearer <token>'Per-domain advice derived from analytics, configuration and live probes.
Items with status: ok are passing checks; warn items suggest an
action. Dismissed items are still returned, flagged dismissed: true.
Whether an item can be hidden depends on its severity, and dismissible
says so per item: low hides permanently, medium for 7 days (after
which it returns if the problem is still there), and high cannot be
hidden at all.
The checks that read traffic are computed in the background and
cached. When they are not ready within about 12 seconds the answer
carries the configuration checks only, with computing: true — ask
again a few seconds later. scope=records returns only the DNS-record
checks (no apex or www record, an empty zone, …), which are always
computed fresh and never wait. Requires domain.view.
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.comrecords returns only the DNS-record checks.
Responses
Section titled “ Responses ”Checklist items.
object
object
Stable identifier — pass it to the dismiss endpoints. New checks are added over time, so treat this as an open set rather than a closed enum.
ok is a passing check; warn needs action.
Also decides dismissal: low can be hidden for good, medium for
7 days, high not at all.
plan covers what a subscription buys — the gateway and traffic
allowances, and entitlements such as uptime alerts by SMS.
Supporting figures behind the finding.
object
Where to go to act on the recommendation. Either feature (a screen in
the panel) or url (a page outside it), never both.
object
Logical target, e.g. cache.
Absolute link to a page outside the panel — the published edge IP list, a documentation page — for a fix that is not a panel screen.
Parameters that pre-filter the target view.
object
Dismissed by the calling user. Dismissals are per user, not per domain.
Whether this item may be dismissed at all. False for every passing
check and for every high warning — dismissing one of those is
refused with 409, and has no effect even if a row exists.
Present only while a time-limited (medium) dismissal is in force:
when the item comes back. A low dismissal never expires, so it has
no date.
Present (true) while the traffic checks are still being
computed; they are missing from data. Ask again shortly.
Present (true) when a traffic query failed: the checks
it feeds are missing until the next attempt.
Example
{ "data": [ { "key": "cache_off", "status": "ok", "severity": "high", "category": "speed" } ]}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. (A valid key whose
account has been deactivated gets 403 account is inactive instead.)
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"}