Developer API
Programmatic REST access to every tool. Every endpoint returns the same JSON envelope — { ok: true, data, meta } on success, { ok: false, error } on failure. The HTTP status always agrees with the ok field.
Authentication is optional. Anonymous requests are counted per client IP and capped at 15 queries per minute. For a higher limit, create an API key from the Monitors dashboard and send it on every request in the X-API-Key header.
| Access | Limit | Note |
|---|---|---|
| Anonymous | 15 / min | Per IP — no key required |
| API key | Higher | Per key — depends on plan |
Every response carries X-RateLimit-Limit and X-RateLimit-Remaining headers. When the limit is exceeded the API returns 429 and the retryMs field tells you, in milliseconds, when the window resets.
curl -H "X-API-Key: nt_xxx" \ "/api/v1/dns?domain=example.com&type=MX"
| Method | Path | Description | |
|---|---|---|---|
| GET | /api/v1/dns?domain=example.com&type=MX | DNS records | |
| GET | /api/v1/ssl?host=example.com | SSL certificate | |
| GET | /api/v1/whois?domain=example.com | WHOIS info | |
| GET | /api/v1/ip?ip=8.8.8.8 | IP geolocation | |
| GET | /api/v1/blacklist?ip=8.8.8.8 | Blacklist check | |
| GET | /api/v1/asn?query=AS15169 | ASN / BGP | |
| GET | /api/v1/email-security?domain=example.com | SPF/DKIM/DMARC | |
| GET | /api/v1/subnet?cidr=192.168.1.0/24 | Subnet calc | |
| POST | /api/v1/report | Unified domain report | |
| POST | /api/v1/bulk/report | Bulk report (max 25) |
{
"ok": true,
"data": {
"resolver": "Google (8.8.8.8)",
"records": { "MX": [{ "data": "10 mail.example.com", "TTL": 3600 }] }
},
"meta": { "cached": false, "plan": "free" }
}- ok
- Whether the request succeeded. When false, an error field replaces data and meta.
- data
- The endpoint-specific result body — present only on ok:true responses.
- meta
- Side information about the request: cached (served from cache), plan (anon or the key's plan), tookMs, and count on bulk requests.
Failed requests return the error form of the same envelope: ok is always false and error is a human-readable message. Some failures carry extra fields — a 429 adds plan and retryMs.
{
"ok": false,
"error": "Rate limit aşıldı",
"plan": "anon",
"retryMs": 41230
}| Code | Meaning | When | Extra fields |
|---|---|---|---|
| 200 | OK | Successful response — ok:true | — |
| 204 | No Content | OPTIONS preflight (CORS) — no body | — |
| 400 | Bad Request | Missing or invalid parameter | — |
| 401 | Unauthorized | Session-only dashboard routes (/api/monitors, /api/keys) | — |
| 404 | Not Found | Unknown endpoint or record | — |
| 429 | Too Many Requests | Per-minute limit exceeded | plan, retryMs |
| 502 | Bad Gateway | Upstream lookup failed | — |
A single request processes at most 25 targets; extras are silently trimmed. Each target is evaluated independently and the response is 200 even if one fails — check data[].ok per target.
curl -X POST -H "X-API-Key: nt_xxx" -H "content-type: application/json" \
-d '{"targets":["example.com","google.com"]}' \
/api/v1/bulk/report