Monitors API Reference

Possible Values for fields

Monitor Location

ValueDescription
US_EAST_1N. Virginia
EU_CENTRAL_1Frankfurt
AP_NORTHEAST_1Tokyo

Monitor Alert Types

ValueDescription
INCIDENTIncident alert
EMAILEmail alert
SMSSMS alert
SLACKSlack alert
DISCORDDiscord alert
MICROSOFT_TEAMSMicrosoft Teams alert
PHONE_CALLPhone call alert
WEBHOOKWebhook alert

Monitor Status

ValueDescription
UPMonitor is running normally
DOWNMonitor has failed
DEGRADEDMonitor is experiencing issues
UNKNOWNMonitor state can't be determined

Check Inserted Logs

Endpoint:

GET /monitors/check_inserted_logs

Example request

GET /monitors/check_inserted_logs

Example response

{
"message": "10 logs inserted in the last five minutes"
}

Get Monitors

You can use this endpoint to find and navigate through a list of all the existing monitors.

Endpoint:

GET /:page_id/monitors

Query Parameters

ParameterTypeDefault ValueDescription
limitnumber100The number of monitors per page.
searchstringnullSearch term for filtering results.
statusenumnullStatus filter ('UP', 'DOWN', 'UNKNOWN', 'DEGRADED').

Example request

GET /1/monitors?limit=3&page=2&status=DOWN

Example response

{
"monitors": [
{...monitor objects}
],
total: 10,
page: 3,
totalPages: 5,
limit: 2
}

Create a Monitor

Endpoint:

POST /monitors

Example request

{
"pageId": "page123",
"url": "https://example.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"type": "STATUSCODE",
"comparison": "EQUALS",
"selector": null,
"target": "200"
}
],
"alerts": ["alert-id-1", "alert-id-2"],
"name": "Example Monitor",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
}
}

Example response

{
"monitor": {
"pageId": "page123",
"url": "https://example.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"id": "assertion1",
"type": "STATUS_CODE",
"comparison": "EQUALS",
"selector": null,
"target": "200"
}
],
"alerts": ["alert1", "alert2"],
"name": "Example Monitor",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z"
},
"message": "Monitor created successfully"
}

Update a Monitor

Endpoint:

PUT /monitors/:id

Example request

{
"url": "https://updated.com",
"name": "Updated Monitor Name"
}

Example response

{
"monitor": {
"pageId": "page123",
"url": "https://updated.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"id": "assertion1",
"type": "STATUS_CODE",
"comparison": "EQUALS",
"selector": null,
"value": "200"
}
],
"alerts": ["alert1", "alert2"],
"name": "Updated Monitor Name",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z"
},
"message": "Monitor updated successfully"
}

Delete a Monitor

Endpoint:

DELETE /monitors/:id

Example request

DELETE /monitors/monitor-id-1

Example response

{
"message": "Monitor deleted successfully."
}

Get Monitor Logs

Endpoint:

GET /monitors/:id/logs

Query Parameters

ParameterTypeDefault ValueDescription
limitnumber100The number of items per page. Cannot exceed 1000.
pagenumber1The page number to retrieve.
monitorIdstring-The ID of the monitor.
locationstringnullThe location of the monitor.
createdAtstring | object | numbernullThe creation date. Can be a string, a number, or an object with gte and lte fields.
isSuccessfulbooleannullWhether the check was successful.
isSSLCheckbooleannullWhether the check is an SSL check.
httpStatusCodestringnullThe HTTP status code of the response.
status('UP', 'DOWN', 'UNKNOWN', 'DEGRADED')nullThe status of the monitor.
dnsTimestring | number | objectnullTime taken for DNS resolution.
tcpTimestring | number | objectnullTime taken for TCP connection.
tlsTimestring | number | objectnullTime taken for TLS handshake.
firstByteTimestring | number | objectnullTime taken for the first byte to be received.
downloadTimestring | number | objectnullTime taken for the download.
responseTimestring | number | objectnullTotal response time.
performanceTimestring | number | objectnullPerformance time.
accessabilityScorestring | number | objectnullAccessibility score.
seoScorestring | number | objectnullSEO score.
bestPracticesScorestring | number | objectnullBest practices score.
successfulAssertionsstring | number | objectnullNumber of successful assertions.
sortstringchronologicallyField to sort by.

Example request

GET /monitors/monitor-id-1/logs?limit=100&page=1

Example response

{
"monitorLogs": [
// {monitor log object},
// {monitor log object 2}
],
"total": 478,
"page": 1,
"totalPages": 5,
"limit": 100
}

Run Monitor Check by ID

Endpoint:

GET /monitors/:id/run

Query Parameters

ParameterTypeDefault ValueDescription
location'US_EAST_1', 'EU_CENTRAL_1', 'AP_NORTHEAST_1', 'AP_SOUTHEAST_2', 'CA_CENTRAL_1'-The location of the monitor. Must be one of the specified values.
retrybooleanfalseIndicates whether the operation should be retried. Optional.
monitorLogIdstringnullThe unique identifier of the monitor log. Optional.

Example request

GET /monitors/monitor-id-1/run?monitorId=abc123&location=US_EAST_1&retry=true&monitorLogId=log456

Example response

{
"status": "success",
"message": "Monitor check run successfully."
}

Create Monitor Alert

Endpoint:

POST /monitor-alerts

Example request

{
"type": "EMAIL",
"pageId": "page123",
"recipient": "user@example.com",
"recipientWorkspace": "workspace123",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": ["monitor1", "monitor2"],
"metadata": "Additional information about the alert"
}

Example response

{
"monitor": {
"id": "alert123",
"siteId": "site123",
"type": "EMAIL",
"recipient": "user@example.com",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"metadata": "Additional information about the alert"
},
"message": "Monitor Alert created successfully"
}

Update Monitor Alert

Endpoint:

PUT /monitor-alerts/:id

Example request

{
"type": "EMAIL",
"monitors": ["monitor-1-id", "monitor-2-id", "monitor-3-id"]
}

Example response

{
"monitor": {
"type": "EMAIL",
"pageId": "page123",
"recipient": "user@example.com",
"recipientWorkspace": "workspace123",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": ["monitor-1-id", "monitor-2-id"],
"metadata": "Additional information about the alert"
},
"message": "Monitor alert updated successfully."
}

Get Monitor Alerts

Endpoint:

GET /:page_id/monitor-alerts

Query Parameters

ParameterTypeDefault ValueDescription
limitnumber100The number of items per page.
pagenumber1The page number to retrieve.

Example request

GET /1/monitor-alerts?limit=2&page=3

Example response

{
"monitorAlerts": [
{...monitor alert objects}
],
total: 27,
page: 3,
totalPages: 14,
limit: 2
}

Delete Monitor Alert

Endpoint:

DELETE /monitor-alerts/:id

Example request

DELETE /monitor-alerts/alert-id-1

Example response

{
"message": "Monitor alert deleted successfully."
}

Create Monitor Group

Endpoint:

POST /monitors-groups

Example request

{
"pageId": "page123",
"name": "Example Name",
"childId": "child456"
}

Example response

{
"monitor": {
"id": "group123",
"name": "Example Name",
"siteId": "site123",
"collapsed": false,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"groupId": "parentGroup123",
"children": [
{ "id": "childGroup1", "name": "Child Group 1" },
{ "id": "childGroup2", "name": "Child Group 2" }
],
"order": 1,
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"parents": ["parent1", "parent2"],
"componentId": "component123"
},
"message": "Monitor group created successfully."
}

Update Monitor Group

Endpoint:

PUT /monitors-groups/:id

Example request

{
"name": "Updated Monitor Group Name"
}

Example response

{
"monitor": {
"id": "group123",
"name": "Updated Monitor Group Name",
"siteId": "site123",
"collapsed": true,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"groupId": "parentGroup123",
"children": [
{ "id": "childGroup1", "name": "Child Group 1" },
{ "id": "childGroup2", "name": "Child Group 2" }
],
"order": 1,
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"parents": ["parent1", "parent2"],
"componentId": "component123"
},
"message": "Monitor group updated successfully."
}

Delete Monitor Group

Endpoint:

DELETE /monitors-groups/:id

Example request

DELETE /monitors-groups/group-id-1

Example response

{
"message": "Monitor group deleted successfully."
}

Add Monitors to Group

Endpoint:

POST /monitors-groups/:id/monitors

Example request

{
"monitors": ["monitor1", "monitor2", "monitor3"]
}

Example response

{
"message": "Monitors added to the group successfully."
}

Run Monitor Group Check

Endpoint:

GET /monitors-groups/:id/run

Query Parameters

ParameterTypeDefault ValueDescription
location'US_EAST_1', 'EU_CENTRAL_1', 'AP_NORTHEAST_1', 'AP_SOUTHEAST_2', 'CA_CENTRAL_1'-The location of the monitor. Must be one of the specified values.
retrybooleanfalseIndicates whether the operation should be retried. Optional.
monitorLogIdstringnullThe unique identifier of the monitor log. Optional.

Example request

GET /monitors-groups/group-id-1/run

Example response

{
"result": "OK",
"monitorLogId": "monitor-log-id-1"
}

Cron Monitors

Cron monitors track scheduled jobs via HTTP pings. For product setup and dashboard usage, see Cron Monitoring.

Possible values for fields

Cron Monitor Status

ValueDescription
UPMonitor is running normally
DOWNMonitor has failed
DEGRADEDMonitor is experiencing issues
UNKNOWNMonitor state can't be determined

Cron Monitor State

ValueDescription
ACTIVEMonitor is actively checked
PAUSEDMonitor checks are paused
MUTEDMonitor is muted (no notifications)

Cron Monitor Log Status

ValueDescription
SUCCESSJob completed successfully
FAILUREJob explicitly reported a failure
MISSEDJob did not ping within the expected window
LATEJob pinged after the period but within grace
STARTEDJob reported that it started (execution timing)

Period and grace

Both period and grace are specified in seconds. period is how often the job should run; grace is extra time allowed before the monitor is marked down.

Get Cron Monitors

Endpoint:

GET /:page_id/monitors/cron

Query Parameters

ParameterTypeDefault ValueDescription
limitnumber100The number of cron monitors per page. Maximum is 100.
pagenumber1The page number.
searchstringnullSearch term for filtering results by name.
statusenumnullStatus filter ('UP', 'DOWN', 'UNKNOWN', 'DEGRADED').

Example request

GET /page123/monitors/cron?limit=10&page=1&status=DOWN

Example response

{
"cronMonitors": [
{
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
}
],
"total": 1,
"page": 1,
"totalPages": 1,
"limit": 10
}

Create a Cron Monitor

Endpoint:

POST /monitors/cron

Example request

{
"pageId": "page123",
"name": "Daily backup",
"period": 86400,
"grace": 3600,
"alerts": ["alert-id-1", "alert-id-2"],
"createComponent": true,
"onFail": {
"createIncident": true,
"createOutageDuration": false,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": false,
"publishIncident": true,
"notifySubscribers": true
}
}

Example response

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
},
"message": "Cron monitor created successfully."
}

The response includes a slug. Use it to build ping URLs for your job. The first successful ping schedules the background check job.

Update a Cron Monitor

Endpoint:

PUT /monitors/cron/:id

Example request

{
"name": "Daily backup (updated)",
"period": 43200,
"grace": 1800,
"state": "PAUSED",
"alerts": ["alert-id-1"],
"onFail": {
"notifySubscribers": false
}
}

Example response

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup (updated)",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 43200,
"grace": 1800,
"status": "UP",
"state": "PAUSED",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": false,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"alerts": [
{
"id": "alert-id-1",
"type": "EMAIL",
"recipient": "ops@example.com"
}
],
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-16T10:30:00.000Z"
},
"message": "Cron monitor updated successfully."
}

Delete a Cron Monitor

Endpoint:

DELETE /monitors/cron/:id

Example request

DELETE /monitors/cron/cron-abc123

Example response

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
},
"message": "Cron monitor deleted successfully."
}

Get Cron Monitor Logs

Endpoint:

GET /monitors/cron/:id/logs

Query Parameters

ParameterTypeDefault ValueDescription
limitnumber100The number of logs per page. Maximum is 127.
pagenumber1The page number. Maximum is 1000.
startDatestring1 year agoISO 8601 start date for the log range.
endDatestringnowISO 8601 end date for the log range.
importanceenumnullFilter logs by importance ('all', 'important').

Example request

GET /monitors/cron/cron-abc123/logs?limit=50&page=1&importance=important

Example response

{
"logs": [
{
"id": "log-xyz789",
"monitorId": "cron-abc123",
"status": "SUCCESS",
"requestType": "GET",
"agent": "curl/8.4.0",
"ipAddress": "203.0.113.10",
"createdAt": "2024-01-16T06:00:00.000Z",
"startedAt": "2024-01-16T05:59:58.000Z"
}
],
"page": 1
}

Get Cron Monitor Summary

Endpoint:

GET /monitors/cron/:id/summary

Example request

GET /monitors/cron/cron-abc123/summary

Example response

{
"summary": {
"totalLogs": 120,
"totalFailedLogs": 3,
"availability": 97.5,
"oneDayAvailability": 100,
"previousDayAvailability": 100,
"sevenDayAvailability": 98.2,
"previousSevenDayAvailability": 96.1,
"thirtyDayAvailability": 97.5,
"previousThirtyDayAvailability": 95.8,
"lastSuccess": "2024-01-16T06:00:00.000Z",
"lastFailure": "2024-01-10T06:00:00.000Z",
"lastStarted": null,
"upSince": "2024-01-10T07:00:00.000Z",
"downSince": null
}
}

Ping endpoints

These endpoints do not require authentication. The monitor slug acts as the secret.

You can ping via the API base URL or the dedicated cron host:

  • Success: https://cron.instatus.com/{slug} or GET / POST / HEAD /monitors/cron/{slug}
  • Failure: https://cron.instatus.com/{slug}/fail or GET / POST / HEAD /monitors/cron/{slug}/fail
  • Start: https://cron.instatus.com/{slug}/start or GET / POST / HEAD /monitors/cron/{slug}/start

Send a success ping each time your job completes on schedule. Send a start ping before the job runs and a success or failure ping when it finishes to record execution time.

Example success ping

curl https://cron.instatus.com/my-page-x7k2m9n4p1q8w3e5

Example response

{
"id": "log-xyz789",
"monitorId": "cron-abc123",
"status": "SUCCESS",
"requestType": "GET",
"agent": "curl/8.4.0",
"ipAddress": "203.0.113.10",
"createdAt": "2024-01-16T06:00:00.000Z"
}

If the slug is invalid, the response is:

{
"message": "Monitor not found"
}