Uptime & Outages
nsin sits between your visitors and your server, so it can see when your server (the origin) stops answering properly — even if nsin itself is serving fine. When that keeps happening, nsin opens an incident and tells you. Find this under Uptime in your domain’s sidebar.
What counts as “down”
Section titled “What counts as “down””nsin doesn’t ping your site from outside. It watches real visitor traffic, and counts requests where your server failed to answer properly.
A subdomain counts as down for a minute when the share of failing requests is above your threshold, and there was enough traffic that minute for the number to mean anything. The traffic floor matters: two failures out of three requests at 4am is noise, not an outage.
Incidents
Section titled “Incidents”An incident opens when a subdomain stays down for the whole detection window — not just one bad minute — and closes after a run of clear minutes. Each incident records the hostname, when it started, when it recovered, and how bad the error rate got.
Live status
Section titled “Live status”The live view shows every subdomain right now, including ones erroring but not yet past your thresholds — check it when something feels wrong but no alert has fired. For each host you see requests seen in the window, how many failed, the error percentage, and whether it currently counts as down.
Settings
Section titled “Settings”Under Uptime → Settings you can tune detection to fit your traffic:
| Setting | What it means |
|---|---|
| Alerts on/off | Whether outage notifications are sent for this domain. |
| Threshold | The percentage of failing requests per minute that counts as down. |
| Window | How long the host has to stay down before an incident opens. |
| Minimum requests | The traffic floor — below this, no incident opens. |
| Minimum active minutes | How many minutes in the window need real traffic. |
| Recovery | How many clear minutes in a row end the incident. |
Each setting has a valid range, shown next to it in the panel.
Who gets notified
Section titled “Who gets notified”Notifications go to the domain’s owner and to any members with outage notifications on. Each member controls this individually, so an agency teammate can watch uptime without getting every other notification.
Notification channels
Section titled “Notification channels”Notification channels, on the Uptime page, decides where alerts for the domain go. The switches apply to everyone — owner and members — on top of each member’s own preferences. Alerts always show in the panel, whatever is switched off.
| Channel | Default | Notes |
|---|---|---|
| On | ||
| SMS | On | Paid plans only. Verified Iranian mobile numbers. |
| Webhook | Off | Free on every plan. One URL per domain. |
Webhook
Section titled “Webhook”Save an http:// or https:// URL and switch the webhook on. nsin sends
a POST with a JSON body when an outage opens (outage.opened) and
resolves (outage.resolved) — once each per incident. Test sends a
sample test event.
{ "event": "outage.opened", "incident_id": 4312, "domain": "example.com", "hostname": "api.example.com", "monitor_id": null, "scope": "", "peak_error_pct": 100, "started_at": "2026-09-20T10:14:00Z", "resolved_at": null, "duration_sec": null, "sent_at": "2026-09-20T10:14:02Z"}Answer with any 2xx within 5 seconds; anything else is retried twice,
after 5 and 30 seconds. Redirects aren’t followed, and URLs pointing at
private or local addresses are refused. Last deliveries are listed under
the URL field.
Verify the signature. Every request carries X-Nsin-Timestamp and
X-Nsin-Signature. The signature is sha256= plus the hex HMAC-SHA256 of
<timestamp>.<raw body>, keyed with the signing secret shown on the page:
import crypto from 'node:crypto';
function verify(req, rawBody, secret) { const ts = req.headers['x-nsin-timestamp']; const want = 'sha256=' + crypto.createHmac('sha256', secret).update(`${ts}.${rawBody}`).digest('hex'); const got = req.headers['x-nsin-signature'] ?? ''; const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300; return fresh && got.length === want.length && crypto.timingSafeEqual(Buffer.from(got), Buffer.from(want));}Generating a new secret makes the old one stop working at once.
Common questions
Section titled “Common questions”Uptime says down, but my site loads for me. Outages are usually partial — one subdomain, one region, or some requests. Check the live view, and Monitoring → status codes for what your server returned.
Nothing appears here at all. Detection runs on real traffic — a subdomain nobody visited produces no data — and needs a plan that includes monitoring. See Plans.
Does nsin keep serving during an outage? Cached pages keep being served. Anything nsin must fetch from your server fails while it’s failing — this is what caching and origin failover help with.