Try the RankNibbler SEO API

Get a monitor Beta

GET /api/v1/monitors/{id}

Returns one monitor with its uptime over four periods, its last outage, certificate and domain details, who gets alerts, and all of its settings.

Needs an X-API-Key header whose owner has access to uptime monitoring in the app. The call counts once against your daily quota. See Monitoring API: getting started for authentication, rate limits and errors.

Path parameters

NameTypeDescription
id requiredstringThe monitor id.

Request

Response

200 · application/json
  1. {
  2. "monitor": {
  3. "id": "mon_79ce3cf9c4fa56e98af4",
  4. "name": "Checkout",
  5. "url": "https://shop.example.com/checkout",
  6. "host": "shop.example.com",
  7. "type": "http",
  8. "port": null,
  9. "status": "up",
  10. "active": true,
  11. "statusCode": 200,
  12. "responseMs": 231,
  13. "error": null,
  14. "intervalMinutes": 15,
  15. "regions": ["default", "eu"],
  16. "importance": "high",
  17. "tags": ["production", "shop"],
  18. "lastCheckedAt": "2026-09-17T09:30:04.221Z",
  19. "lastChangedAt": "2026-09-16T22:41:10.502Z",
  20. "createdAt": "2026-08-02T14:22:51.000Z",
  21. "firstCheckAt": "2026-08-02T14:22:52.310Z",
  22. "uptime": {
  23. "24h": { "uptimePct": 100, "outages": 0, "downtimeSeconds": 0, "mtbfSeconds": null, "coveredSeconds": 86400 },
  24. "7d": { "uptimePct": 99.86, "outages": 1, "downtimeSeconds": 840, "mtbfSeconds": 603960, "coveredSeconds": 604800 },
  25. "30d": { "uptimePct": 99.9, "outages": 2, "downtimeSeconds": 2460, "mtbfSeconds": 1287270, "coveredSeconds": 2577000 },
  26. "365d": { "uptimePct": 99.9, "outages": 2, "downtimeSeconds": 2460, "mtbfSeconds": 1287270, "coveredSeconds": 2577000 }
  27. },
  28. "lastOutage": {
  29. "startedAt": "2026-09-16T22:27:10.114Z",
  30. "resolvedAt": "2026-09-16T22:41:10.502Z",
  31. "ongoing": false,
  32. "cause": "HTTP 502",
  33. "duringMaintenance": false
  34. },
  35. "maintenance": {
  36. "active": null,
  37. "upcoming": [
  38. { "occurrenceId": "48213", "maintenanceId": "mw_3f9a0c1d2e4b5a6c7d8e", "description": "Weekly database backup",
  39. "from": "2026-09-20T02:00:00.000Z", "to": "2026-09-20T03:00:00.000Z", "active": false }
  40. ]
  41. },
  42. "alertContacts": [{ "id": "ct_5b8d1f0a9c2e4d6f7a83", "name": "Night shift" }],
  43. "alertTeams": [{ "id": "tm_2c7e91a4b6d0f3e85a17", "name": "Support" }],
  44. "ssl": { "expiresAt": "2026-11-28T23:59:59.000Z", "issuer": "Let's Encrypt", "checkedAt": "2026-09-17T06:00:12.000Z" },
  45. "domain": { "name": "example.com", "expiresAt": "2027-03-14T00:00:00.000Z", "checkedAt": "2026-09-17T03:12:40.000Z", "error": null },
  46. "recipients": [{ "id": 42, "name": "Sam Taylor", "email": "[email protected]" }],
  47. "settings": {
  48. "name": "Checkout",
  49. "url": "https://shop.example.com/checkout",
  50. "intervalMinutes": 15,
  51. "regions": ["default", "eu"],
  52. "tags": ["production", "shop"],
  53. "timeoutSeconds": 30,
  54. "shouldContain": "Place order",
  55. "shouldNotContain": "",
  56. "postData": "",
  57. "requestHeaders": [],
  58. "authUsername": "",
  59. "hasAuthPassword": false,
  60. "verifyCertificate": true,
  61. "sslDownDays": 0,
  62. "importance": "high",
  63. "recipients": [42],
  64. "contacts": ["ct_5b8d1f0a9c2e4d6f7a83"],
  65. "teams": ["tm_2c7e91a4b6d0f3e85a17"],
  66. "alertAfterMinutes": 2,
  67. "resendEveryMinutes": 0,
  68. "notifyBackUp": true,
  69. "alertMessage": ""
  70. }
  71. },
  72. "usage": { "used": 14, "dailyLimit": 100, "tier": "free" }
  73. }

Detail fields

The detail has the same basic fields as the list, including type and port (without uptime24h, checks24h, sslExpiresAt and domainExpiresAt), plus:

FieldTypeDescription
firstCheckAtstring | nullWhen the monitor was first checked.
uptimeobjectKeyed by 24h, 7d, 30d and 365d. Each period only covers time since the first check, so a new monitor isn't marked down for time before it existed.
uptime.*.uptimePctnumber | nullPercentage of the covered time the monitor was up, to two decimal places. null before the first check.
uptime.*.outagesintegerNumber of outages that overlap the period.
uptime.*.downtimeSecondsintegerTotal time down in the period.
uptime.*.mtbfSecondsinteger | nullMean time between failures: up time divided by the number of outages. null with no outages.
uptime.*.coveredSecondsintegerHow much of the period the figures cover. Time inside a maintenance window is left out, and downtime during maintenance isn't counted.
lastOutageobject | nullThe most recent outage: startedAt, resolvedAt (null while ongoing), ongoing, cause and duringMaintenance (true when all of its downtime fell inside maintenance). null if it has never been down.
maintenanceobjectMaintenance covering this monitor: active is the occurrence running now, or null, and upcoming lists up to 5 more. Each has occurrenceId, maintenanceId, description, from, to and active. See Maintenance windows.
alertContacts, alertTeamsobject[]The alert contacts and teams this monitor alerts, as { id, name }. The same ids are in settings.contacts and settings.teams; the names are here so you don't have to fetch the contact list to label them. Empty arrays when the monitor has none.
sslobject | nullexpiresAt, issuer and checkedAt for the certificate.
domainobject | nullname, expiresAt, checkedAt and error for the domain registration lookup.
recipientsobject[]Who gets alerts: id, name and email of each workspace user. The monitor's alert contacts and teams are in alertContacts and alertTeams.
settingsobjectEvery setting, in the shape you send them. hasAuthPassword tells you whether a password is stored; the password itself is never returned.

Errors

StatusWhen
401The API key is missing or invalid.
403The key's owner doesn't have access to uptime monitoring, or the key isn't linked to a workspace.
404No monitor with that id in your workspace.
405The endpoint doesn't accept that method.
429A rate limit or your daily quota was hit. Read Retry-After, in seconds.
500Something went wrong on our side. Try again.
503The API is temporarily unavailable. Try again shortly.

Errors are JSON: { "error": "message" }. See Monitoring API errors.

Related