API reference
Create a key under Account, API keys. Send it as a Bearer token. Every key works on one project, read only or read and write. Responses put results under data; errors have a stable code and a readable message. Limit: 120 requests a minute per key.
curl https://statusbeat.app/api/v1/monitors \
-H "Authorization: Bearer $STATUSBEAT_API_KEY"Machine-readable: OpenAPI 3.1 spec.
GET/api/v1/status/{slug}
Public status of a status page. No key.
No key needed. Safe to call from browsers on any site. Cached for 30 seconds.
GET/api/v1/projects
List the key's project. Read key.
GET/api/v1/projects/{id}
Get a project. Read key.
GET/api/v1/monitors
List monitors. Read key.
POST/api/v1/monitors
Create a monitor. Read and write key.
For bot monitors, the response includes heartbeatToken. It is shown once.
Request body schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "http"
},
"intervalSec": {
"default": 300,
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"http": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048
},
"method": {
"default": "GET",
"type": "string",
"enum": [
"GET",
"HEAD"
]
},
"expectedStatus": {
"default": [
200
],
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "integer",
"minimum": 100,
"maximum": 599
}
},
"timeoutMs": {
"default": 10000,
"type": "integer",
"minimum": 1000,
"maximum": 30000
},
"keyword": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"headers": {
"default": [],
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[A-Za-z0-9!#$%&'*+.^_`|~-]{1,64}$"
},
"value": {
"type": "string",
"maxLength": 1024
}
},
"required": [
"name",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"url"
],
"additionalProperties": false
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"failureThreshold": {
"default": 2,
"type": "integer",
"minimum": 1,
"maximum": 5
},
"notifyOnRecovery": {
"default": true,
"type": "boolean"
}
},
"required": [
"type",
"http",
"name"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "heartbeat"
},
"heartbeat": {
"type": "object",
"properties": {
"intervalSec": {
"default": 45,
"type": "integer",
"minimum": 30,
"maximum": 300
},
"graceSec": {
"type": "integer",
"minimum": 60,
"maximum": 900
}
},
"additionalProperties": false
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"failureThreshold": {
"default": 2,
"type": "integer",
"minimum": 1,
"maximum": 5
},
"notifyOnRecovery": {
"default": true,
"type": "boolean"
}
},
"required": [
"type",
"heartbeat",
"name"
],
"additionalProperties": false
}
]
}GET/api/v1/monitors/{id}
Get a monitor. Read key.
PATCH/api/v1/monitors/{id}
Update a monitor. Read and write key.
Request body schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"intervalSec": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"http": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD"
]
},
"expectedStatus": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "integer",
"minimum": 100,
"maximum": 599
}
},
"timeoutMs": {
"type": "integer",
"minimum": 1000,
"maximum": 30000
},
"keyword": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "null"
}
]
},
"headers": {
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"pattern": "^[A-Za-z0-9!#$%&'*+.^_`|~-]{1,64}$"
},
"value": {
"type": "string",
"maxLength": 1024
}
},
"required": [
"name",
"value"
],
"additionalProperties": false
}
}
},
"additionalProperties": false
},
"heartbeat": {
"type": "object",
"properties": {
"intervalSec": {
"type": "integer",
"minimum": 30,
"maximum": 300
},
"graceSec": {
"anyOf": [
{
"type": "integer",
"minimum": 60,
"maximum": 900
},
{
"type": "null"
}
]
},
"showShards": {
"type": "boolean"
}
},
"additionalProperties": false
},
"failureThreshold": {
"type": "integer",
"minimum": 1,
"maximum": 5
},
"notifyOnRecovery": {
"type": "boolean"
}
},
"additionalProperties": false
}DELETE/api/v1/monitors/{id}
Delete a monitor. Read and write key.
POST/api/v1/monitors/{id}/pause
Pause checks and alerts. Read and write key.
POST/api/v1/monitors/{id}/resume
Resume a paused monitor. Read and write key.
GET/api/v1/monitors/{id}/checks
Recent check results. Read key.
?limit= 1 to 500, default 100.
GET/api/v1/monitors/{id}/uptime
Uptime over 24 hours, 7, 30, and 90 days. Read key.
GET/api/v1/incidents
List incidents. Read key.
?status= active for open incidents only.
POST/api/v1/incidents
Post an incident. Read and write key.
Request body schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 3,
"maxLength": 120
},
"impact": {
"type": "string",
"enum": [
"degraded",
"partial_outage",
"major_outage"
]
},
"stage": {
"type": "string",
"enum": [
"investigating",
"identified",
"monitoring"
]
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 5000
},
"monitorIds": {
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 40
}
},
"notify": {
"type": "boolean"
}
},
"required": [
"title",
"impact",
"stage",
"body",
"monitorIds",
"notify"
],
"additionalProperties": false
}GET/api/v1/incidents/{id}
Get an incident. Read key.
POST/api/v1/incidents/{id}/updates
Post an incident update. Read and write key.
Set stage to resolved to resolve the incident.
Request body schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"stage": {
"type": "string",
"enum": [
"investigating",
"identified",
"monitoring",
"resolved"
]
},
"body": {
"type": "string",
"minLength": 1,
"maxLength": 5000
},
"impact": {
"type": "string",
"enum": [
"degraded",
"partial_outage",
"major_outage"
]
},
"notify": {
"type": "boolean"
}
},
"required": [
"stage",
"body",
"notify"
],
"additionalProperties": false
}GET/api/v1/maintenance
List maintenance windows. Read key.
POST/api/v1/maintenance
Schedule maintenance. Read and write key.
Request body schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 3,
"maxLength": 120
},
"body": {
"default": "",
"type": "string",
"maxLength": 5000
},
"startsAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"endsAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"monitorIds": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 40
}
},
"notify": {
"type": "boolean"
}
},
"required": [
"title",
"startsAt",
"endsAt",
"monitorIds",
"notify"
],
"additionalProperties": false
}GET/api/v1/maintenance/{id}
Get a maintenance window. Read key.
PATCH/api/v1/maintenance/{id}
Replace a window that has not started. Read and write key.
Request body schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 3,
"maxLength": 120
},
"body": {
"default": "",
"type": "string",
"maxLength": 5000
},
"startsAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"endsAt": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"monitorIds": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 40
}
},
"notify": {
"type": "boolean"
}
},
"required": [
"title",
"startsAt",
"endsAt",
"monitorIds",
"notify"
],
"additionalProperties": false
}DELETE/api/v1/maintenance/{id}
Cancel, or end a running window now. Read and write key.