REST API
Manage monitors and read incidents from your own code, scripts or AI agents.
Overview
The API lives at https://notifier.so/api/v1/. It speaks JSON and uses the same rules as the dashboard, so your plan's monitor limit and fastest check interval apply.
Authentication
- Go to Integrations in the monitoring dashboard.
- In API keys, click Create API key and give it a name. Tick Read-only if it only needs to read.
- Copy the key. It starts with
ntf_and is only shown once.
Send it on every request:
curl https://notifier.so/api/v1/account \
-H "Authorization: Bearer ntf_your_key_here"
X-API-Key: ntf_... works too. A key acts as the person who created it, on the team it was created in. Revoke a key in the dashboard and it stops working immediately.
Endpoints
| Method and path | What it does |
|---|---|
GET /account | Team, plan, monitor limit and usage, rate limit |
GET /monitors | List monitors. Filters: status, search |
POST /monitors | Create a monitor |
GET /monitors/{id} | One monitor, with uptime for 24h, 7d, 30d and 90d |
PATCH /monitors/{id} | Change any field you send |
DELETE /monitors/{id} | Delete a monitor and its history |
POST /monitors/{id}/pause | Stop checking (no alerts while paused) |
POST /monitors/{id}/resume | Start checking again |
GET /monitors/{id}/response-times | Response times. range: 1h, 24h (default), 7d, 30d, 365d |
GET /incidents | Incidents, newest first. Filters: monitor_id, status (ongoing or resolved) |
GET /incidents/{id} | One incident, including why the check failed |
All paths are relative to https://notifier.so/api/v1. List endpoints take page and per_page (up to 100) and return data, total and has_more.
Creating a Monitor
curl -X POST https://notifier.so/api/v1/monitors \
-H "Authorization: Bearer ntf_your_key_here" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "name": "Example", "check_interval_seconds": 60}'
Fields:
type:http(default),keyword,ping,portordns. DNS needs Solo or above.url: for http and keyword monitors.hostnameandport: for ping, port and dns monitors.name: optional friendly name.check_interval_seconds: 30, 60, 300, 1800, 3600, 43200 or 86400. Defaults to your plan's fastest (5 minutes on Free, 1 minute on Solo).alert_channels: any ofemail,sms,voice,slack,telegram. Defaults to["email"].keyword: for keyword monitors,{"value": "In stock", "condition": "exists", "case_sensitive": false}. Condition isexistsornot_exists.dns_records: for dns monitors,[{"type": "A", "expected_value": "93.184.216.34"}].active:falsecreates it paused.
A monitor in a response looks like this:
{
"id": 1726,
"name": "Example",
"type": "http",
"url": "https://example.com",
"hostname": null,
"port": null,
"status": "up",
"active": true,
"check_interval_seconds": 60,
"alert_channels": ["email"],
"keyword": null,
"last_checked_at": "2026-10-21T09:41:00+00:00",
"up_since": "2026-10-21T09:30:00+00:00",
"down_since": null,
"created_at": "2026-10-21T09:29:12+00:00",
"dashboard_url": "https://notifier.so/new/monitoring/monitor/?id=1726"
}
status is one of up, down, paused or pending (not checked yet).
Pausing During Deploys
Pause a monitor before a deploy and resume it after, so planned downtime doesn't alert anyone:
curl -X POST https://notifier.so/api/v1/monitors/1726/pause -H "Authorization: Bearer $NOTIFIER_API_KEY"
./deploy.sh
curl -X POST https://notifier.so/api/v1/monitors/1726/resume -H "Authorization: Bearer $NOTIFIER_API_KEY"
Incidents
{
"id": 59511,
"monitor_id": 1726,
"monitor_name": "Example",
"status": "resolved",
"started_at": "2026-10-20T20:04:32+00:00",
"resolved_at": "2026-10-20T20:09:30+00:00",
"duration_seconds": 297,
"reason": "Timeout (no response in 25s)"
}
reason says why the check failed, such as a timeout, an HTTP status or a connection error. Incidents from before October 21, 2026 have no reason.
Errors and Limits
Errors return a non-2xx status and a JSON body:
{"error": "Validation failed.", "details": {"check_interval_seconds": ["Check interval must be at least 5 minutes for your plan"]}}
- 400: invalid input or a plan limit.
detailslists the problem fields. - 401: missing, invalid or revoked key.
- 403: a read-only key tried to change something.
- 404: no such monitor or incident on your team.
- 429: rate limit hit. Wait a minute and retry.
Monitors can only check public addresses. Private, internal and cloud metadata addresses are rejected.
Help
Questions or a missing endpoint you need? Email support@notifier.so or use the chat on any page. Want alerts pushed to your systems instead? See Webhooks. Using an AI assistant? Connect it with the MCP server.