GET/api/v1/activityActivity
Return newest-first API-key-attributed actions across the account using keyset pagination.
Required scopemonitors:read
Parameters
limit — querybefore — query
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/activity
GET/api/v1/eventsEvents
Open a Server-Sent Events stream of API-accessible monitor transitions and activity signals; snapshot current state after connecting.
Required scopemonitors:read
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/events
GET/api/v1/groupsGroups
Return owned groups with monitor and active-monitor counts.
Required scopemonitors:read
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/groups
POST/api/v1/groupsGroups
Create an owned monitor group with a name and optional presentation color; accounts may hold up to 50 groups.
Required scopemonitors:write
Request body · GroupCreate
color
string
Hex presentation color; defaults to #909098.
name required
string
Group name, trimmed; 1 to 100 characters.
Responses
201Created
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X POST -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/groups
PATCH/api/v1/groups/{group_ref}Groups
Partially update an owned group's name, color, ordering, or initial expanded presentation state.
Required scopemonitors:write
Parameters
Request body · GroupPatch
color
string
Hex presentation color.
name
string
Trimmed group name, 1 to 100 characters.
sort_order
integer
Non-negative presentation order.
start_expanded
boolean
Whether clients should initially render the group expanded.
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X PATCH -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/groups/{group_ref}
DELETE/api/v1/groups/{group_ref}Groups
Delete an owned group and ungroup its members without deleting any monitors.
Required scopemonitors:write
Parameters
Responses
204Deleted
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X DELETE -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/groups/{group_ref}
GET/api/v1/groups/{group_ref}/statusGroups
Return an owner-scoped group health rollup with member states, incidents, checks, history, and uptime windows.
Required scopemonitors:read
Parameters
group_ref — pathhistory_days — query
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/groups/{group_ref}/status
GET/api/v1/incidentsIncidents
Return a bounded recent incident collection across API-accessible monitors.
Required scopeincidents:read
Parameters
limit — querysince — query
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/incidents
GET/api/v1/incidents/openIncidents
Return only currently-open incidents, oldest first, already joined to the monitor, the trigger that opened each one, and the status pages publishing it.
Required scopeincidents:read
Parameters
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/incidents/open
GET/api/v1/incidents/{incident_id}Incidents
Return one incident only when its monitor is accessible to the API key.
Required scopeincidents:read
Parameters
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/incidents/{incident_id}
PATCH/api/v1/incidents/{incident_id}Incidents
Update incident title, description, or operator classification within the allowed reclassification window.
Required scopeincidents:write
Parameters
Request body · IncidentPatch
classification
string
Reclassify (frozen 7 days after resolution). false_positive requires a description.
description
string
Update description.
title
string
Update title.
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X PATCH -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/incidents/{incident_id}
POST/api/v1/incidents/{incident_id}/closeIncidents
Resolve an open manual incident; repeated retries may use Idempotency-Key.
Required scopeincidents:write
Parameters
Responses
201Created
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X POST -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/incidents/{incident_id}/close
GET/api/v1/incidents/{incident_id}/commentsIncidents
Return comments for an incident whose monitor is accessible to the API key.
Required scopeincidents:read
Parameters
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/incidents/{incident_id}/comments
POST/api/v1/incidents/{incident_id}/commentsIncidents
Append an operator comment to an accessible incident.
Required scopeincidents:write
Parameters
Request body · CommentCreate
body required
string
Comment body.
Responses
201Created
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X POST -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/incidents/{incident_id}/comments
DELETE/api/v1/incidents/{incident_id}/comments/{comment_id}Incidents
Delete an incident comment when permitted without revealing inaccessible incident existence.
Required scopeincidents:write
Parameters
incident_id — pathcomment_id — path
Responses
204Deleted
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X DELETE -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/incidents/{incident_id}/comments/{comment_id}
GET/api/v1/meCapabilities
Return the caller's plan, granted and effective scopes, account limits, current usage, and credits so clients can plan before acting.
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/me
GET/api/v1/monitorsMonitors
List owned and, when explicitly enabled by their owner, shared monitors; supports bounded inventory pagination.
Required scopemonitors:read
Parameters
scope — querylimit — queryoffset — query
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors
POST/api/v1/monitorsMonitors
Create an enabled or paused monitor using the common fields and the selected monitor type's configuration schema.
Required scopemonitors:write
Request body · MonitorCreate
Select the schema matching the discriminator field:
MonitorCreateApi
active
boolean
Whether the monitor checks. Created PAUSED by default (active=false) — a new monitor will NOT run until activated. Pass active:true to start checking now (subject to your plan's active-monitor cap: 403 if full), or PATCH active:true later.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, default 1).
capture_response_headers
boolean
Capture response headers.
check_method
string
HTTP method (default GET).
custom_headers
object
Map of header name -> value.
degraded_after_checks
integer
Consecutive degraded checks before alert (default 1).
expected_statuses
array
Status codes treated as up (default [200]).
http_body
string
Request body.
http_content_type
string
Request Content-Type (default application/json).
interval_sec required
integer
Check interval; must be an allowed value and >= your plan minimum.
json_assertions
object
JSON assertions evaluated against the response.
max_capture_bytes
integer
Max response bytes to capture (default 2048).
name required
string
Display name.
public_label
string
Label shown on public status pages.
threshold_ms
integer
Degraded-latency threshold in ms (advanced; Maker/Pro).
type required
string
<nil>
url required
string
Endpoint URL.
MonitorCreateBrowser
active
boolean
Whether the monitor checks. Created PAUSED by default (active=false) — a new monitor will NOT run until activated. Pass active:true to start checking now (subject to your plan's active-monitor cap: 403 if full), or PATCH active:true later.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, default 1).
capture_response
boolean
Capture page output.
degraded_after_checks
integer
Consecutive degraded checks before alert (default 1).
interval_sec required
integer
Check interval; must be an allowed value and >= your plan minimum.
keyword
string
Text the rendered page must contain.
name required
string
Display name.
public_label
string
Label shown on public status pages.
threshold_ms
integer
Degraded-latency threshold in ms (advanced; Maker/Pro).
type required
string
<nil>
url required
string
Target URL for the headless browser check.
verify_ssl
boolean
Verify the TLS certificate.
MonitorCreateDns
active
boolean
Whether the monitor checks. Created PAUSED by default (active=false) — a new monitor will NOT run until activated. Pass active:true to start checking now (subject to your plan's active-monitor cap: 403 if full), or PATCH active:true later.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, default 1).
degraded_after_checks
integer
Consecutive degraded checks before alert (default 1).
dns_expected_value
string
Assert the single record resolves to this.
dns_expected_values
array
Per-record-type expected patterns (max 3 each). Positional array aligned with dns_record_types.
dns_host required
string
Domain to resolve.
dns_record_type
string
Single record type (A/AAAA/CNAME/MX/TXT/NS).
dns_record_types
array
Multiple record types to query. dns_expected_values[i] applies to dns_record_types[i].
dns_resolvers
array
Resolvers to query (max 3).
domain_expiry
boolean
Track domain registration expiry.
interval_sec required
integer
Check interval; must be an allowed value and >= your plan minimum.
name required
string
Display name.
public_label
string
Label shown on public status pages.
threshold_ms
integer
Degraded-latency threshold in ms (advanced; Maker/Pro).
type required
string
<nil>
MonitorCreateGame
active
boolean
Whether the monitor checks. Created PAUSED by default (active=false) — a new monitor will NOT run until activated. Pass active:true to start checking now (subject to your plan's active-monitor cap: 403 if full), or PATCH active:true later.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, default 1).
check_method
string
Game protocol/query mode. source_query = Steam A2S; minecraft is Java SLP and minecraft_bedrock is the RakNet ping. No generic custom mode exists. Accepted in any case and returned uppercase.
degraded_after_checks
integer
Consecutive degraded checks before alert (default 1).
host required
string
Game server host (Steam A2S query).
interval_sec required
integer
Check interval; must be an allowed value and >= your plan minimum.
name required
string
Display name.
players_public_mode
string
Roster visibility on public pages.
pop_drop_min
integer
Minimum player delta for a population-drop alert.
pop_drop_pct
integer
Population-drop % vs recent peak that marks degraded (Maker/Pro).
pop_outage_pct
integer
Population-drop % treated as an outage.
port required
integer
Query port.
public_label
string
Label shown on public status pages.
query_players
boolean
Capture live player roster (Maker/Pro).
threshold_ms
integer
Degraded-latency threshold in ms (advanced; Maker/Pro).
type required
string
<nil>
MonitorCreateHeartbeat
active
boolean
Whether the monitor checks. Created PAUSED by default (active=false) — a new monitor will NOT run until activated. Pass active:true to start checking now (subject to your plan's active-monitor cap: 403 if full), or PATCH active:true later.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, default 1).
degraded_after_checks
integer
Consecutive degraded checks before alert (default 1).
heartbeat_grace_sec
integer
Extra grace beyond interval_sec before a missed beat counts.
interval_sec required
integer
Check interval; must be an allowed value and >= your plan minimum.
miss_detection
boolean
Scheduled mode: alert if no beat within interval (true). false = dormant event-receiver.
name required
string
Display name.
public_label
string
Label shown on public status pages.
schedule_expr
string
Standard 5-field cron expression (or @daily) for a job that runs on a calendar rather than a cadence. Replaces interval_sec for miss detection. Rejected for event receivers (miss_detection=false).
schedule_tz
string
IANA zone the schedule is evaluated in (e.g. Europe/Lisbon). Defaults to UTC. This is what keeps an 03:00 job at 03:00 across DST.
threshold_ms
integer
Degraded-latency threshold in ms (advanced; Maker/Pro).
type required
string
<nil>
MonitorCreateHttp
active
boolean
Whether the monitor checks. Created PAUSED by default (active=false) — a new monitor will NOT run until activated. Pass active:true to start checking now (subject to your plan's active-monitor cap: 403 if full), or PATCH active:true later.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, default 1).
capture_response
boolean
Capture a slice of the response body.
check_method
string
HTTP method (default GET).
custom_headers
object
Map of header name -> value.
degraded_after_checks
integer
Consecutive degraded checks before alert (default 1).
domain_expiry
boolean
Track domain (WHOIS/RDAP) expiry.
domain_warn_days
array
Days-before-domain-expiry to alert on.
expected_statuses
array
Status codes treated as up (default [200]).
http_body
string
Request body.
http_content_type
string
Content-Type for the request body.
http_force_http1
boolean
Force HTTP/1.1.
http_header_mode
string
Header preset (e.g. 'minimal').
interval_sec required
integer
Check interval; must be an allowed value and >= your plan minimum.
keyword
string
Body must contain (or, with keyword_absent, must NOT contain) this.
keyword_absent
boolean
Invert keyword: fail if the keyword IS present.
keyword_regex
boolean
Treat each keyword line as an RE2 regular expression instead of a literal substring. No lookaround or backreferences.
name required
string
Display name.
public_label
string
Label shown on public status pages.
ssl_warn_days
array
Days-before-expiry to alert on (e.g. [30,7,1]).
threshold_ms
integer
Degraded-latency threshold in ms (advanced; Maker/Pro).
type required
string
<nil>
url required
string
Target URL (http/https).
verify_ssl
boolean
Verify the TLS certificate (HTTP/browser monitors only; API monitors always verify).
MonitorCreatePing
active
boolean
Whether the monitor checks. Created PAUSED by default (active=false) — a new monitor will NOT run until activated. Pass active:true to start checking now (subject to your plan's active-monitor cap: 403 if full), or PATCH active:true later.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, default 1).
degraded_after_checks
integer
Consecutive degraded checks before alert (default 1).
host required
string
Hostname or IP to ICMP-ping.
interval_sec required
integer
Check interval; must be an allowed value and >= your plan minimum.
name required
string
Display name.
public_label
string
Label shown on public status pages.
threshold_ms
integer
Latency threshold for degraded.
type required
string
<nil>
MonitorCreateTcp
active
boolean
Whether the monitor checks. Created PAUSED by default (active=false) — a new monitor will NOT run until activated. Pass active:true to start checking now (subject to your plan's active-monitor cap: 403 if full), or PATCH active:true later.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, default 1).
degraded_after_checks
integer
Consecutive degraded checks before alert (default 1).
host required
string
Hostname or IP.
interval_sec required
integer
Check interval; must be an allowed value and >= your plan minimum.
name required
string
Display name.
port required
integer
TCP port to connect to.
public_label
string
Label shown on public status pages.
threshold_ms
integer
Latency threshold for degraded.
type required
string
<nil>
Responses
201Created
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X POST -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/monitors
GET/api/v1/monitors/{monitor_ref}Monitors
Return one accessible monitor by its stable public reference.
Required scopemonitors:read
Parameters
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}
PATCH/api/v1/monitors/{monitor_ref}Monitors
Partially update an owned monitor; prefer explicit idempotent values such as active=true or active=false.
Required scopemonitors:write
Parameters
Request body · MonitorPatch
active
boolean
Pause (false) / resume (true), idempotent.
alert_after_checks
integer
Consecutive failing checks before DOWN alert (1-10, plan-gated).
capture_response
boolean
Capture a slice of response output.
capture_response_headers
boolean
Capture response headers for API monitors.
check_method
string
HTTP/API method or game query mode. Game values: source_query, minecraft, minecraft_bedrock, fivem, ping, tcp — accepted in any case and returned uppercase, so compare case-insensitively when reading a monitor back.
custom_headers
object
Map of header name -> value. Secret-looking values are masked on read.
degraded_after_checks
integer
Consecutive degraded checks before alert (1-10, plan-gated).
dns_expected_value
string
Expected value for single DNS record type.
dns_expected_values
array
Per-record-type expected patterns (max 3 each). Positional array aligned with dns_record_types.
dns_host
string
Domain to resolve.
dns_record_type
string
Single record type (A/AAAA/CNAME/MX/TXT/NS).
dns_record_types
array
Multiple record types to query. dns_expected_values[i] applies to dns_record_types[i].
dns_resolvers
array
Resolvers to query (max 3).
domain_expiry
boolean
Track domain registration expiry.
domain_warn_days
array
Days-before-domain-expiry to alert on.
expected_statuses
array
HTTP/API/browser status codes treated as up.
heartbeat_grace_sec
integer
Extra grace beyond interval_sec before missed heartbeat counts.
host
string
Ping/TCP/game host.
http_body
string
HTTP/API request body.
http_content_type
string
Request Content-Type.
http_force_http1
boolean
Force HTTP/1.1.
http_header_mode
string
Header preset (minimal/browser_like).
interval_sec
integer
Owner-only; plan-validated.
json_assertions
object
API-monitor JSON assertions evaluated against the response.
keyword
string
Body/rendered page must contain, or must not contain with keyword_absent.
keyword_absent
boolean
Invert keyword check.
keyword_regex
boolean
Treat each keyword line as an RE2 regular expression.
max_capture_bytes
integer
Max response bytes to capture. API monitors only — rejected on other types, which store no capture cap.
miss_detection
boolean
Heartbeat scheduled miss detection. false = event receiver.
name
string
Rename.
players_public_mode
string
Roster visibility on public pages.
pop_drop_min
integer
Minimum player delta for a population-drop alert.
pop_drop_pct
integer
Population-drop % vs recent peak that marks degraded.
pop_outage_pct
integer
Population-drop % treated as outage.
port
integer
TCP/game port.
public_label
string
Status-page label.
query_players
boolean
Capture player roster when supported and plan-allowed.
schedule_expr
string
Cron expression for a cronmon heartbeat; replaces interval_sec for miss detection. Send null to revert to interval mode.
schedule_tz
string
IANA zone for schedule_expr (defaults to UTC).
ssl_warn_days
array
Days-before-certificate-expiry to alert on.
threshold_ms
integer
Degraded-latency threshold in ms.
url
string
HTTP/browser/API target URL.
verify_ssl
boolean
Verify TLS certificate for HTTP/browser monitors; API monitors always verify.
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X PATCH -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/monitors/{monitor_ref}
DELETE/api/v1/monitors/{monitor_ref}Monitors
Permanently delete an owned monitor and its dependent operational data.
Required scopemonitors:write
Parameters
Responses
204Deleted
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X DELETE -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}
GET/api/v1/monitors/{monitor_ref}/activityActivity
Return the full session and API action history for one accessible monitor using keyset pagination.
Required scopemonitors:read
Parameters
monitor_ref — pathlimit — querybefore — query
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}/activity
GET/api/v1/monitors/{monitor_ref}/checksChecks
Return recent diagnostic check outcomes without captured response bodies or sensitive request configuration.
Required scopemonitors:read
Parameters
monitor_ref — pathlimit — querybefore — query
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}/checks
PATCH/api/v1/monitors/{monitor_ref}/groupMonitors
Assign an owned monitor to an owned group, or remove its current assignment by sending group_ref as null.
Required scopemonitors:write
Parameters
Request body · MonitorGroupAssignment
group_ref required
[string null]
Owned group_ref, or null to ungroup the monitor.
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X PATCH -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/monitors/{monitor_ref}/group
GET/api/v1/monitors/{monitor_ref}/incidentsIncidents
Return newest-first incident history for one monitor using an RFC3339 cursor.
Required scopeincidents:read
Parameters
monitor_ref — pathlimit — querybefore — query
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}/incidents
POST/api/v1/monitors/{monitor_ref}/incidentsIncidents
Open an outage, degraded, or maintenance incident for an owned monitor; maintenance suppresses alerts until closed.
Required scopeincidents:write
Parameters
Request body · IncidentCreate
classification
string
Defaults to outage. false_positive not allowed at create.
description
string
Details (alias: body).
title
string
Incident title.
Responses
201Created
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X POST -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/monitors/{monitor_ref}/incidents
GET/api/v1/monitors/{monitor_ref}/notificationsNotifications
Return the caller's global-channel and channel-instance overrides for one accessible monitor.
Required scopemonitors:read
Parameters
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}/notifications
PATCH/api/v1/monitors/{monitor_ref}/notificationsNotifications
Replace selected caller-owned notification overrides; null values inherit the account or channel-instance default.
Required scopemonitors:write
Parameters
Request body · NotificationOverridesPatch
global
array
<nil>
instances
array
<nil>
Responses
204Notification overrides updated
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X PATCH -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/monitors/{monitor_ref}/notifications
GET/api/v1/monitors/{monitor_ref}/triggersTriggers
Return redacted trigger configuration for a monitor; callback URLs, request bodies, headers, and secrets are omitted.
Required scopetriggers:read
Parameters
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}/triggers
POST/api/v1/monitors/{monitor_ref}/triggersTriggers
Create an enabled HTTPS webhook or notify trigger; arbitrary HTTP-request triggers and caller-supplied secrets remain app-only.
Required scopetriggers:write
Parameters
Request body · TriggerCreate
Select the schema matching the discriminator field:
TriggerCreateWebhook
conditions
object
Filter object with an expr string. Cloudflare-style filter: path (dot.paths) + cmp_op (== != > < >= <= contains) or 'exists'; combine with and / or / not / parens. Values: number, "string", true, false, null. No arithmetic or functions. Missing paths compare equal to null and compare not-equal to non-null values; use exists when testing presence explicitly. Captured and sanitized check payload. Empty for monitor types that do not emit a payload; game player names are removed. THE SHAPE DIFFERS BY MONITOR TYPE - read the entry for the type you are targeting before writing a path. api: Envelope. The upstream response body is nested: payload.body.<field>. Beside it sit payload.status_code, payload.headers (when capture is on) and payload.assertions. payload.<field> at the top level is NOT the response - e.g. a status endpoint returning {"status":{"indicator":"none"}} is read as payload.body.status.indicator, never payload.status.indicator. game: Flat. Source-query fields at the top level: payload.<field>. Player names are removed. heartbeat: Flat. Whatever JSON the sender posted stays at the top level: payload.<field>. The three values the server adds are namespaced under payload.beat: beat.received_at, beat.exit_code, beat.duration_ms. Those three are also copied flat, but only when the posted body left the name free, so a sender's own exit_code wins at payload.exit_code - prefer payload.beat.* for anything the server observed. Evaluated against the namespaced event, monitor, and payload context. Payload fields are available only when the monitor emits a captured payload. Required when open_incident=true (defines the auto-resolve condition). Plan-gated (TriggerConditions). WARNING for open_incident: a path that does not exist compares as null, so != against it is vacuously TRUE - the incident opens on the first check and can never auto-resolve, because the condition it waits on is never false. This reads as a working trigger. Confirm the path against the monitor type above, and write `x exists and x != "y"` when the field must be present.
enabled
boolean
Create the trigger already enabled. Defaults to false, and is forced to false when the monitor is at its plan's enabled-trigger cap.
name
string
Optional; auto-generated from type if omitted.
on_degraded
boolean
Fire on DEGRADED.
on_down
boolean
Fire on DOWN transition.
on_flapping_start
boolean
Fire when flapping starts.
on_flapping_stop
boolean
Fire when flapping stops.
on_maintenance_end
boolean
Fire when maintenance ends.
on_maintenance_start
boolean
Fire when maintenance starts.
on_payload
boolean
Fire on every payload (api/heartbeat monitors that emit a body); stripped if the monitor can't emit one.
on_recovered
boolean
Fire on recovery.
on_signal
boolean
Fire on every heartbeat beat (heartbeat monitors).
retry_count
integer
Webhook delivery retries after the first failed attempt (0-3; plan-gated). Notify triggers instead receive two automatic per-destination retries.
retry_delay_sec
integer
Webhook retry base delay in seconds (5-600, default 30; plan-gated; exponential backoff).
type required
string
<nil>
url required
string
https callback URL (no credentials, no custom headers). Receives the KEEPitALIVE-signed JSON payload; HMAC secret is server-derived and never returned.
TriggerCreateNotify
body
string
Notification body template. Supports {{monitor.*}} and {{event.*}} for every monitor; {{payload.*}} is available only when the monitor emits a captured payload.
conditions
object
Filter object with an expr string. Cloudflare-style filter: path (dot.paths) + cmp_op (== != > < >= <= contains) or 'exists'; combine with and / or / not / parens. Values: number, "string", true, false, null. No arithmetic or functions. Missing paths compare equal to null and compare not-equal to non-null values; use exists when testing presence explicitly. Captured and sanitized check payload. Empty for monitor types that do not emit a payload; game player names are removed. THE SHAPE DIFFERS BY MONITOR TYPE - read the entry for the type you are targeting before writing a path. api: Envelope. The upstream response body is nested: payload.body.<field>. Beside it sit payload.status_code, payload.headers (when capture is on) and payload.assertions. payload.<field> at the top level is NOT the response - e.g. a status endpoint returning {"status":{"indicator":"none"}} is read as payload.body.status.indicator, never payload.status.indicator. game: Flat. Source-query fields at the top level: payload.<field>. Player names are removed. heartbeat: Flat. Whatever JSON the sender posted stays at the top level: payload.<field>. The three values the server adds are namespaced under payload.beat: beat.received_at, beat.exit_code, beat.duration_ms. Those three are also copied flat, but only when the posted body left the name free, so a sender's own exit_code wins at payload.exit_code - prefer payload.beat.* for anything the server observed. Evaluated against the namespaced event, monitor, and payload context. Payload fields are available only when the monitor emits a captured payload. Required when open_incident=true (defines the auto-resolve condition). Plan-gated (TriggerConditions). WARNING for open_incident: a path that does not exist compares as null, so != against it is vacuously TRUE - the incident opens on the first check and can never auto-resolve, because the condition it waits on is never false. This reads as a working trigger. Confirm the path against the monitor type above, and write `x exists and x != "y"` when the field must be present.
enabled
boolean
Create the trigger already enabled. Defaults to false, and is forced to false when the monitor is at its plan's enabled-trigger cap.
incident_classification
string
degraded | outage | maintenance (required when open_incident=true).
name
string
Optional; auto-generated from type if omitted.
notify_channels
array
Channels to notify, e.g. ["in_app","email","discord"]; must already be configured in-app.
notify_cooldown_sec
integer
Min seconds between notifications (rate floor).
notify_title required
string
Notification title.
on_degraded
boolean
Fire on DEGRADED.
on_down
boolean
Fire on DOWN transition.
on_flapping_start
boolean
Fire when flapping starts.
on_flapping_stop
boolean
Fire when flapping stops.
on_maintenance_end
boolean
Fire when maintenance ends.
on_maintenance_start
boolean
Fire when maintenance starts.
on_payload
boolean
Fire on every payload (api/heartbeat monitors that emit a body); stripped if the monitor can't emit one.
on_recovered
boolean
Fire on recovery.
on_signal
boolean
Fire on every heartbeat beat (heartbeat monitors).
open_incident
boolean
Open/auto-resolve an incident on this trigger. Requires incident_classification AND conditions.
type required
string
<nil>
Responses
201Created
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X POST -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/monitors/{monitor_ref}/triggers
GET/api/v1/monitors/{monitor_ref}/triggers/{trigger_id}Triggers
Return one redacted webhook or notify trigger configuration.
Required scopetriggers:read
Parameters
monitor_ref — pathtrigger_id — path
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}/triggers/{trigger_id}
PATCH/api/v1/monitors/{monitor_ref}/triggers/{trigger_id}Triggers
Partially edit a trigger; enabled-only changes require triggers:toggle while every other field requires triggers:write.
Required scopetriggers:toggle
Parameters
monitor_ref — pathtrigger_id — path
Request body · TriggerPatch
conditions
object
Cloudflare-style filter expression object (triggers:write).
enabled
boolean
Enable or disable the trigger (triggers:toggle; may be sent alone).
incident_classification
string
degraded, outage, or maintenance (triggers:write).
name
string
Rename the trigger (triggers:write).
notify_channels
array
Configured notification channels (triggers:write).
notify_cooldown_sec
integer
Notification cooldown (triggers:write).
notify_title
string
Notification title for notify triggers (triggers:write).
on_degraded
boolean
Fire on DEGRADED transition (triggers:write).
on_down
boolean
Fire on DOWN transition (triggers:write).
on_flapping_start
boolean
Fire when flapping starts (triggers:write).
on_flapping_stop
boolean
Fire when flapping stops (triggers:write).
on_maintenance_end
boolean
Fire when maintenance ends (triggers:write).
on_maintenance_start
boolean
Fire when maintenance starts (triggers:write).
on_payload
boolean
Fire on captured payload; requires conditions (triggers:write).
on_recovered
boolean
Fire on recovery (triggers:write).
on_signal
boolean
Fire on heartbeat signal (triggers:write).
open_incident
boolean
Open and auto-resolve an incident while conditions match (triggers:write).
retry_delay_sec
integer
Webhook-only retry base delay in seconds (triggers:write).
url
string
HTTPS callback URL for webhook triggers only (triggers:write).
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X PATCH -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/monitors/{monitor_ref}/triggers/{trigger_id}
DELETE/api/v1/monitors/{monitor_ref}/triggers/{trigger_id}Triggers
Delete a trigger and resolve any incident still owned by that trigger.
Required scopetriggers:write
Parameters
monitor_ref — pathtrigger_id — path
Responses
204Deleted
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X DELETE -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}/triggers/{trigger_id}
GET/api/v1/monitors/{monitor_ref}/triggers/{trigger_id}/deliveriesTriggers
Return newest-first delivered, failed, and skipped execution outcomes without destination secrets or rendered request data.
Required scopetriggers:read
Parameters
monitor_ref — pathtrigger_id — pathlimit — querybefore — query
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/monitors/{monitor_ref}/triggers/{trigger_id}/deliveries
GET/api/v1/notification-channelsNotifications
Return configured global channels and channel instances that may be referenced by per-monitor notification overrides; secrets are never returned.
Required scopemonitors:read
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/notification-channels
GET/api/v1/statusStatus
Return a thin status-only view of owned monitors without URLs, headers, tokens, or monitor configuration.
Required scopemonitors:read
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/status
GET/api/v1/status-pagesStatus Pages
Return status pages owned by the caller, including public embed URLs when available.
Required scopemonitors:read
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/status-pages
POST/api/v1/status-pagesStatus Pages
Create a private status page for all monitors, one group, or selected monitors; publishing and later editing remain app-only.
Required scopestatus_pages:write
Request body · StatusPageCreate
accent_color
string
Hex accent color when the plan permits branding.
description
string
Public description.
group_ref
string
Group reference when scope_type=group.
is_public
boolean
Must be false when creating through the public API.
logo_url
string
Hosted branding logo URL when the plan permits branding.
monitor_refs
array
Monitor references when scope_type=custom.
name required
string
Page name.
scope_type
string
Status-page scope.
theme
string
Visual theme.
Responses
201Created
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -X POST -H "Authorization: Bearer $KEEPITALIVE_API_KEY" -H "Content-Type: application/json" -d '{}' https://keepitalive.dev/api/v1/status-pages
GET/api/v1/summarySummary
Return a one-call owned-fleet snapshot with state counts, open incidents, check volume, and 24-hour, 7-day, and 30-day uptime.
Required scopemonitors:read
Responses
200Successful response
400Invalid request
401Missing or invalid API key
403Insufficient scope, plan, or monitor permission
404Resource not found or not visible to this key
409Operation conflicts with current state
422Semantically invalid request
429Rate limited
503Required dependency unavailable
curl example
curl -H "Authorization: Bearer $KEEPITALIVE_API_KEY" https://keepitalive.dev/api/v1/summary
No endpoints match this filter.