ImpulseyeImpulseye
FeaturesIntegrationsPricingBlogChangelogIs It Down?

Impulseye REST API Reference

A read-only REST API for pulling your monitors, incidents, and check history into your own dashboards, scripts, and tooling. Available on the Business plan.

Authentication

Every request needs an API key in the Authorization header. Generate one from Settings → API Keys, the key is shown once, at creation, and never again, so store it somewhere safe.

bash
curl https://impulseye.com/api/v1/monitors \
  -H "Authorization: Bearer iek_live_xxxxxxxxxxxxxxxxxxxx"
Keys are bearer credentials

Anyone with the key can read your monitoring data. Treat it like a password, don't commit it, don't put it in client-side code, and revoke it immediately from Settings if it ever leaks.

Base URL

text
https://impulseye.com/api/v1

Rate limits

5,000 requests/hour per key, on a fixed hourly window (it resets at the top of each hour, not 60 minutes after your first request). Every response carries headers so you can self-throttle before hitting the limit:

  • X-RateLimit-Limit: the ceiling for the current window (5000)
  • X-RateLimit-Remaining: requests left before you're throttled

Exceeding the limit returns 429 Too Many Requests until the next hour begins.

Pagination

List endpoints accept ?limit= (default 50, max 200) and ?offset=. Every list response includes a pagination object with the total row count so you know when to stop paging.

json
{
  "data": [ /* … */ ],
  "pagination": { "limit": 50, "offset": 0, "total": 9 }
}

Endpoints

List monitors

GET/monitors

Returns every monitor owned by the authenticated key, most recently created first.

bash
curl "https://impulseye.com/api/v1/monitors?limit=20" \
  -H "Authorization: Bearer $IMPULSEYE_API_KEY"
json
{
  "data": [
    {
      "id": "af037a1a-f660-4321-9f32-ce04bd689f23",
      "name": "Impulseye (Dogfood)",
      "url": "https://impulseye.com",
      "type": "http",
      "status": "up",
      "active": true,
      "check_interval_minutes": 0.5,
      "port": 443,
      "created_at": "2026-07-14T15:58:31.590Z",
      "last_checked_at": "2026-07-19T09:14:31.047Z"
    }
  ],
  "pagination": { "limit": 20, "offset": 0, "total": 9 }
}

Create monitors

POST/monitors

Send a single monitor object, or an array of up to 100 for bulk creation. A bulk request is all-or-nothing: if any item fails validation, nothing is created and the error tells you which item (by index) was the problem. The whole batch is also rejected up front if it would push the account over its plan's active-monitor limit.

Common fields: name (required), type (http default, or tcp, heartbeat, change, dns), url, check_interval_minutes, label, is_public. Type-specific fields: port (tcp), keyword_target/http_method/headers/request_body (http), content_selector (change), dns_record_type/dns_expected_value (dns), period_minutes/grace_minutes (heartbeat).

bash
curl -X POST https://impulseye.com/api/v1/monitors \
  -H "Authorization: Bearer $IMPULSEYE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[
    { "name": "API", "type": "http", "url": "https://api.example.com/health" },
    { "name": "DB",  "type": "tcp",  "url": "db.example.com", "port": 5432 }
  ]'
json
{
  "data": [
    { "id": "…", "name": "API", "type": "http", "status": "pending", "active": true, … },
    { "id": "…", "name": "DB",  "type": "tcp",  "status": "pending", "active": true, … }
  ]
}
Bulk creation is best-effort valid, not best-effort applied

Some fields silently fall back to a safe default instead of erroring, e.g. an unrecognized check_interval_minutes value falls back to the fastest interval your plan allows, rather than rejecting the whole request over one odd value. Required fields (name, and url/port where the type needs them) still return a hard 400 if missing or invalid.

Get a single monitor

GET/monitors/:id

Returns one monitor by id. A monitor that doesn't exist, or belongs to another account, returns 404 either way, the API never confirms whether an id you don't own exists.

bash
curl https://impulseye.com/api/v1/monitors/af037a1a-f660-4321-9f32-ce04bd689f23 \
  -H "Authorization: Bearer $IMPULSEYE_API_KEY"

Monitor check history

GET/monitors/:id/logs

Recent per-check results for one monitor: status code, response time, and up/down state. Accepts the same limit/offset pagination. Data is only available for the plan's raw retention window (currently 14 days on Business); older checks have already been rolled up and pruned, so requesting further back just returns fewer rows, not an error.

bash
curl "https://impulseye.com/api/v1/monitors/af037a1a-.../logs?limit=100" \
  -H "Authorization: Bearer $IMPULSEYE_API_KEY"
json
{
  "data": [
    {
      "id": "9f8f10e2-6882-4e9f-9c4a-75dd10de86ac",
      "monitor_id": "af037a1a-f660-4321-9f32-ce04bd689f23",
      "status_code": 200,
      "response_time_ms": 142,
      "is_up": true,
      "created_at": "2026-07-20T22:19:27.483Z"
    }
  ],
  "pagination": { "limit": 100, "offset": 0, "total": 4032, "retention_days": 14 }
}

List incidents

GET/incidents

Incidents across every monitor you own. Filter with ?monitor_id= to scope to one monitor, or ?status= (investigating, identified, monitoring, resolved, maintenance).

bash
curl "https://impulseye.com/api/v1/incidents?status=identified" \
  -H "Authorization: Bearer $IMPULSEYE_API_KEY"
json
{
  "data": [
    {
      "id": "59d79dcb-4df4-4690-89cf-db282edc71d7",
      "monitor_id": "801ae360-938e-4b9e-b56f-c1f63a5d11db",
      "title": "Cause identified",
      "body": "Upstream payment gateway outage confirmed. Failover in progress.",
      "status": "identified",
      "created_at": "2026-06-28T21:06:30.137Z",
      "updated_at": "2026-06-28T21:06:30.137Z"
    }
  ],
  "pagination": { "limit": 50, "offset": 0, "total": 2 }
}

Errors

Errors are a JSON body with a single error string and an HTTP status:

json
{ "error": "Invalid or revoked API key" }
StatusMeaning
401Missing, malformed, invalid, or revoked API key
403Key is valid, but the account isn't on the Business plan
404Resource doesn't exist, or belongs to a different account
429Rate limit exceeded, wait for the hourly window to reset
500Something broke on our end, safe to retry
Versioning

The API is versioned at the URL (/api/v1). Breaking changes will ship as a new version rather than changing v1's behavior under you, existing integrations won't silently break.

Need something this API doesn't cover yet? Email support@impulseye.com.

ImpulseyeImpulseye

Uptime monitoring that is dead simple. Instant alerts via email, Slack, and Discord, set up in under 30 seconds.

support@impulseye.com

Product

  • Features
  • Integrations
  • Pricing
  • Blog
  • Changelog

Tools

  • Is It Down?
  • Dashboard
  • Status Pages
  • Impulseye Status
  • API Docs
  • FAQ

Legal

  • Terms of Service
  • Privacy Policy
  • Refund Policy

© 2026 Impulseye. All rights reserved.

ContactTermsPrivacy