Outstanding recommendations across every domain
const url = 'https://api.nsin.ir/recommendations/overview';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/overview \ --header 'Authorization: Bearer <token>'The account-wide checklist: one entry per domain you can see that has at
least one outstanding item (warn, not dismissed by you). Domains with
nothing outstanding are omitted — summary.domains still counts them.
This endpoint never computes a checklist while you wait. It reads the
per-domain cache the other endpoints fill and, for domains with nothing
cached yet, starts a few background computes per call and reports them
in pending; poll while computing is true and the list fills in.
The assembled answer is then cached per caller for 5 minutes, so one
request covers the whole account however many domains it has.
Authorizations
Section titled “Authorizations ”Responses
Section titled “ Responses ”Outstanding items per domain.
object
object
Outstanding items only, worst severity first.
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.
Checks that passed (or were dismissed) on this domain.
When this domain’s checklist was last computed.
object
Domains looked at.
Domains with at least one outstanding item.
Domains whose checklist has not been computed yet.
True while pending is above zero. The list is incomplete:
the domains still being checked may hold items that are not
in data yet, so this is “still looking”, not “all clear”.
Example
{ "data": [ { "items": [ { "key": "cache_off", "status": "ok", "severity": "high", "category": "speed" } ] } ]}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"}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"}