API reference
Heartbeats
Heartbeats endpoints of the StatusTick REST API: change a heartbeat's grace period or schedule, check a cron expression and list the next runs.
/v1/monitors/{monitorId}/heartbeatNeeds a READ_WRITE key. Only for HEARTBEAT monitors.
Authorization
apiKey Your organization's API key.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/v1/monitors/mnt_4KrVK3M1DqhDTFouCffKie/heartbeat" \ -H "Content-Type: application/json" \ -d '{ "graceSeconds": 600, "cron": "0 3 * * *", "timeZone": "Europe/Berlin" }'{ "id": "string", "name": "string", "slug": "string", "url": "string", "type": "HTTP", "intervalSeconds": 0, "settings": { "notificationDelayMinutes": 0, "timeoutSeconds": 0, "sslCheckEnabled": true, "redirectCheckEnabled": true, "httpMethod": "GET", "requestHeaders": { "property1": "string", "property2": "string" }, "requestBody": "string", "requestBodyType": "RAW", "expectedStatusCodes": [ 0 ], "expectedResponseHeaders": { "property1": "string", "property2": "string" }, "responseTextCheck": "string", "responseTextMode": "CONTAINS", "responseTextCaseSensitive": true, "jsonAssertions": [ { "path": "string", "equals": "string", "exists": true } ], "zones": [ "GLOBAL" ], "locationIds": [ "string" ], "requiredFailingZones": 0, "blockedOpensIncident": true, "degradedResponseTimeMs": 0, "ipVersion": "AUTO", "sslExpiryAlertDays": [ 0 ], "sslOnTCP": true, "domainExpiryCheckEnabled": true, "domainExpiryAlertDays": [ 0 ], "assetCheckEnabled": true, "assetIgnoreHosts": [ "string" ], "dnsRecordType": "string" }, "locationIds": [ "string" ], "nextCheckAt": "2019-08-24T14:15:22Z", "lastCheckAt": "2019-08-24T14:15:22Z", "lastCheckStatus": "UP", "lastResponseTimeMs": 0, "certificate": { "validFrom": "string", "validTo": "string", "issuer": "string", "subject": "string", "valid": true, "error": "string", "checkedAt": "string" }, "heartbeat": { "pingPath": "string", "pingURL": "string", "graceSeconds": 0, "lastPingAt": "string", "lastDurationMs": 0, "cron": "string", "timeZone": "string", "rotatingUntil": "string", "urlLastUsedAt": "string", "previousURLLastUsedAt": "string" }, "domain": { "name": "string", "expiresAt": "string", "registrar": "string", "checkedAt": "string" }, "pageAssets": {}, "browser": { "script": "string", "language": "TYPESCRIPT", "variables": { "property1": "string", "property2": "string" }, "allowedHosts": [ "string" ], "slowStepThresholdsMs": { "property1": 1, "property2": 1 } }, "database": { "database": "string", "user": "string", "password": "string", "userEnv": "string", "passwordEnv": "string", "tls": false, "tlsVerify": true, "query": "string", "expectedValue": "string" }, "mcp": { "authHeaderName": "string", "authHeaderValue": "string", "toolCount": 0, "toolsHash": "string", "schemaChangedAt": "2019-08-24T14:15:22Z", "serverName": "string", "serverVersion": "string", "protocolVersion": "string" }, "protocol": { "grpcService": "string", "tlsMode": "NONE", "tlsVerify": true, "requireStartTLS": false }, "vendorIds": [ "string" ], "inMaintenance": true, "locationOffline": true, "tags": [ "string" ], "group": "string", "managedBy": "KUBERNETES", "managedKey": "string", "status": "ACTIVE", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}/v1/monitors/{monitorId}/heartbeat/scheduleAuthorization
apiKey Your organization's API key.
In: header
Path Parameters
Query Parameters
Default is the monitor's own schedule.
3Response Body
application/json
curl -X GET "https://example.com/v1/monitors/mnt_4KrVK3M1DqhDTFouCffKie/heartbeat/schedule?cron=0+3+*+*+*&timeZone=Europe%2FBerlin"{ "cron": "0 3 * * *", "timeZone": "Europe/Berlin", "valid": true, "error": null, "nextRuns": [ "2026-09-29T01:00:00Z", "2026-09-30T01:00:00Z", "2026-10-01T01:00:00Z" ]}/v1/monitors/{monitorId}/heartbeat/tokenNeeds a READ_WRITE key. The old ping URL keeps working for 60 minutes (heartbeat.rotatingUntil), so you can update the job first; a ping on either URL counts. Making another one during that time stops the older URL at once.
Authorization
apiKey Your organization's API key.
In: header
Path Parameters
Response Body
application/json
curl -X POST "https://example.com/v1/monitors/mnt_4KrVK3M1DqhDTFouCffKie/heartbeat/token"{ "id": "string", "name": "string", "slug": "string", "url": "string", "type": "HTTP", "intervalSeconds": 0, "settings": { "notificationDelayMinutes": 0, "timeoutSeconds": 0, "sslCheckEnabled": true, "redirectCheckEnabled": true, "httpMethod": "GET", "requestHeaders": { "property1": "string", "property2": "string" }, "requestBody": "string", "requestBodyType": "RAW", "expectedStatusCodes": [ 0 ], "expectedResponseHeaders": { "property1": "string", "property2": "string" }, "responseTextCheck": "string", "responseTextMode": "CONTAINS", "responseTextCaseSensitive": true, "jsonAssertions": [ { "path": "string", "equals": "string", "exists": true } ], "zones": [ "GLOBAL" ], "locationIds": [ "string" ], "requiredFailingZones": 0, "blockedOpensIncident": true, "degradedResponseTimeMs": 0, "ipVersion": "AUTO", "sslExpiryAlertDays": [ 0 ], "sslOnTCP": true, "domainExpiryCheckEnabled": true, "domainExpiryAlertDays": [ 0 ], "assetCheckEnabled": true, "assetIgnoreHosts": [ "string" ], "dnsRecordType": "string" }, "locationIds": [ "string" ], "nextCheckAt": "2019-08-24T14:15:22Z", "lastCheckAt": "2019-08-24T14:15:22Z", "lastCheckStatus": "UP", "lastResponseTimeMs": 0, "certificate": { "validFrom": "string", "validTo": "string", "issuer": "string", "subject": "string", "valid": true, "error": "string", "checkedAt": "string" }, "heartbeat": { "pingPath": "string", "pingURL": "string", "graceSeconds": 0, "lastPingAt": "string", "lastDurationMs": 0, "cron": "string", "timeZone": "string", "rotatingUntil": "string", "urlLastUsedAt": "string", "previousURLLastUsedAt": "string" }, "domain": { "name": "string", "expiresAt": "string", "registrar": "string", "checkedAt": "string" }, "pageAssets": {}, "browser": { "script": "string", "language": "TYPESCRIPT", "variables": { "property1": "string", "property2": "string" }, "allowedHosts": [ "string" ], "slowStepThresholdsMs": { "property1": 1, "property2": 1 } }, "database": { "database": "string", "user": "string", "password": "string", "userEnv": "string", "passwordEnv": "string", "tls": false, "tlsVerify": true, "query": "string", "expectedValue": "string" }, "mcp": { "authHeaderName": "string", "authHeaderValue": "string", "toolCount": 0, "toolsHash": "string", "schemaChangedAt": "2019-08-24T14:15:22Z", "serverName": "string", "serverVersion": "string", "protocolVersion": "string" }, "protocol": { "grpcService": "string", "tlsMode": "NONE", "tlsVerify": true, "requireStartTLS": false }, "vendorIds": [ "string" ], "inMaintenance": true, "locationOffline": true, "tags": [ "string" ], "group": "string", "managedBy": "KUBERNETES", "managedKey": "string", "status": "ACTIVE", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}/v1/monitors/{monitorId}/heartbeat/token/end-overlapNeeds a READ_WRITE key. After a new ping URL was made, the old one stops working at once instead of after 60 minutes.
Authorization
apiKey Your organization's API key.
In: header
Path Parameters
Response Body
application/json
curl -X POST "https://example.com/v1/monitors/mnt_4KrVK3M1DqhDTFouCffKie/heartbeat/token/end-overlap"{ "id": "string", "name": "string", "slug": "string", "url": "string", "type": "HTTP", "intervalSeconds": 0, "settings": { "notificationDelayMinutes": 0, "timeoutSeconds": 0, "sslCheckEnabled": true, "redirectCheckEnabled": true, "httpMethod": "GET", "requestHeaders": { "property1": "string", "property2": "string" }, "requestBody": "string", "requestBodyType": "RAW", "expectedStatusCodes": [ 0 ], "expectedResponseHeaders": { "property1": "string", "property2": "string" }, "responseTextCheck": "string", "responseTextMode": "CONTAINS", "responseTextCaseSensitive": true, "jsonAssertions": [ { "path": "string", "equals": "string", "exists": true } ], "zones": [ "GLOBAL" ], "locationIds": [ "string" ], "requiredFailingZones": 0, "blockedOpensIncident": true, "degradedResponseTimeMs": 0, "ipVersion": "AUTO", "sslExpiryAlertDays": [ 0 ], "sslOnTCP": true, "domainExpiryCheckEnabled": true, "domainExpiryAlertDays": [ 0 ], "assetCheckEnabled": true, "assetIgnoreHosts": [ "string" ], "dnsRecordType": "string" }, "locationIds": [ "string" ], "nextCheckAt": "2019-08-24T14:15:22Z", "lastCheckAt": "2019-08-24T14:15:22Z", "lastCheckStatus": "UP", "lastResponseTimeMs": 0, "certificate": { "validFrom": "string", "validTo": "string", "issuer": "string", "subject": "string", "valid": true, "error": "string", "checkedAt": "string" }, "heartbeat": { "pingPath": "string", "pingURL": "string", "graceSeconds": 0, "lastPingAt": "string", "lastDurationMs": 0, "cron": "string", "timeZone": "string", "rotatingUntil": "string", "urlLastUsedAt": "string", "previousURLLastUsedAt": "string" }, "domain": { "name": "string", "expiresAt": "string", "registrar": "string", "checkedAt": "string" }, "pageAssets": {}, "browser": { "script": "string", "language": "TYPESCRIPT", "variables": { "property1": "string", "property2": "string" }, "allowedHosts": [ "string" ], "slowStepThresholdsMs": { "property1": 1, "property2": 1 } }, "database": { "database": "string", "user": "string", "password": "string", "userEnv": "string", "passwordEnv": "string", "tls": false, "tlsVerify": true, "query": "string", "expectedValue": "string" }, "mcp": { "authHeaderName": "string", "authHeaderValue": "string", "toolCount": 0, "toolsHash": "string", "schemaChangedAt": "2019-08-24T14:15:22Z", "serverName": "string", "serverVersion": "string", "protocolVersion": "string" }, "protocol": { "grpcService": "string", "tlsMode": "NONE", "tlsVerify": true, "requireStartTLS": false }, "vendorIds": [ "string" ], "inMaintenance": true, "locationOffline": true, "tags": [ "string" ], "group": "string", "managedBy": "KUBERNETES", "managedKey": "string", "status": "ACTIVE", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}