Skip to content
nsin docs

Get the domain's advisory checklist

GET
/recommendations
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.

domain
required
string

The domain name (for example example.com). These endpoints take the domain as a query parameter rather than a path segment.

Example
example.com
scope
string
Allowed values: records

records returns only the DNS-record checks.

Checklist items.

Media type application/json
object
data
Array<object>
object
key

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.

string
Allowed values: cache_off slow_response errors_5xx images_not_webp ssl_expiring ssl_upload_expired no_robots no_sitemap no_https_redirect no_records apex_unreachable www_unreachable www_redirect_bypassed proxy_none proxy_off ai_markdown bot_cache_off origin_protocol origin_ip_allowlist gateway_quota traffic_quota uptime_sms external_dns_unreachable external_dns_use_cname
status

ok is a passing check; warn needs action.

string
Allowed values: ok warn
severity

Also decides dismissal: low can be hidden for good, medium for 7 days, high not at all.

string
Allowed values: high medium low
category

plan covers what a subscription buys — the gateway and traffic allowances, and entitlements such as uptime alerts by SMS.

string
Allowed values: speed seo reachability security plan
title
string
detail
string
stats

Supporting figures behind the finding.

object
key
additional properties
any
action

Where to go to act on the recommendation. Either feature (a screen in the panel) or url (a page outside it), never both.

object
label
string
feature

Logical target, e.g. cache.

string
url

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.

string format: uri
query

Parameters that pre-filter the target view.

object
key
additional properties
string
dismissed

Dismissed by the calling user. Dismissals are per user, not per domain.

boolean
dismissible

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.

boolean
dismissed_until

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.

string format: date-time
computing

Present (true) while the traffic checks are still being computed; they are missing from data. Ask again shortly.

boolean
incomplete

Present (true) when a traffic query failed: the checks it feeds are missing until the next attempt.

boolean
Example
{
"data": [
{
"key": "cache_off",
"status": "ok",
"severity": "high",
"category": "speed"
}
]
}

The domain query parameter is missing.

Media type application/json

The single error shape used by every endpoint.

object
error
required

Human-readable description of what went wrong.

string
Examples
Example missing
{
"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.)

Media type application/json

The single error shape used by every endpoint.

object
error
required

Human-readable description of what went wrong.

string
Examples
Example invalidKey
{
"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.

Media type application/json

The single error shape used by every endpoint.

object
error
required

Human-readable description of what went wrong.

string
Example
{
"error": "read-only API key"
}

The key exceeded its request budget (300 requests per minute by default).

Media type application/json

The single error shape used by every endpoint.

object
error
required

Human-readable description of what went wrong.

string
Examples
Example limited
{
"error": "rate limit exceeded"
}