The Monitor API allows you to configure monitor settings, including schedules, assertions, alert preferences and more.
This guide includes a detailed reference of monitor attributes, as well as examples of creating, modifying, and deleting a monitor. Cronitor's open-source SDKs are the easiest way to use this API.
In this guide:
assertions
array containing strings optional
Monitors are continuously evaluated for both schedule and assertion violations. When Cronitor detects a problem, an alert is sent.
The syntax for expressing most assertions is:
"{assertion} {operator} {value}"
"metric.duration < 5 min"
"response.code = 200"
Assertions that use an access key to a hash data structure — response.json
and response.header
assertions — are expressed as:
"{assertion} {key} {operator} {value}"
"response.json new_user.count > 10"
"response.header X-App-Version = 1.2.3"
Assertion | Monitor Type | Operators | Value Type |
metric.duration |
job , heartbeat |
<, <=, >=, > | interval e.g. '2 minutes' |
metric.count |
job , heartbeat |
<, <=, >=, > | int |
metric.error_count |
job , heartbeat |
<, <=, >=, > | int |
metric.error_rate |
job , heartbeat |
<, <=, >=, > | decimal |
response.time |
check |
<, <=, >=, > | interval e.g. '1.2s' |
response.code |
check |
<, <=, >=, > | int |
response.body |
check |
contains, !contains, =, != | string |
response.json |
check |
contains, !contains, <, <=, =, !=, >=, > | * |
response.header |
check |
contains, !contains, <, <=, =, !=, >=, > | * |
resource.last_modified |
check |
<, <=, =, !=, >=, > | interval |
resource.item_count |
check |
<, <=, =, !=, >=, > | int |
resource.public |
check |
= | boolean |
ssl_certificate.expires_in |
check |
= | interval e.g. '30 days' |
grace_seconds
integer default: 60 for type 'job', 0 for types 'event'/'check'
The number of seconds that Cronitor should wait after detecting a failure before dispatching an alert. If the monitor recovers during the grace period no alert will be sent.
group
string optional
Groups are user-defined collections of monitors, that are used to group monitors in the Cronitor application. Each group has a unique URL with the format https://cronitor.io/app/groups/:groupKey
key
string required
A monitor’s unique identifier. The key is used in making API requests to an individual monitor resource, e.g. https://cronitor.io/api/monitors/:monitorKey
It is also the required identifier for sending telemetry events. https://cronitor.link/ping/API_KEY/:monitorKey
metadata
hash optional
A JSON serializable set of arbitrary key/value pairs that contain useful information about a job. For example, cronitor-kubernetes stores fields like backoffLimit
and startingDeadlineSeconds
.
name
string default: 'key' attribute
The display name of this monitor. Used to identify your monitor in alerts and within the Cronitor application.
note
string optional
A useful place to provide additional context/troubleshooting information about the job/system being monitored. The note is sent in alerts (excluding SMS), and are accessible from the monitor details view in the Cronitor application.
notify
mixed type: array, hash default: ['default']
Configure where alerts sent when Cronitor detects an error. Additionally, notify can be used to specify occurrence based alerts - alerts based on receiving telemetry pings.
All accounts have a default Notification List (key="default"). If notify is left empty or omitted, the default list will be used.
Array: An array of Notification List keys. Notification Lists are used for configuring how alerts are sent to your team.
"notify": [‘devops-list’]
You can also specify individual integrations prefixed with the integration type.
"notify": [‘email:alerts@example.com, sms:+155512345555, slack:#devops-channel’]
Hash: To specify separate notification preferences a hash containing the keys "alerts" and "events" can be used.
The "alerts" key accepts an array of Notification List keys. The "events" key accepts a hash with keys corresponding to the lifecycle telemetry events - run
, complete
. If these keys are set to true
, Cronitor will send a notification when the event occurs.
{ "notify": { "alerts": [‘foo-bar’], "events": {"complete": true} }
paused
boolean
Is monitoring/alerting enabled or disabled.
platform
string optional / type dependent
The platform attribute is used in conjunction with the type attribute to tell Cronitor about where and how a monitor is being run beyond.
The platform options for job monitors are:
The platform options for check monitors are:
realert_interval
integer or string optional default: '8 hours'
Interval expression telling Cronitor how long to wait before sending follow up alerts after a monitor fails (and does not recover).
If an integer is provided it will be interpreted as `X hours`
After 10 alerts, Cronitor will mute alerting until the monitor recovers.
request
hash required by type 'check'
The details of the outgoing request:
url
string - The URL of the resource to monitor.
method
string - The HTTP request method: GET HEAD PATCH POST PUT
body
string - The request body. Required for PUT, PATCH, and POST requests.
headers
hash optional - The HTTP headers of the request (e.g. User-Agent). Limited to 5120 chars.
cookies
hash optional - Cookies to set before each request. Limited to 5120 chars.
timeout_seconds
integer 1 to 15 default: 10 - The timeout enforced when making the request. An alert will be triggered upon timeout.
follow_redirects
boolean default: true - If a request returns a redirect follow it and perform any assertions after the final redirect.
verify_ssl
boolean default: true - If a request is made to an https:// endpoint verify the SSL certificate.
schedule
string optional
Schedule has different meanings depending on the monitor type.
job & heartbeat: the schedule tells Cronitor when to expect telemetry events from your system. If events are not received on schedule, an alert is sent.
An interval expression (‘every 5 minutes’), cron expression (‘0 0 * * *’) or time of day expression ('at 14:30') must be used.
check: the schedule is used to tell Cronitor how frequently to make requests to the resource being monitored.
An interval expression must be used. The range of accepted values is 30 seconds to 1 hour. e.g. ‘every 2 minutes’.
timezone
string default: account.timezone or 'UTC'
The timezone your system is running in.
schedule_tolerance
integer default: 0
Number of missed scheduled executions to allow before sending an alert.
failure_tolerance
integer default: 0
job & heartbeat: number of telemetry events with state='fail'
to allow before sending an alert.
check: number of consecutive failed requests allow before sending an alert.
type
string enum(job|event|check) required
The type attribute determines which of Cronitor's monitoring capabilities are used to assess the health of your system. Based on the type provided, other attributes may be required — e.g. the checks type requires the request
attribute to be set.
jobs monitor the execution of a backend job (cron job, scheduled task, etc). This involves tracking the lifecycle of the job - the start_time, end_time and exit_state of the job.
checks monitor websites, APIs, proxy servers, cloud storage providers (e.g. S3) or any other HTTP/TCP/UDP networked device.
heartbeats monitor the health of a system via telemetry events (heartbeats). There is no lifecycle to measure, the occurrence or absence of healthy/unhealthy events, as well as data passed as custom metrics are used to determine the health of an event monitor.
created
timestamp
ISO 8601 formatted timestamp of when the monitor was created.
disabled
boolean
Whether the monitor is currently disabled.
initialized
boolean
Whether the monitor has received a telemetry event.
passing
boolean
Whether the monitor is currently passing or failing.
running
boolean
Whether a job is running (only applicable for type: job).
defaultName
string
When using Cronitor as part of a provisioning process it is useful to provide a name, but to allow users to be able to later edit that name from the Cronitor dashboard without the provisioning script later replacing the edit.
defaultName will be displayed as the name attribute if name is not set.
defaultNote
string
Same as defaultNote above, but for the note field.
The Monitor API supports bulk creates (and updates) by making a PUT
request to the top level monitors resource.
PUT https://cronitor.io/api/monitors | status_codes: 200, 400
curl --user API_KEY: \
--header "Content-Type: application/json" \
--request PUT \
--data '{
"monitors": [
{
"type": "job",
"key": "nightly-backup-job",
"schedule": "0 0 * * *",
"notify": ["devops-alerts"],
"assertions": ["metric.duration < 15min"]
},
{
"type": "job",
"key": "weekly-customer-reports",
"schedule": "0 0 * * Mon",
"notify": ["devops-alerts"],
"assertions": ["metric.duration < 30s"]
}
]
}' \
https://cronitor.io/api/monitors
Tip:The body of a PUT
request can be an array of monitors (shown above), or a hash containing the keys "monitors" (array)
and "rollback" (boolean)
— a flag that will run the request in a transaction that is rolled back on success. This can be helpful when testing/validating monitor configuration.
Monitors can also be created individually by making a POST
request.
POST https://cronitor.io/api/monitors | status_codes: 201, 400
// create a job monitor
curl --user API_KEY: \
--header "Content-Type: application/json" \
--request POST \
--data '{
"type": "job",
"key": "nightly-backup-job",
"schedule": "0 0 * * *",
"notify": ["devops-alerts"]
}' \
https://cronitor.io/api/monitors
// create a check monitor
curl --user API_KEY: \
--header "Content-Type: application/json" \
--request POST \
--data '{
"type": "check",
"key": "cronitor-homepage",
"schedule": "every 60 seconds",
"notify": ["uptime-alerts"],
"request": {
"url": "https://cronitor.io",
"regions": ["us-east-1", "eu-central-1", "ap-south-1"]
}
}' \
https://cronitor.io/api/monitors
Monitors can be retrieved in bulk by making a GET
request to the top level monitors resource.
GET https://cronitor.io/api/monitors
curl https://cronitor.io/api/monitors -u API_KEY:
An individual monitor can be retrieved by making a GET
request that includes a monitor key in the URL.
GET https://cronitor.io/api/monitors/:monitorKey
curl https://cronitor.io/api/monitors/nightly-backup-job -u API_KEY:
Monitors can be modified in bulk by issuing a PUT
request to the top level monitors resource:
PUT https://cronitor.io/api/monitors | status_codes: 200, 400
curl --user API_KEY: \
--header "Content-Type: application/json" \
--request PUT \
-d '{
"monitors": [
{
"schedule": "0 1 * * *",
"key": "nightly-backup-job"
},
{
"schedule": "5 * * * *",
"key": "hourly-report-generator"
}
]}' \
https://cronitor.io/api/monitors
Monitors can be modified indivually by making a PUT
request that includes a monitor key in the URL.
PUT https://cronitor.io/api/monitors/:monitorKey | status_codes: 200, 400
curl --user API_KEY: \
--header "Content-Type: application/json" \
--request PUT \
--data '{
"schedule": "0 1 * * *",
}' \
https://cronitor.io/api/monitors/nightly-backup/job
Monitors can be modified indivually by making a DELETE
request that includes a monitor key in the URL.
DELETE https://cronitor.io/api/monitors/:monitorKey
curl -X DELETE https://cronitor.io/api/monitors/nightly-backup-job -u API_KEY:
You can programatically pause the evaluation of a monitor. When a monitor is in a paused state Cronitor will record and display all telemetry events, but will not dispatch alerts if a schedule or assertion violation is detected.
GET https://cronitor.io/api/monitors/:monitorKey/pause
// pause monitoring indefinitely
GET https://cronitor.io/api/monitors/:monitorKey/pause/24
// pause monitoring for 24 hours
GET https://cronitor.io/api/monitors/:monitorKey/pause/0
// resume monitoring