Jump to a call
Monitors
Alert channels
Plan limits
Results
Notifications
API reference
These are the calls you can make with an API key. Every call is a POST with a JSON body to its own address:
https://www.obsrvly.com/api/gw/<area>/obsrvly.v1.<Service>/<Call>
Send your key in the Authorization header. Calls marked no key needed work without one. Field names are camelCase. You never name your team: obsrvly takes it from the key.
For keys, errors, rate limits, pages of results and worked examples, read the API guide (chapter 13).
export OBSRVLY_KEY="<your-api-key>"
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListMonitors" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{"limit": 50}'Monitors
CreateUrlMonitor
MonitorConfigService
Create a monitor that requests a web address and checks the answer.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateUrlMonitor
Request fields
namestringA name you choose.
urlstringThe address to check, with https:// or http://.
methodstringThe HTTP method, such as GET or POST. Default GET.
headersmap<string, string>Request headers to send.
bodybytes (base64)The request body, base64 encoded.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
Fields of
AssertiontypestringWhat to check, such as status_code, response_time_ms, body, header.<Name>, json.<path> or json_schema. Browser monitors accept status_code, body, response_time_ms and no_console_errors.
openumHow to compare, such as ASSERTION_OP_EQ. Not used for json_schema.
One of:
ASSERTION_OP_EQ,ASSERTION_OP_NEQ,ASSERTION_OP_GT,ASSERTION_OP_LT,ASSERTION_OP_CONTAINS,ASSERTION_OP_MATCHESvaluestringThe expected value. For json_schema, the JSON Schema the body must match.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateUrlMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "acme.io health",
"url": "https://acme.io/health",
"method": "GET",
"intervalSeconds": 300,
"locations": ["us-west"],
"assertions": [{"type": "status_code", "op": "ASSERTION_OP_EQ", "value": "200"}],
"alertChannelIds": ["<channel-id>"]
}'BulkCreateUrlMonitors
MonitorConfigService
Create up to 100 URL monitors in one call. The answer has one result per monitor: the new monitor, or why it failed.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/BulkCreateUrlMonitors
Request fields
specsarray of UrlMonitorSpecOne entry per monitor to create, with the same fields as CreateUrlMonitor. At most 100.
Fields of
UrlMonitorSpecnamestringA name you choose.
urlstringThe address to check, with https:// or http://.
methodstringThe HTTP method, such as GET or POST. Default GET.
headersmap<string, string>Request headers to send.
bodybytes (base64)The request body, base64 encoded.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
Response fields
resultsarray of BulkCreateUrlMonitorsResultOne result per spec, in order.
Fields of
BulkCreateUrlMonitorsResultmonitorMonitorThe new monitor, when it was created.
errorstringWhy it failed, when it failed.
urlstringThe URL from the spec, so you can match results.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/BulkCreateUrlMonitors" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"specs": [{"name": "home", "url": "https://acme.io/", "intervalSeconds": 300}, {"name": "api", "url": "https://api.acme.io/health", "intervalSeconds": 300}]
}'CreateApiMonitor
MonitorConfigService
Create a monitor that calls an API, in one request or in several steps that pass values along.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateApiMonitor
Request fields
namestringA name you choose.
urlstringThe address to check, with https:// or http://.
methodstringThe HTTP method, such as GET or POST. Default GET.
headersmap<string, string>Request headers to send.
bodybytes (base64)The request body, base64 encoded.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
Fields of
AssertiontypestringWhat to check, such as status_code, response_time_ms, body, header.<Name>, json.<path> or json_schema. Browser monitors accept status_code, body, response_time_ms and no_console_errors.
openumHow to compare, such as ASSERTION_OP_EQ. Not used for json_schema.
One of:
ASSERTION_OP_EQ,ASSERTION_OP_NEQ,ASSERTION_OP_GT,ASSERTION_OP_LT,ASSERTION_OP_CONTAINS,ASSERTION_OP_MATCHESvaluestringThe expected value. For json_schema, the JSON Schema the body must match.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
apiStepsarray of ApiStepOptional steps, run in order. Empty means one request built from the fields above.
Fields of
ApiStepnamestringA name for the step.
methodstringThe HTTP method, such as GET or POST. Default GET.
urlstringThe address to check, with https:// or http://.
headersmap<string, string>Request headers to send.
bodybytes (base64)The request body, base64 encoded.
assertarray of AssertionRules this step's answer must pass.
extractarray of ExtractRuleValues to take from the answer for later steps.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateApiMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "orders API",
"url": "https://api.acme.io/orders",
"method": "GET",
"headers": {"Accept": "application/json"},
"intervalSeconds": 300,
"assertions": [{"type": "status_code", "op": "ASSERTION_OP_EQ", "value": "200"}]
}'CreateBrowserMonitor
MonitorConfigService
Create a monitor that opens a page in a real browser, and can click and type through a script.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateBrowserMonitor
Request fields
namestringA name you choose.
startUrlstringThe page to open.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
Fields of
AssertiontypestringWhat to check, such as status_code, response_time_ms, body, header.<Name>, json.<path> or json_schema. Browser monitors accept status_code, body, response_time_ms and no_console_errors.
openumHow to compare, such as ASSERTION_OP_EQ. Not used for json_schema.
One of:
ASSERTION_OP_EQ,ASSERTION_OP_NEQ,ASSERTION_OP_GT,ASSERTION_OP_LT,ASSERTION_OP_CONTAINS,ASSERTION_OP_MATCHESvaluestringThe expected value. For json_schema, the JSON Schema the body must match.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
scriptJsonstringOptional. A JSON array of steps, each with a kind: goto, click, fill, wait_for, assert_visible or assert_text. Empty opens the page and runs the assertions.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateBrowserMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "login page",
"startUrl": "https://acme.io/login",
"intervalSeconds": 900,
"assertions": [{"type": "no_console_errors"}]
}'CreateHeartbeatMonitor
MonitorConfigService
Create a monitor that waits for your job to ping it. The answer has the token for the ping address.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateHeartbeatMonitor
Request fields
namestringA name you choose.
intervalSecondsuint32How often your job pings, in seconds.
gracePeriodsuint32How many intervals may pass with no ping before the monitor is down. Default 1.
alertChannelIdsarray of stringIDs of the alert channels to notify.
cronExpressionstringOptional. A cron schedule for your job, instead of an interval.
graceSecondsuint32With a cron schedule: how late a ping may be, in seconds.
cronTimezonestringWith a cron schedule: the time zone, such as Asia/Kolkata. Default UTC.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
tokenstringYour job sends its pings to an address that ends with this token.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateHeartbeatMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "nightly backup",
"intervalSeconds": 86400,
"gracePeriods": 1
}'CreateTcpMonitor
MonitorConfigService
Create a monitor that checks a TCP port accepts a connection.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateTcpMonitor
Request fields
namestringA name you choose.
hoststringA hostname or IP address.
portuint32The port number.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
Fields of
AssertiontypestringWhat to check, such as status_code, response_time_ms, body, header.<Name>, json.<path> or json_schema. Browser monitors accept status_code, body, response_time_ms and no_console_errors.
openumHow to compare, such as ASSERTION_OP_EQ. Not used for json_schema.
One of:
ASSERTION_OP_EQ,ASSERTION_OP_NEQ,ASSERTION_OP_GT,ASSERTION_OP_LT,ASSERTION_OP_CONTAINS,ASSERTION_OP_MATCHESvaluestringThe expected value. For json_schema, the JSON Schema the body must match.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateTcpMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "database port",
"host": "db.acme.io",
"port": 5432,
"intervalSeconds": 300
}'CreateUdpMonitor
MonitorConfigService
Create a monitor that sends a UDP packet and checks the reply.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateUdpMonitor
Request fields
namestringA name you choose.
hoststringA hostname or IP address.
portuint32The port number.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
Fields of
AssertiontypestringWhat to check, such as status_code, response_time_ms, body, header.<Name>, json.<path> or json_schema. Browser monitors accept status_code, body, response_time_ms and no_console_errors.
openumHow to compare, such as ASSERTION_OP_EQ. Not used for json_schema.
One of:
ASSERTION_OP_EQ,ASSERTION_OP_NEQ,ASSERTION_OP_GT,ASSERTION_OP_LT,ASSERTION_OP_CONTAINS,ASSERTION_OP_MATCHESvaluestringThe expected value. For json_schema, the JSON Schema the body must match.
payloadbytes (base64)The packet to send, base64 encoded. Empty sends an empty packet.
expectstringOptional text the reply must contain. Empty accepts any reply.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateUdpMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "game server",
"host": "play.acme.io",
"port": 27015,
"intervalSeconds": 300
}'CreatePingMonitor
MonitorConfigService
Create a monitor that pings a host.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreatePingMonitor
Request fields
namestringA name you choose.
hoststringA hostname or IP address.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreatePingMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "edge router",
"host": "203.0.113.10",
"intervalSeconds": 300
}'CreateDnsMonitor
MonitorConfigService
Create a monitor that checks a DNS record, or the mail records SPF, DMARC and DKIM.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateDnsMonitor
Request fields
namestringA name you choose.
domainstringThe domain name.
recordTypestringA, AAAA, CNAME, MX or TXT, or a mail check: SPF, DMARC, DKIM or BLACKLIST.
expectedValuesarray of stringThe values the record must hold.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
Fields of
AssertiontypestringWhat to check, such as status_code, response_time_ms, body, header.<Name>, json.<path> or json_schema. Browser monitors accept status_code, body, response_time_ms and no_console_errors.
openumHow to compare, such as ASSERTION_OP_EQ. Not used for json_schema.
One of:
ASSERTION_OP_EQ,ASSERTION_OP_NEQ,ASSERTION_OP_GT,ASSERTION_OP_LT,ASSERTION_OP_CONTAINS,ASSERTION_OP_MATCHESvaluestringThe expected value. For json_schema, the JSON Schema the body must match.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateDnsMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "acme.io A record",
"domain": "acme.io",
"recordType": "A",
"expectedValues": ["203.0.113.10"],
"intervalSeconds": 3600
}'CreateCertMonitor
MonitorConfigService
Create a monitor that warns before a TLS certificate expires.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateCertMonitor
Request fields
namestringA name you choose.
hoststringA hostname or IP address.
portuint32The port. Default 443.
warnDaysuint32Days before expiry at which the monitor turns degraded. 0 uses the default.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
expectedIssuersarray of stringOptional. The certificate authorities you expect, such as Let's Encrypt. A new certificate for the host from another one marks the check down.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateCertMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "acme.io certificate",
"host": "acme.io",
"port": 443,
"intervalSeconds": 86400,
"warnDays": 30
}'CreateDomainMonitor
MonitorConfigService
Create a monitor that warns before a domain registration expires.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateDomainMonitor
Request fields
namestringA name you choose.
domainstringThe registered domain, such as acme.io (not www.acme.io).
warnDaysuint32Days before expiry at which the monitor turns degraded. 0 uses the default.
intervalSecondsuint32How often to check, in seconds. Default 86400 (once a day).
alertChannelIdsarray of stringIDs of the alert channels to notify.
timeoutMsuint32How long to wait for an answer, in milliseconds.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateDomainMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "acme.io registration",
"domain": "acme.io",
"warnDays": 30
}'GetMonitor
MonitorConfigService
Get one monitor by its ID.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetMonitor
Request fields
idstringThe ID.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "<monitor-id>"
}'ListMonitors
MonitorConfigService
List your monitors, one page at a time.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListMonitors
Request fields
limituint32Page size, 1 to 200. Any other value uses 50.
cursorstringLeave empty for the first page. Then send the nextCursor from the last answer.
Response fields
monitorsarray of MonitorThe monitors.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
nextCursorstringSend this as cursor to get the next page. Empty on the last page.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListMonitors" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"limit": 50
}'UpdateMonitor
MonitorConfigService
Change a monitor. Only the fields you send change. Use it to pause, resume, mute and rename.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/UpdateMonitor
Request fields
idstringThe monitor ID.
namestringoptionalA name you choose.
intervalSecondsuint32optionalHow often to check, in seconds. Your plan sets the shortest interval allowed.
activatedbooloptionalFalse pauses the monitor; true resumes it.
mutedbooloptionalTrue mutes alerts; false unmutes.
alertChannelIdsarray of stringThe new list of alert channels. Used only with replaceAlertChannels.
replaceAlertChannelsboolSet true to replace the alert channels with alertChannelIds.
muteUntiltimestampOptional. Mute until this time; send with muted true.
clearMuteUntilboolSet true to remove the mute end time.
configMonitorConfigOptional. New type-specific settings. This replaces all of them, so send the full set.
Fields of
MonitorConfigtypeenumThe monitor type.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
urlstringURL and API monitors: the address.
methodstringThe HTTP method, such as GET or POST. Default GET.
headersmap<string, string>Request headers to send.
bodybytes (base64)The request body, base64 encoded.
hoststringTCP, UDP, ping and certificate monitors: the host.
portuint32The port number.
domainstringDNS and domain monitors: the domain.
recordTypestringDNS monitors: the record type.
expectedValuesarray of stringDNS monitors: the values the record must hold.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
timeoutMsuint32How long to wait for an answer, in milliseconds.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
heartbeatTokenstringHeartbeat monitors: the token at the end of the ping address.
gracePeriodsuint32Heartbeat monitors: how many intervals may pass with no ping before down. Default 1.
cronExpressionstringHeartbeat monitors: an optional cron schedule.
graceSecondsuint32Heartbeat monitors with a cron schedule: how late a ping may be, in seconds.
cronTimezonestringHeartbeat monitors: the cron time zone. Default UTC.
browserStartUrlstringBrowser monitors: the page to open.
browserScriptJsonstringBrowser monitors: the steps, as a JSON array.
apiStepsarray of ApiStepAPI monitors: the steps. Empty means one request.
certWarnDaysuint32Certificate monitors: days before expiry at which it turns degraded.
certExpectedIssuersarray of stringCertificate monitors: the certificate authorities you expect.
udpPayloadbytes (base64)UDP monitors: the packet to send, base64 encoded.
udpExpectstringUDP monitors: text the reply must contain.
domainWarnDaysuint32Domain monitors: days before expiry at which it turns degraded.
locationsarray of stringThe new list of regions. Used only with replaceLocations.
replaceLocationsboolSet true to replace the regions with locations.
failureThresholduint32optionalFailed checks in a row before an alert. 0 goes back to the default.
cooldownSecondsuint32optionalSeconds between alerts. 0 goes back to the default.
degradedAfterMsuint32optionalThe slow-response limit in milliseconds. 0 removes it.
latencyAnomalybooloptionalTurn slow-check alerts on or off.
renotifyIntervalSecondsuint32optionalReminder interval while an incident is open: 300 to 86400, or 0 for off.
minFailingLocationsuint32optionalHow many regions must fail before an alert.
Response fields
monitorMonitorThe monitor.
Fields of
MonitoridstringThe ID.
typeenumThe monitor type, such as CHECK_TYPE_URL.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGnamestringA name you choose.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
locationsarray of stringRegions to check from (see ListRegions). Empty uses the default region.
activatedboolFalse while the monitor is paused.
mutedboolTrue while alerts are muted. Checks still run.
alertChannelIdsarray of stringIDs of the alert channels to notify.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
muteUntiltimestampWhen the mute ends. Empty if muted until you unmute.
configMonitorConfigThe type-specific settings, such as URL, host or record type.
failureThresholduint32Failed checks in a row before an alert. 0 uses the default (see GetAlertPolicy).
cooldownSecondsuint32After an alert, how long before the next one, in seconds. 0 uses the default.
degradedAfterMsuint32A passing check slower than this is degraded. 0 means no limit.
latencyAnomalyboolAlert when a check is much slower than this monitor usually is.
renotifyIntervalSecondsuint32While an incident is open, alert again this often. 0 turns reminders off.
minFailingLocationsuint32How many regions must fail before an alert. 0 or 1 means any one region.
pausedByenumWho paused it: PAUSED_BY_TEAM, PAUSED_BY_PLAN or PAUSED_BY_STAFF. Empty while it runs.
One of:
PAUSED_BY_TEAM,PAUSED_BY_PLAN,PAUSED_BY_STAFF
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/UpdateMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "<monitor-id>",
"activated": false
}'DeleteMonitor
MonitorConfigService
Delete a monitor.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DeleteMonitor
Request fields
idstringThe ID.
Response fields
None. Send {}.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DeleteMonitor" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "<monitor-id>"
}'Lookups
ListRegions
MonitorConfigServiceno key needed
List the regions checks can run from, and the default one. No key needed.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListRegions
Request fields
None. Send {}.
Response fields
regionsarray of stringEvery region you can use in locations.
defaultRegionstringThe region used when you name none.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListRegions" \
-H "Content-Type: application/json" \
-d '{}'ListDnsRecordTypes
MonitorConfigServiceno key needed
List the record types a DNS monitor accepts. No key needed.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListDnsRecordTypes
Request fields
None. Send {}.
Response fields
recordTypesarray of stringEvery record type a DNS monitor accepts.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListDnsRecordTypes" \
-H "Content-Type: application/json" \
-d '{}'DiscoverMonitors
MonitorConfigServiceno key needed
Give a website address and get suggested monitors for it. No key needed.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DiscoverMonitors
Request fields
urlstringAny address on the site.
Response fields
normalizedUrlstringThe address that was checked.
siteTitlestringThe page title of the site.
proposedarray of ProposedMonitorSuggested URL monitors, each with a live test result.
Fields of
ProposedMonitornamestringA name you choose.
urlstringThe address to check, with https:// or http://.
methodstringThe HTTP method, such as GET or POST. Default GET.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
assertionsarray of AssertionRules the answer must pass, such as a status code. All must pass.
probeProbeResultThe result of a live test request.
sourcestringWhy it was suggested: homepage, health-path or sitemap.
proposedTcparray of ProposedTcpMonitorSuggested TCP monitors for common ports that answered.
Fields of
ProposedTcpMonitornamestringA name you choose.
hoststringA hostname or IP address.
portuint32The port number.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
connectTimeMsint32How long the connection took, in milliseconds.
sourcestringWhy it was suggested.
serviceHintstringWhat probably runs on the port, such as postgres.
proposedDnsarray of ProposedDnsMonitorSuggested DNS and mail record monitors.
Fields of
ProposedDnsMonitornamestringA name you choose.
domainstringThe domain name.
recordTypestringA, MX, SPF or DMARC.
expectedValuestringThe value to expect: the MX host, the SPF all term (-all) or the DMARC policy (p=reject).
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
lookupTimeMsint32How long the lookup took, in milliseconds.
sourcestringWhy it was suggested.
proposedCertarray of ProposedCertMonitorA suggested certificate monitor, if the site uses https.
Fields of
ProposedCertMonitornamestringA name you choose.
hoststringA hostname or IP address.
portuint32The port number.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
daysUntilExpiryint32Days until the certificate expires. Negative if it has expired.
issuerstringWho issued the certificate, such as Let's Encrypt.
sourcestringWhy it was suggested.
certWarningCertWarningSet when the site's certificate has already expired.
Fields of
CertWarninghoststringA hostname or IP address.
portuint32The port number.
issuerstringWho issued the certificate.
daysSinceExpiryuint32Whole days since expiry, always positive.
proposedDomainarray of ProposedDomainMonitorA suggested domain registration monitor.
Fields of
ProposedDomainMonitornamestringA name you choose.
domainstringThe domain name.
intervalSecondsuint32How often to check, in seconds. Your plan sets the shortest interval allowed.
sourcestringWhy it was suggested.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DiscoverMonitors" \
-H "Content-Type: application/json" \
-d '{
"url": "https://acme.io"
}'Alert channels
CreateEmailChannel
MonitorConfigService
Create an email alert channel. The address must confirm before alerts are sent.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateEmailChannel
Request fields
namestringA name you choose.
emailTostringThe email address to alert.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateEmailChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "on-call email",
"emailTo": "oncall@acme.io"
}'CreateSlackChannel
MonitorConfigService
Create a Slack alert channel from an incoming webhook URL.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateSlackChannel
Request fields
namestringA name you choose.
slackWebhookUrlstringThe Slack incoming webhook URL.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateSlackChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "#alerts",
"slackWebhookUrl": "https://hooks.slack.com/services/<path>"
}'CreateTeamsChannel
MonitorConfigService
Create a Microsoft Teams alert channel from a Workflows URL.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateTeamsChannel
Request fields
namestringA name you choose.
teamsWebhookUrlstringThe Teams Workflows trigger URL.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateTeamsChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Ops team",
"teamsWebhookUrl": "<workflows-url>"
}'CreateDiscordChannel
MonitorConfigService
Create a Discord alert channel from a channel webhook URL.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateDiscordChannel
Request fields
namestringA name you choose.
discordWebhookUrlstringThe Discord channel webhook URL.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateDiscordChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "#status",
"discordWebhookUrl": "https://discord.com/api/webhooks/<path>"
}'CreateTelegramChannel
MonitorConfigService
Create a Telegram alert channel from a bot token and a chat ID.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateTelegramChannel
Request fields
namestringA name you choose.
telegramBotTokenstringThe bot token from @BotFather.
telegramChatIdstringThe chat the bot posts to.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateTelegramChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "ops chat",
"telegramBotToken": "<bot-token>",
"telegramChatId": "<chat-id>"
}'CreatePagerDutyChannel
MonitorConfigService
Create a PagerDuty alert channel from an Events API v2 integration key.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreatePagerDutyChannel
Request fields
namestringA name you choose.
pagerdutyRoutingKeystringThe Events API v2 integration key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreatePagerDutyChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "PagerDuty",
"pagerdutyRoutingKey": "<integration-key>"
}'CreateWebhookChannel
MonitorConfigService
Create a webhook alert channel that posts JSON to your URL.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateWebhookChannel
Request fields
namestringA name you choose.
webhookUrlstringThe URL obsrvly posts alerts to.
webhookHeadersmap<string, string>Headers sent with each webhook post.
webhookSecretstringOptional. Used to sign each post so you can check it came from obsrvly.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateWebhookChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my webhook",
"webhookUrl": "https://acme.io/hooks/obsrvly",
"webhookSecret": "<secret>"
}'GetAlertChannel
MonitorConfigService
Get one alert channel by its ID. With an API key, webhook URLs and tokens come back empty.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetAlertChannel
Request fields
idstringThe ID.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetAlertChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "<channel-id>"
}'ListAlertChannels
MonitorConfigService
List your alert channels, one page at a time.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListAlertChannels
Request fields
limituint32Page size, 1 to 200. Any other value uses 50.
cursorstringLeave empty for the first page. Then send the nextCursor from the last answer.
Response fields
channelsarray of AlertChannelThe alert channels.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
nextCursorstringSend this as cursor to get the next page. Empty on the last page.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListAlertChannels" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"limit": 50
}'UpdateAlertChannel
MonitorConfigService
Change an alert channel. Only the fields you send change.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/UpdateAlertChannel
Request fields
idstringThe ID.
namestringoptionalA name you choose.
emailTostringoptionalThe email address to alert.
slackWebhookUrlstringoptionalThe Slack incoming webhook URL.
webhookUrlstringoptionalThe URL obsrvly posts alerts to.
webhookHeadersmap<string, string>Headers sent with each webhook post.
replaceWebhookHeadersboolSet true to replace the webhook headers with webhookHeaders.
webhookSecretstringoptionalOptional. Used to sign each post so you can check it came from obsrvly.
teamsWebhookUrlstringoptionalThe Teams Workflows trigger URL.
discordWebhookUrlstringoptionalThe Discord channel webhook URL.
telegramBotTokenstringoptionalThe bot token from @BotFather.
telegramChatIdstringoptionalThe chat the bot posts to.
pagerdutyRoutingKeystringoptionalThe Events API v2 integration key.
pagerdutyEubooloptionalTrue if your PagerDuty account is in the EU region.
Response fields
channelAlertChannelThe alert channel.
Fields of
AlertChannelidstringThe ID.
typeenumThe channel type, such as ALERT_CHANNEL_TYPE_EMAIL.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYnamestringA name you choose.
createdAttimestampWhen it was created.
updatedAttimestampWhen it last changed.
emailTostringThe email address to alert.
emailVerifiedboolWhether the address confirmed. Nothing is sent to an unconfirmed address.
slackWebhookUrlstringSlack: the webhook URL. Empty when read with an API key.
webhookUrlstringWebhook: the URL. Empty when read with an API key.
webhookHeadersmap<string, string>Webhook: the headers. Values are empty when read with an API key.
webhookSecretstringWebhook: the signing secret. Empty when read with an API key.
teamsWebhookUrlstringTeams: the URL. Empty when read with an API key.
discordWebhookUrlstringDiscord: the URL. Empty when read with an API key.
telegramBotTokenstringTelegram: the bot token. Empty when read with an API key.
telegramChatIdstringThe chat the bot posts to.
pagerdutyRoutingKeystringPagerDuty: the integration key. Empty when read with an API key.
pagerdutyEuboolTrue if your PagerDuty account is in the EU region.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/UpdateAlertChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "<channel-id>",
"name": "on-call email"
}'DeleteAlertChannel
MonitorConfigService
Delete an alert channel.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DeleteAlertChannel
Request fields
idstringThe ID.
Response fields
None. Send {}.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DeleteAlertChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "<channel-id>"
}'ResendEmailVerification
MonitorConfigService
Send a new confirmation email for an email channel that is not confirmed yet.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ResendEmailVerification
Request fields
channelIdstringThe email channel ID. At most one email per 10 minutes and five per day.
Response fields
None. Send {}.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ResendEmailVerification" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"channelId": "<channel-id>"
}'Secrets
CreateSecret
MonitorConfigService
Store a secret (a password or token) for browser and API monitors, and the sites it may be sent to.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateSecret
Request fields
namestringThe secret name, used as ${NAME} in browser scripts and API requests. A capital letter, then up to 63 capital letters, digits or underscores.
valuestringThe secret value.
allowedHostsarray of stringRequired. 1 to 20 sites the secret may be typed into: hostnames or *.domain.
Response fields
secretSecretThe new secret, without its value.
Fields of
SecretidstringThe ID.
namestringThe secret name. Unique in your team.
createdAttimestampWhen it was created.
createdBystringWho created it.
allowedHostsarray of stringThe sites the secret may be typed into.
valuestringThe value you sent. It is returned this once and never again.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateSecret" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "LOGIN_PASSWORD",
"value": "<value>",
"allowedHosts": ["acme.io"]
}'ListSecrets
MonitorConfigService
List your secrets. Values are never returned.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListSecrets
Request fields
None. Send {}.
Response fields
secretsarray of SecretThe secrets, without values.
Fields of
SecretidstringThe ID.
namestringThe secret name. Unique in your team.
createdAttimestampWhen it was created.
createdBystringWho created it.
allowedHostsarray of stringThe sites the secret may be typed into.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListSecrets" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{}'DeleteSecret
MonitorConfigService
Delete a secret.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DeleteSecret
Request fields
idstringThe ID.
Response fields
None. Send {}.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DeleteSecret" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "<secret-id>"
}'Maintenance
CreateMaintenanceWindow
MonitorConfigService
Plan a maintenance window. Monitors in it do not alert.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateMaintenanceWindow
Request fields
namestringA name you choose.
startsAttimestampWhen it starts.
endsAttimestampWhen it ends.
monitorIdsarray of stringThe monitors it covers. Empty means every monitor.
Response fields
windowMaintenanceWindowThe new maintenance window.
Fields of
MaintenanceWindowidstringThe ID.
namestringA name you choose.
startsAttimestampWhen it starts.
endsAttimestampWhen it ends.
monitorIdsarray of stringThe monitors it covers. Empty means every monitor.
allTeamsboolTrue for obsrvly's own maintenance. You cannot delete it.
createdBystringWho created it.
createdAttimestampWhen it was created.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/CreateMaintenanceWindow" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "database upgrade",
"startsAt": "2026-11-01T02:00:00Z",
"endsAt": "2026-11-01T03:00:00Z",
"monitorIds": ["<monitor-id>"]
}'ListMaintenanceWindows
MonitorConfigService
List your maintenance windows that have not ended, soonest first.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListMaintenanceWindows
Request fields
None. Send {}.
Response fields
windowsarray of MaintenanceWindowThe maintenance windows, soonest first.
Fields of
MaintenanceWindowidstringThe ID.
namestringA name you choose.
startsAttimestampWhen it starts.
endsAttimestampWhen it ends.
monitorIdsarray of stringThe monitors it covers. Empty means every monitor.
allTeamsboolTrue for obsrvly's own maintenance. You cannot delete it.
createdBystringWho created it.
createdAttimestampWhen it was created.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/ListMaintenanceWindows" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{}'DeleteMaintenanceWindow
MonitorConfigService
Delete a maintenance window.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DeleteMaintenanceWindow
Request fields
idstringThe ID.
Response fields
None. Send {}.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/DeleteMaintenanceWindow" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"id": "<window-id>"
}'Status page
GetStatusPage
MonitorConfigService
Get your status page settings.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetStatusPage
Request fields
None. Send {}.
Response fields
pageStatusPageYour status page settings. Empty before the first save.
Fields of
StatusPageenabledboolTrue when the page is public.
slugstringThe page address, /status/<slug>. 3 to 40 lowercase letters, digits and hyphens.
titlestringThe page title.
descriptionstringOptional. Up to 280 characters.
monitorsarray of StatusPageMonitorThe monitors shown, in page order. At most 50.
updatedAttimestampWhen it last changed.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetStatusPage" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{}'SaveStatusPage
MonitorConfigService
Save your status page settings. This replaces all of them.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/SaveStatusPage
Request fields
pageStatusPageThe full settings. updatedAt is ignored.
Fields of
StatusPageenabledboolTrue when the page is public.
slugstringThe page address, /status/<slug>. 3 to 40 lowercase letters, digits and hyphens.
titlestringThe page title.
descriptionstringOptional. Up to 280 characters.
monitorsarray of StatusPageMonitorThe monitors shown, in page order. At most 50.
updatedAttimestampWhen it last changed.
Response fields
pageStatusPageThe saved settings.
Fields of
StatusPageenabledboolTrue when the page is public.
slugstringThe page address, /status/<slug>. 3 to 40 lowercase letters, digits and hyphens.
titlestringThe page title.
descriptionstringOptional. Up to 280 characters.
monitorsarray of StatusPageMonitorThe monitors shown, in page order. At most 50.
updatedAttimestampWhen it last changed.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/SaveStatusPage" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"page": {"enabled": true, "slug": "acme", "title": "Acme status", "monitors": [{"monitorId": "<monitor-id>", "publicName": "Website"}]}
}'GetPublicStatusPage
MonitorConfigServiceno key needed
Get what visitors see on a public status page. No key needed.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetPublicStatusPage
Request fields
slugstringThe status page address part, as in /status/<slug>.
Response fields
titlestringThe page title.
descriptionstringThe page description.
monitorsarray of PublicStatusMonitorThe monitors shown, in page order.
Fields of
PublicStatusMonitorkeystringA public key for the monitor, used instead of its ID.
namestringA name you choose.
pausedboolTrue when the monitor is paused.
maintenancearray of PublicMaintenancePlanned maintenance that has not ended, soonest first.
Fields of
PublicMaintenancetitlestringThe maintenance title.
startsAttimestampWhen it starts.
endsAttimestampWhen it ends.
monitorKeysarray of stringThe monitors it covers. Empty means all on the page.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetPublicStatusPage" \
-H "Content-Type: application/json" \
-d '{
"slug": "acme"
}'Plan limits
GetPlanLimitUsage
MonitorConfigService
Get each plan limit and how much of it your team uses.
POSThttps://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetPlanLimitUsage
Request fields
None. Send {}.
Response fields
limitsarray of PlanLimitUsageEvery limit in force for your team. A limit your plan does not set is left out.
Fields of
PlanLimitUsagekindenumWhich limit.
One of:
PLAN_LIMIT_MONITORS,PLAN_LIMIT_BROWSER_MONITORS,PLAN_LIMIT_ALERT_CHANNELS,PLAN_LIMIT_SECRETS,PLAN_LIMIT_API_KEYS,PLAN_LIMIT_MAINTENANCE_WINDOWS,PLAN_LIMIT_BROWSER_RUNSuseduint32How much your team uses now.
limituint32The limit for your team.
levelenumNEARING from 80% of the limit, REACHED at 100%. Empty below 80%.
One of:
PLAN_LIMIT_LEVEL_NEARING,PLAN_LIMIT_LEVEL_REACHEDoverageCentsPer1kuint32Run allowances only: US cents per 1,000 runs past the limit.
curl -s "https://www.obsrvly.com/api/gw/monitor/obsrvly.v1.MonitorConfigService/GetPlanLimitUsage" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{}'Results
ListExecutions
ResultService
List the recent check results of one monitor, newest first.
POSThttps://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/ListExecutions
Request fields
monitorIdstringThe monitor ID.
limituint32Page size, 1 to 1000. Any other value uses 50.
cursorstringLeave empty for the first page. Then send the nextCursor from the last answer.
statusFilterenumOptional. Return only checks with this status, such as CHECK_STATUS_DOWN.
One of:
CHECK_STATUS_UP,CHECK_STATUS_DOWN,CHECK_STATUS_DEGRADED
Response fields
executionsarray of ExecutionThe check results, newest first.
Fields of
ExecutionmonitorIdstringThe monitor ID.
executionIdstringThe ID of one check result.
typeenumThe monitor type.
One of:
CHECK_TYPE_URL,CHECK_TYPE_TCP,CHECK_TYPE_DNS,CHECK_TYPE_API,CHECK_TYPE_BROWSER,CHECK_TYPE_HEARTBEAT,CHECK_TYPE_CERT,CHECK_TYPE_UDP,CHECK_TYPE_DOMAIN,CHECK_TYPE_PINGstatusenumUP, DOWN or DEGRADED.
One of:
CHECK_STATUS_UP,CHECK_STATUS_DOWN,CHECK_STATUS_DEGRADEDresponseTimeMsint32How long the check took, in milliseconds.
statusCodeint32optionalThe HTTP status code, when there is one.
errorMessagestringoptionalWhy the check failed.
locationstringThe region the check ran from.
executedAttimestampWhen the check ran.
metadataJsonstringExtra details as JSON, such as the steps of a browser check.
scheduledAttimestampThe scheduled run this check belongs to. The same for every region of one run.
nextCursorstringSend this as cursor to get the next page. Empty on the last page.
curl -s "https://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/ListExecutions" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorId": "<monitor-id>",
"limit": 20,
"statusFilter": "CHECK_STATUS_DOWN"
}'GetMonitorSummary
ResultService
Get uptime and response times of one monitor over a time window.
POSThttps://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/GetMonitorSummary
Request fields
monitorIdstringThe monitor ID.
windowenumThe time window: SUMMARY_WINDOW_1H, _24H, _7D or _30D.
One of:
SUMMARY_WINDOW_24H,SUMMARY_WINDOW_7D,SUMMARY_WINDOW_30D,SUMMARY_WINDOW_1H
Response fields
summaryMonitorSummaryThe summary.
Fields of
MonitorSummarymonitorIdstringThe monitor ID.
totalChecksuint32Checks in the window.
successfulChecksuint32Checks that passed.
uptimePctnumberUptime from 0 to 100, or -1 when nothing was measured.
p50Msint32Median response time.
p95Msint3295th percentile response time.
p99Msint3299th percentile response time.
lastCheckAttimestampWhen the last check ran.
lastStatusenumThe status of the last check.
One of:
CHECK_STATUS_UP,CHECK_STATUS_DOWN,CHECK_STATUS_DEGRADEDlastResponseTimeMsint32The response time of the last check.
lastStatusCodeint32The status code of the last check. 0 if none.
evaluatedChecksuint32Checks that reached a result about your site. Uptime is counted over these.
overdueboolTrue when an active monitor has gone too long without a result.
curl -s "https://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/GetMonitorSummary" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorId": "<monitor-id>",
"window": "SUMMARY_WINDOW_24H"
}'ListMonitorSummaries
ResultService
Get uptime and response times of many monitors in one call.
POSThttps://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/ListMonitorSummaries
Request fields
monitorIdsarray of stringThe monitors. An empty list returns nothing.
windowenumThe time window: SUMMARY_WINDOW_1H, _24H, _7D or _30D.
One of:
SUMMARY_WINDOW_24H,SUMMARY_WINDOW_7D,SUMMARY_WINDOW_30D,SUMMARY_WINDOW_1H
Response fields
summariesarray of MonitorSummaryOne summary per monitor.
Fields of
MonitorSummarymonitorIdstringThe monitor ID.
totalChecksuint32Checks in the window.
successfulChecksuint32Checks that passed.
uptimePctnumberUptime from 0 to 100, or -1 when nothing was measured.
p50Msint32Median response time.
p95Msint3295th percentile response time.
p99Msint3299th percentile response time.
lastCheckAttimestampWhen the last check ran.
lastStatusenumThe status of the last check.
One of:
CHECK_STATUS_UP,CHECK_STATUS_DOWN,CHECK_STATUS_DEGRADEDlastResponseTimeMsint32The response time of the last check.
lastStatusCodeint32The status code of the last check. 0 if none.
evaluatedChecksuint32Checks that reached a result about your site. Uptime is counted over these.
overdueboolTrue when an active monitor has gone too long without a result.
curl -s "https://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/ListMonitorSummaries" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorIds": ["<monitor-id>", "<monitor-id-2>"],
"window": "SUMMARY_WINDOW_7D"
}'GetMonitorSeries
ResultService
Get response times and failures of one monitor in time buckets, for a chart.
POSThttps://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/GetMonitorSeries
Request fields
monitorIdstringThe monitor ID.
windowenumThe time window: SUMMARY_WINDOW_1H, _24H, _7D or _30D.
One of:
SUMMARY_WINDOW_24H,SUMMARY_WINDOW_7D,SUMMARY_WINDOW_30D,SUMMARY_WINDOW_1HbucketSecondsuint32Bucket size in seconds, for example 300 for 5 minutes.
Response fields
pointsarray of TimeSeriesPointOne point per time bucket, oldest first.
Fields of
TimeSeriesPointttimestampThe start of the bucket.
avgMsint32Average response time in the bucket.
downCountint32Failed checks in the bucket.
totalint32All checks in the bucket.
curl -s "https://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/GetMonitorSeries" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorId": "<monitor-id>",
"window": "SUMMARY_WINDOW_24H",
"bucketSeconds": 300
}'GetGlobalSeries
ResultService
Get response times and failures across many monitors in time buckets.
POSThttps://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/GetGlobalSeries
Request fields
monitorIdsarray of stringThe monitors to combine. An empty list returns nothing.
windowenumThe time window: SUMMARY_WINDOW_1H, _24H, _7D or _30D.
One of:
SUMMARY_WINDOW_24H,SUMMARY_WINDOW_7D,SUMMARY_WINDOW_30D,SUMMARY_WINDOW_1HbucketSecondsuint32Bucket size in seconds, for example 300 for 5 minutes.
Response fields
pointsarray of TimeSeriesPointOne point per time bucket, oldest first.
Fields of
TimeSeriesPointttimestampThe start of the bucket.
avgMsint32Average response time in the bucket.
downCountint32Failed checks in the bucket.
totalint32All checks in the bucket.
curl -s "https://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/GetGlobalSeries" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorIds": ["<monitor-id>", "<monitor-id-2>"],
"window": "SUMMARY_WINDOW_24H",
"bucketSeconds": 300
}'GetPublicStatus
ResultServiceno key needed
Get the current status and 90 days of uptime for a public status page. No key needed.
POSThttps://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/GetPublicStatus
Request fields
slugstringThe status page address part, as in /status/<slug>.
Response fields
monitorsarray of PublicMonitorStatusOne entry per monitor on the page.
Fields of
PublicMonitorStatuskeystringThe monitor key from GetPublicStatusPage.
statusenumThe current status.
One of:
CHECK_STATUS_UP,CHECK_STATUS_DOWN,CHECK_STATUS_DEGRADEDuptimePctnumberUptime over 90 days, from 0 to 100, or -1 when nothing was measured.
daysarray of PublicUptimeDay90 days of daily uptime, oldest first.
noRecentDataboolTrue when the monitor should have been checked by now and was not.
curl -s "https://www.obsrvly.com/api/gw/result/obsrvly.v1.ResultService/GetPublicStatus" \
-H "Content-Type: application/json" \
-d '{
"slug": "acme"
}'Incidents
ListIncidents
AlertService
List incidents, open or resolved, one page at a time.
POSThttps://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/ListIncidents
Request fields
limituint32Page size, 1 to 200. Any other value uses 50.
cursorstringLeave empty for the first page. Then send the nextCursor from the last answer.
statusstringOptional. "firing" for open incidents, "resolved" for closed ones. Empty for all.
Response fields
incidentsarray of IncidentRecordThe incidents.
Fields of
IncidentRecordalertIdstringThe incident ID.
monitorIdstringThe monitor ID.
monitorNamestringThe monitor name.
monitorUrlstringWhat the monitor checks: URL, host:port or domain.
firedAttimestampWhen the incident opened.
resolvedAttimestampWhen it resolved. Empty while open.
durationSecondsuint64 (string)How long it lasted, in seconds. While open, how long it has lasted so far.
consecutiveFailuresuint32Failed checks in a row.
lastErrorstringThe last error.
statusstring"firing" or "resolved".
acknowledgedAttimestampWhen someone acknowledged it.
acknowledgedBystringWho acknowledged it.
nextCursorstringSend this as cursor to get the next page. Empty on the last page.
curl -s "https://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/ListIncidents" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "firing",
"limit": 50
}'AcknowledgeIncident
AlertService
Mark an open incident as picked up. Reminders for it stop.
POSThttps://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/AcknowledgeIncident
Request fields
alertIdstringThe incident ID.
Response fields
incidentIncidentRecordThe incident, now acknowledged.
Fields of
IncidentRecordalertIdstringThe incident ID.
monitorIdstringThe monitor ID.
monitorNamestringThe monitor name.
monitorUrlstringWhat the monitor checks: URL, host:port or domain.
firedAttimestampWhen the incident opened.
resolvedAttimestampWhen it resolved. Empty while open.
durationSecondsuint64 (string)How long it lasted, in seconds. While open, how long it has lasted so far.
consecutiveFailuresuint32Failed checks in a row.
lastErrorstringThe last error.
statusstring"firing" or "resolved".
acknowledgedAttimestampWhen someone acknowledged it.
acknowledgedBystringWho acknowledged it.
curl -s "https://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/AcknowledgeIncident" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"alertId": "<incident-id>"
}'ListEvaluations
AlertService
See why recent failed checks of a monitor did or did not alert anyone.
POSThttps://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/ListEvaluations
Request fields
monitorIdstringThe monitor ID.
limituint32How many to return, 1 to 1000. Any other value uses 200.
windowSecondsuint32How far back to look, in seconds. Default 24 hours.
Response fields
evaluationsarray of EvaluationRecordOne entry per failed check, newest first. Passing checks are left out.
Fields of
EvaluationRecordexecutionIdstringThe check result this is about (see ListExecutions).
evaluatedAttimestampWhen the decision was made.
outcomestringWhat happened, such as below_threshold, cooldown, fired, fired_muted, fired_maintenance or reminder_sent.
consecutiveFailuresuint32Failed checks in a row at that time.
thresholdApplieduint32The failure threshold in force at that time.
cooldownSecondsApplieduint32The cooldown in force at that time.
mutedbooloptionalWhether the monitor was muted.
muteUntiltimestampWhen the mute was set to end.
alertIdstringThe incident this check opened or reminded about, if any.
curl -s "https://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/ListEvaluations" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorId": "<monitor-id>"
}'GetAlertPolicy
AlertService
Get how many failures it takes to alert, and how long until the next alert.
POSThttps://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/GetAlertPolicy
Request fields
monitorIdstringOptional. Get the values for this monitor.
Response fields
failureThresholduint32Failed checks in a row before an alert.
cooldownSecondsuint32Seconds after an alert before the same monitor can alert again.
configurableboolTrue when a monitor can set its own threshold and cooldown.
certWarnDaysarray of uint32Days before expiry at which certificate warnings are sent, highest first.
platformFailureThresholduint32obsrvly's default threshold.
platformCooldownSecondsuint32obsrvly's default cooldown.
teamFailureThresholduint32Your team's default threshold, if set.
teamCooldownSecondsuint32Your team's default cooldown, if set.
canEditTeamPolicyboolAlways false with an API key. Team defaults are changed in the dashboard.
curl -s "https://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/GetAlertPolicy" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorId": "<monitor-id>"
}'ListPublicIncidents
AlertServiceno key needed
List the incidents shown on a public status page. No key needed.
POSThttps://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/ListPublicIncidents
Request fields
slugstringThe status page address part, as in /status/<slug>.
Response fields
incidentsarray of PublicIncidentOpen incidents, and ones resolved in the last 14 days. Newest first.
Fields of
PublicIncidentmonitorKeystringThe monitor key from GetPublicStatusPage.
startedAttimestampWhen it started.
resolvedAttimestampWhen it resolved. Empty while open.
acknowledgedboolTrue when someone is on it.
curl -s "https://www.obsrvly.com/api/gw/alert/obsrvly.v1.AlertService/ListPublicIncidents" \
-H "Content-Type: application/json" \
-d '{
"slug": "acme"
}'Notifications
ListNotifications
NotificationService
List the alerts obsrvly sent, and whether each one was delivered.
POSThttps://www.obsrvly.com/api/gw/notification/obsrvly.v1.NotificationService/ListNotifications
Request fields
limituint32Page size, 1 to 200. Any other value uses 50.
cursorstringLeave empty for the first page. Then send the nextCursor from the last answer.
monitorIdstringOptional. Only alerts for this monitor.
Response fields
recordsarray of NotificationRecordThe alerts sent, newest first.
Fields of
NotificationRecordidstringThe ID.
monitorIdstringThe monitor ID.
alertIdstringThe incident ID.
channelIdstringThe alert channel ID.
channelTypeenumThe channel type.
One of:
ALERT_CHANNEL_TYPE_EMAIL,ALERT_CHANNEL_TYPE_SLACK,ALERT_CHANNEL_TYPE_WEBHOOK,ALERT_CHANNEL_TYPE_TEAMS,ALERT_CHANNEL_TYPE_DISCORD,ALERT_CHANNEL_TYPE_TELEGRAM,ALERT_CHANNEL_TYPE_PAGERDUTYchannelNamestringThe channel name.
eventstring"fire", "resolved", "reminder" or "acknowledged".
statusstring"sent", "failed" or "skipped".
errorMessagestringThe error, when it failed.
sentAttimestampWhen it was sent.
subjectstringThe subject or title that was sent.
bodystringThe message that was sent.
nextCursorstringSend this as cursor to get the next page. Empty on the last page.
curl -s "https://www.obsrvly.com/api/gw/notification/obsrvly.v1.NotificationService/ListNotifications" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"limit": 50
}'TestChannel
NotificationService
Send a test alert to one channel and see what happened.
POSThttps://www.obsrvly.com/api/gw/notification/obsrvly.v1.NotificationService/TestChannel
Request fields
channelIdstringThe alert channel ID.
Response fields
statusstring"sent" or "failed".
errorMessagestringWhen it failed: the error from the provider, such as Slack.
subjectstringThe subject or title that was sent.
bodystringThe message that was sent.
notificationIdstringThe entry this test added to the notification log.
curl -s "https://www.obsrvly.com/api/gw/notification/obsrvly.v1.NotificationService/TestChannel" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"channelId": "<channel-id>"
}'Runs
TriggerNow
SchedulerService
Run a monitor check now, outside its schedule. Once per monitor every 30 seconds.
POSThttps://www.obsrvly.com/api/gw/scheduler/obsrvly.v1.SchedulerService/TriggerNow
Request fields
monitorIdstringThe monitor ID.
locationstringOptional. The region to run from. Default: the monitor's first region.
Response fields
executionIdstringAn ID for the request, not for the result. Read the result with ListExecutions.
locationstringThe region the check runs from.
curl -s "https://www.obsrvly.com/api/gw/scheduler/obsrvly.v1.SchedulerService/TriggerNow" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorId": "<monitor-id>"
}'GetSchedule
SchedulerService
Get when a monitor last ran and when it runs next.
POSThttps://www.obsrvly.com/api/gw/scheduler/obsrvly.v1.SchedulerService/GetSchedule
Request fields
monitorIdstringThe monitor ID.
Response fields
monitorIdstringThe monitor ID.
intervalSecondsuint32How often the monitor runs, in seconds.
activatedboolFalse while paused.
nextRunAtstringWhen it runs next (RFC 3339).
lastRunAtstringWhen it last ran (RFC 3339). Empty if never.
curl -s "https://www.obsrvly.com/api/gw/scheduler/obsrvly.v1.SchedulerService/GetSchedule" \
-H "Authorization: Bearer $OBSRVLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"monitorId": "<monitor-id>"
}'Dashboard only
These calls exist but refuse an API key. Use the dashboard for them (see 13.2):
CreateApiKeyListApiKeysDeleteApiKeyListAuditEventsUpdateSecretHostsSetTeamAlertPolicy