fettle-mcp 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -54
- package/contracts/mcp_tools.json +1199 -10
- package/dist/errors.js +1 -1
- package/dist/errors.js.map +1 -1
- package/package.json +1 -1
package/contracts/mcp_tools.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"instructions": "Fettle is an uptime monitoring service. The tools see only the API key's organization: monitors
|
|
3
|
+
"instructions": "Fettle is an uptime monitoring service. The tools see only the API key's organization: monitors, heartbeats, maintenance windows, incidents, status page incidents, tags, channels (read), regions. Channels, status pages, members, API keys and billing are managed only in the dashboard (https://dashboard.fettle.sh). Read a tool's description (arguments, limits, errors) before its first call.\n\nFINDING THINGS\n- list_monitors gives one short row per monitor; use it to find ids. Filters are JSON arrays. Broken now: status [\"DOWN\", \"DEGRADED\"]. Certificates expiring first: type [\"SSL\"], sort \"ssl_expiry\".\n- tag filters lists; tag_match \"all\" (default) needs every tag, \"any\" one of them.\n- Lists are paginated: page from 1, size 1..100 (default 25).\n\nPLAN LIMITS\nCall get_plan_usage before creating anything: limits (null means none) and usage. A broken limit or an unknown region is a 403 naming it: change the request or tell the user; never retry it unchanged.\n\nCREATING MONITORS\n- check_target probes a target once before create_monitor. list_regions names the region codes.\n- bulk_create_monitors creates up to 100, all or nothing.\n- type and target never change after create.\n- channel_ids: ids from list_channels. Empty or omitted on create alerts every verified, active channel. Email is not a channel: every alert also goes to the account email of whoever created the monitor or heartbeat.\n- update tools change only the fields you pass. Never send null; omit a field to keep it. A monitor's config is replaced whole: send every config field you want to keep.\n- Exposed ports on a server: follow get_exposed_ports_preset.\n\nMANY MONITORS AT ONCE\nFind ids with list_monitors, then bulk_pause_monitors, bulk_resume_monitors or bulk_update_monitors (interval, timeout, regions, channels, threshold, cooldown) for up to 100 ids, all or nothing. bulk_update_monitor_tags adds or removes tags on up to 300. There is no bulk delete.\n\nTAGS\nCall list_tags first and reuse names. Tags are flat labels such as env:prod, trimmed, lowercased and deduplicated; at most 10 per item. rename_tag and delete_tag act on every monitor and heartbeat.\n\nHEARTBEATS\nA job calls ping_url when it succeeds. Job every N seconds, alert after T seconds of silence: period_seconds = N, grace_seconds = T - N. Never late before its first success ping. ping_url + \"/start\" restarts the clock, ping_url + \"/fail\" marks it DOWN at once.\n\nMAINTENANCE\nBefore a deploy or reboot, create_maintenance_window (scope ORG or MONITOR) instead of pausing monitors: checks keep running, but no incident opens and no alert goes out. Not for heartbeats. preview_maintenance_window shows a schedule's next occurrences; list_active_maintenance shows what is silenced now.\n\nOUTAGES\nlist_monitors status [\"DOWN\"] -> list_check_results (status code, error, region per check) -> get_incident. acknowledge_incident stops repeat alerts; the recovery alert still goes out. create_status_page_incident and post_status_page_update can email the page's subscribers: confirm the text with the user first.\n\nERRORS (start of a failed call's text)\n- \"Authentication failed\": the key is missing, revoked or expired, the address is not allowed, or its creator lost access. Do not retry; tell the user.\n- \"This tool requires/needs an API key with write scope\": the key is read-only; tell the user.\n- \"Invalid argument(s)\": names each failing field. \"Invalid request:\": the rule broken. Fix, retry.\n- \"Forbidden:\": a plan limit, an unknown region, or the key's user lacks the permission; the reason says which.\n- \"Not found:\": no such id in this organization.\n- \"Rate limited\": wait the seconds given, then retry. All API key calls share the organization's per-minute budget.\n- \"Tool '<name>' failed: the API returned 5xx\": server fault, retry once later.\n- \"Tool '<name>' does not accept argument(s)\": drop the ones named.\n- \"Request failed with status N\": read the reason, do not retry unchanged.\n",
|
|
4
4
|
"tools": [
|
|
5
5
|
{
|
|
6
6
|
"name": "list_monitors",
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
{
|
|
163
163
|
"name": "create_monitor",
|
|
164
164
|
"title": "Create a monitor",
|
|
165
|
-
"description": "Create a monitor that checks a URL, host or port on a schedule and return it (the get_monitor shape). Requires a key with the write scope. Required: name (1 to 255 characters), type (HTTP, PING, SSL, TCP or DNS), target, interval_seconds, timeout_seconds and regions. target (up to 2048 characters): for HTTP an http:// or https:// URL (https:// is added when the scheme is missing; port, path and query are kept); for PING, SSL, TCP and DNS a bare public hostname or IP address with no :port and no path (the TCP or SSL port goes in config; host:port is a 422, while a full URL such as https://host:8443/x is cut down to its host and its port is lost). Hostnames must be ASCII (punycode for internationalized domains). localhost, *.localhost and IP addresses that are not public (private, loopback, link-local, CGNAT 100.64.0.0/10, reserved or unspecified) are rejected with a 422. type and target cannot be changed later. config is a JSON object whose shape depends on type. HTTP takes method (GET, HEAD, POST, PUT, PATCH or DELETE, any case; default GET), expected_status_codes (a non-empty list of codes 100 to 599, default [200]), keyword (case-sensitive substring the response body must contain, at most 1024 characters; not allowed with HEAD), follow_redirects (default true), verify_ssl (default true; false skips TLS verification, which also means that monitor can no longer report a TLS_INVALID failure), request_headers (an object of header name to value: at most 20 headers; a name is at most 128 characters of letters, digits and ! # $ % & ' * + - . ^ _ ` | ~; a value is at most 1024 bytes of printable ASCII, space or tab; the whole object at most 8192 bytes as JSON; two names differing only in case, and the reserved names Host, Content-Length, Transfer-Encoding, Connection, Upgrade, TE, Trailer, Keep-Alive, CF-Connecting-IP and any Proxy-* name, are a 422) and request_body (a string of at most 8192 bytes as UTF-8; requires POST, PUT, PATCH or DELETE), all optional. Reads never return request_header values: each one comes back as the literal __FETTLE_UNCHANGED__, and writing that value back in an update keeps the stored header unchanged (on create it is a 422). PING takes packet_count (1 to 20, default 4), optional. SSL takes warn_before_days (1 to 365, default 14) and port (1 to 65535, default 443), both optional. TCP takes either port (one port, 1 to 65535, expected_state \"open\" by default or \"closed\") or ports — a list of 1 to 20 distinct ports that must all be closed: ports requires expected_state \"closed\", exactly one region and interval_seconds of at least 300, and a check fails when any listed port accepts a connection (the monitor goes DOWN once confirmation_threshold failures confirm it). Passing both port and ports, or neither, is a 422. expected_state values are lowercase. DNS requires record_type (A, AAAA, CNAME, MX, TXT or NS; no default) and takes optional expected_value (at most 2048 characters): when set, one answer must equal it (case-insensitive, ignoring surrounding spaces and a trailing dot; exact for TXT); when absent, any answer passes. For MX the answers are the mail host names only, without priority (mail.example.com, not 10 mail.example.com). A and AAAA both look up every address of the host, IPv4 and IPv6 alike, and any one of them may match; write an IPv6 address in its shortest form. Omit config for HTTP, PING or SSL to use their defaults; omitting it on a TCP or DNS monitor is a 422. regions is a list of one or more distinct region codes (get_plan_usage lists them in limits.allowed_regions, for example eu-central; an unknown code is a 403) — SSL and DNS monitors must target exactly one region (422 otherwise). interval_seconds (integer, 30 to 86400) is the time between checks; timeout_seconds (integer, 1 to 120) is how long one check may take. confirmation_threshold (integer, 1 to 10; 3 when not set on create) is how many checks in a row must fail in every region before the monitor goes DOWN and an incident opens. notification_cooldown_seconds (integer, 60 to 86400; 1800 when not set on create) only holds back a duplicate first alert for the same incident within that window. Repeat reminders while the incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (see get_plan_usage; 0 means no reminders), not this value; it never holds back the recovery alert. Plan limits apply: monitor count, minimum interval_seconds, how many monitors may use an interval below 60 seconds, and max_regions per monitor. Breaking one is a 403 that names the limit (more regions than the plan allows is a 403 too; SSL/DNS with more than one region is a 422). get_plan_usage shows the limits and current usage. is_active (boolean, default true): false creates it paused — no check runs until resume_monitor; a paused monitor still counts toward the plan's monitor limits. channel_ids (array of channel uuids) binds notification channels; omit it or pass an empty list to alert every verified, active channel of the organization; an id that is not an active channel of this organization is a 404.
|
|
165
|
+
"description": "Create a monitor that checks a URL, host or port on a schedule and return it (the get_monitor shape). Requires a key with the write scope. Required: name (1 to 255 characters), type (HTTP, PING, SSL, TCP or DNS), target, interval_seconds, timeout_seconds and regions. target (up to 2048 characters): for HTTP an http:// or https:// URL (https:// is added when the scheme is missing; port, path and query are kept); for PING, SSL, TCP and DNS a bare public hostname or IP address with no :port and no path (the TCP or SSL port goes in config; host:port is a 422, while a full URL such as https://host:8443/x is cut down to its host and its port is lost). Hostnames must be ASCII (punycode for internationalized domains). localhost, *.localhost and IP addresses that are not public (private, loopback, link-local, CGNAT 100.64.0.0/10, reserved or unspecified) are rejected with a 422. type and target cannot be changed later. config is a JSON object whose shape depends on type. HTTP takes method (GET, HEAD, POST, PUT, PATCH or DELETE, any case; default GET), expected_status_codes (a non-empty list of codes 100 to 599, default [200]), keyword (case-sensitive substring the response body must contain, at most 1024 characters; not allowed with HEAD), follow_redirects (default true), verify_ssl (default true; false skips TLS verification, which also means that monitor can no longer report a TLS_INVALID failure), request_headers (an object of header name to value: at most 20 headers; a name is at most 128 characters of letters, digits and ! # $ % & ' * + - . ^ _ ` | ~; a value is at most 1024 bytes of printable ASCII, space or tab; the whole object at most 8192 bytes as JSON; two names differing only in case, and the reserved names Host, Content-Length, Transfer-Encoding, Connection, Upgrade, TE, Trailer, Keep-Alive, CF-Connecting-IP and any Proxy-* name, are a 422) and request_body (a string of at most 8192 bytes as UTF-8; requires POST, PUT, PATCH or DELETE), all optional. Reads never return request_header values: each one comes back as the literal __FETTLE_UNCHANGED__, and writing that value back in an update keeps the stored header unchanged (on create it is a 422). PING takes packet_count (1 to 20, default 4), optional. SSL takes warn_before_days (1 to 365, default 14) and port (1 to 65535, default 443), both optional. TCP takes either port (one port, 1 to 65535, expected_state \"open\" by default or \"closed\") or ports — a list of 1 to 20 distinct ports that must all be closed: ports requires expected_state \"closed\", exactly one region and interval_seconds of at least 300, and a check fails when any listed port accepts a connection (the monitor goes DOWN once confirmation_threshold failures confirm it). Passing both port and ports, or neither, is a 422. expected_state values are lowercase. DNS requires record_type (A, AAAA, CNAME, MX, TXT or NS; no default) and takes optional expected_value (at most 2048 characters): when set, one answer must equal it (case-insensitive, ignoring surrounding spaces and a trailing dot; exact for TXT); when absent, any answer passes. For MX the answers are the mail host names only, without priority (mail.example.com, not 10 mail.example.com). A and AAAA both look up every address of the host, IPv4 and IPv6 alike, and any one of them may match; write an IPv6 address in its shortest form. Omit config for HTTP, PING or SSL to use their defaults; omitting it on a TCP or DNS monitor is a 422. regions is a list of one or more distinct region codes (get_plan_usage lists them in limits.allowed_regions, for example eu-central; an unknown code is a 403) — SSL and DNS monitors must target exactly one region (422 otherwise). interval_seconds (integer, 30 to 86400) is the time between checks; timeout_seconds (integer, 1 to 120) is how long one check may take. confirmation_threshold (integer, 1 to 10; 3 when not set on create) is how many checks in a row must fail in every region before the monitor goes DOWN and an incident opens. notification_cooldown_seconds (integer, 60 to 86400; 1800 when not set on create) only holds back a duplicate first alert for the same incident within that window. Repeat reminders while the incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (see get_plan_usage; 0 means no reminders), not this value; it never holds back the recovery alert. Plan limits apply: monitor count, minimum interval_seconds, how many monitors may use an interval below 60 seconds, and max_regions per monitor. Breaking one is a 403 that names the limit (more regions than the plan allows is a 403 too; SSL/DNS with more than one region is a 422). get_plan_usage shows the limits and current usage. is_active (boolean, default true): false creates it paused — no check runs until resume_monitor; a paused monitor still counts toward the plan's monitor limits. channel_ids (array of channel uuids) binds notification channels; omit it or pass an empty list to alert every verified, active channel of the organization; an id that is not an active channel of this organization is a 404. list_channels gives the ids. tags is an optional list of flat labels (for example env:prod, service:api) used to group and filter monitors, at most 10 per monitor. Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Other errors: 422 for an invalid argument, naming it. To create many monitors at once, use bulk_create_monitors. Example: {\"name\": \"API\", \"type\": \"HTTP\", \"target\": \"https://api.example.com/health\", \"interval_seconds\": 300, \"timeout_seconds\": 10, \"regions\": [\"eu-central\"], \"config\": {\"expected_status_codes\": [200]}, \"tags\": [\"env:prod\"]}",
|
|
166
166
|
"scope": "write",
|
|
167
167
|
"input_schema": {
|
|
168
168
|
"type": "object",
|
|
@@ -364,6 +364,147 @@
|
|
|
364
364
|
"fixed_query": {}
|
|
365
365
|
}
|
|
366
366
|
},
|
|
367
|
+
{
|
|
368
|
+
"name": "bulk_pause_monitors",
|
|
369
|
+
"title": "Pause many monitors",
|
|
370
|
+
"description": "Pause up to 100 monitors in one call, all or nothing: no checks run and each open incident closes without an alert. Use it to stop monitoring a whole project or group (find ids with list_monitors and its filters); to silence alerts around a deploy, prefer create_maintenance_window. Requires a key with the write scope. monitor_ids (array of 1 to 100 distinct monitor uuids, required); one id that is not a monitor of this organization is a 404 naming it and nothing changes; a repeated id is a 422. Pausing a paused monitor is not an error. Returns monitors: the short rows after the change (the list_monitors row shape), in request order. Example: {\"monitor_ids\": [\"<id from list_monitors>\", \"<id from list_monitors>\"]}",
|
|
371
|
+
"scope": "write",
|
|
372
|
+
"input_schema": {
|
|
373
|
+
"type": "object",
|
|
374
|
+
"properties": {
|
|
375
|
+
"monitor_ids": {
|
|
376
|
+
"description": "Monitors to act on. Every id must belong to the active organization.",
|
|
377
|
+
"items": {
|
|
378
|
+
"format": "uuid",
|
|
379
|
+
"type": "string"
|
|
380
|
+
},
|
|
381
|
+
"maxItems": 100,
|
|
382
|
+
"minItems": 1,
|
|
383
|
+
"type": "array"
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
"required": [
|
|
387
|
+
"monitor_ids"
|
|
388
|
+
],
|
|
389
|
+
"additionalProperties": false
|
|
390
|
+
},
|
|
391
|
+
"operation": {
|
|
392
|
+
"method": "POST",
|
|
393
|
+
"path": "/v1/monitors/bulk/pause",
|
|
394
|
+
"path_params": [],
|
|
395
|
+
"query": [],
|
|
396
|
+
"body": true,
|
|
397
|
+
"fixed_query": {}
|
|
398
|
+
}
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"name": "bulk_resume_monitors",
|
|
402
|
+
"title": "Resume many monitors",
|
|
403
|
+
"description": "Resume up to 100 paused monitors in one call, all or nothing; each goes back to PENDING and is checked on the next tick. Requires a key with the write scope. monitor_ids (array of 1 to 100 distinct monitor uuids, required); an unknown id is a 404 naming it, a repeated id a 422. Resuming more monitors than the plan's active limit allows is a 403 and nothing changes (see get_plan_usage). A monitor that is already running is left as it is. Returns monitors: the short rows after the change (the list_monitors row shape), in request order. Example: {\"monitor_ids\": [\"<id from list_monitors>\", \"<id from list_monitors>\"]}",
|
|
404
|
+
"scope": "write",
|
|
405
|
+
"input_schema": {
|
|
406
|
+
"type": "object",
|
|
407
|
+
"properties": {
|
|
408
|
+
"monitor_ids": {
|
|
409
|
+
"description": "Monitors to act on. Every id must belong to the active organization.",
|
|
410
|
+
"items": {
|
|
411
|
+
"format": "uuid",
|
|
412
|
+
"type": "string"
|
|
413
|
+
},
|
|
414
|
+
"maxItems": 100,
|
|
415
|
+
"minItems": 1,
|
|
416
|
+
"type": "array"
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
"required": [
|
|
420
|
+
"monitor_ids"
|
|
421
|
+
],
|
|
422
|
+
"additionalProperties": false
|
|
423
|
+
},
|
|
424
|
+
"operation": {
|
|
425
|
+
"method": "POST",
|
|
426
|
+
"path": "/v1/monitors/bulk/resume",
|
|
427
|
+
"path_params": [],
|
|
428
|
+
"query": [],
|
|
429
|
+
"body": true,
|
|
430
|
+
"fixed_query": {}
|
|
431
|
+
}
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
"name": "bulk_update_monitors",
|
|
435
|
+
"title": "Change settings of many monitors",
|
|
436
|
+
"description": "Set the same values on up to 100 monitors in one call, all or nothing, for example move twenty PING monitors to other regions or a slower interval. Requires a key with the write scope. monitor_ids (array of 1 to 100 distinct monitor uuids, required; an unknown id is a 404 naming it, a repeated id a 422). changes (object, required) holds one or more of: interval_seconds (30 to 86400), timeout_seconds (1 to 120), regions (list of region codes; see list_regions), channel_ids (array of channel uuids from list_channels; replaces each monitor's binding, [] clears it, an unknown channel is a 404), confirmation_threshold (1 to 10) and notification_cooldown_seconds (60 to 86400). Omit a field to keep it; never send null. config, name and tags are not here: use update_monitor or bulk_update_monitor_tags. The plan's rules apply to the result: an interval below the plan minimum, too many fast-interval monitors, more regions than allowed or an unknown region is a 403. A value one monitor cannot take (an SSL or DNS monitor with more than one region; a port-list TCP monitor with several regions or an interval under 300) is a 422 that starts with monitors[<i>] (\"<name>\"). Returns monitors: short rows (id, name, type, target, status, is_active, tags, interval_seconds, ssl_expires_at, last_checked_at), so they show the interval but not the other changed settings; get_monitor gives a monitor's full settings. Example: {\"monitor_ids\": [\"<id from list_monitors>\", \"<id from list_monitors>\"], \"changes\": {\"regions\": [\"eu-central\", \"us-east\"], \"interval_seconds\": 300}}",
|
|
437
|
+
"scope": "write",
|
|
438
|
+
"input_schema": {
|
|
439
|
+
"type": "object",
|
|
440
|
+
"properties": {
|
|
441
|
+
"monitor_ids": {
|
|
442
|
+
"description": "Monitors to act on. Every id must belong to the active organization.",
|
|
443
|
+
"items": {
|
|
444
|
+
"format": "uuid",
|
|
445
|
+
"type": "string"
|
|
446
|
+
},
|
|
447
|
+
"maxItems": 100,
|
|
448
|
+
"minItems": 1,
|
|
449
|
+
"type": "array"
|
|
450
|
+
},
|
|
451
|
+
"changes": {
|
|
452
|
+
"additionalProperties": false,
|
|
453
|
+
"minProperties": 1,
|
|
454
|
+
"properties": {
|
|
455
|
+
"interval_seconds": {
|
|
456
|
+
"maximum": 86400,
|
|
457
|
+
"minimum": 30,
|
|
458
|
+
"type": "integer"
|
|
459
|
+
},
|
|
460
|
+
"timeout_seconds": {
|
|
461
|
+
"maximum": 120,
|
|
462
|
+
"minimum": 1,
|
|
463
|
+
"type": "integer"
|
|
464
|
+
},
|
|
465
|
+
"regions": {
|
|
466
|
+
"items": {
|
|
467
|
+
"type": "string"
|
|
468
|
+
},
|
|
469
|
+
"minItems": 1,
|
|
470
|
+
"type": "array"
|
|
471
|
+
},
|
|
472
|
+
"channel_ids": {
|
|
473
|
+
"items": {
|
|
474
|
+
"format": "uuid",
|
|
475
|
+
"type": "string"
|
|
476
|
+
},
|
|
477
|
+
"type": "array"
|
|
478
|
+
},
|
|
479
|
+
"confirmation_threshold": {
|
|
480
|
+
"maximum": 10,
|
|
481
|
+
"minimum": 1,
|
|
482
|
+
"type": "integer"
|
|
483
|
+
},
|
|
484
|
+
"notification_cooldown_seconds": {
|
|
485
|
+
"maximum": 86400,
|
|
486
|
+
"minimum": 60,
|
|
487
|
+
"type": "integer"
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
"type": "object"
|
|
491
|
+
}
|
|
492
|
+
},
|
|
493
|
+
"required": [
|
|
494
|
+
"monitor_ids",
|
|
495
|
+
"changes"
|
|
496
|
+
],
|
|
497
|
+
"additionalProperties": false
|
|
498
|
+
},
|
|
499
|
+
"operation": {
|
|
500
|
+
"method": "PATCH",
|
|
501
|
+
"path": "/v1/monitors/bulk",
|
|
502
|
+
"path_params": [],
|
|
503
|
+
"query": [],
|
|
504
|
+
"body": true,
|
|
505
|
+
"fixed_query": {}
|
|
506
|
+
}
|
|
507
|
+
},
|
|
367
508
|
{
|
|
368
509
|
"name": "get_exposed_ports_preset",
|
|
369
510
|
"title": "Get the exposed-ports preset",
|
|
@@ -387,7 +528,7 @@
|
|
|
387
528
|
{
|
|
388
529
|
"name": "update_monitor",
|
|
389
530
|
"title": "Update a monitor",
|
|
390
|
-
"description": "Change an existing monitor's settings and return it (the get_monitor shape); its type and target cannot change (sending either is a 422). Requires a key with the write scope. monitor_id (uuid, required) is the monitor's id from list_monitors; an id that is not a monitor of this organization (or a deleted one) is a 404. Every other field is optional: name (1 to 255 characters), interval_seconds, timeout_seconds, regions, config, confirmation_threshold, notification_cooldown_seconds, channel_ids, badge_enabled and tags. Only the fields you pass are modified: omit a field to leave it unchanged, and never send null. At least one field besides monitor_id is required (422 otherwise). config is the exception to partial updates: passing it replaces the monitor's entire config, not just the keys you include — any field of that type's schema you leave out is reset to its default. Passing only port on a TCP monitor whose expected_state is closed silently resets expected_state to open unless you include it too. config is a JSON object whose shape depends on type. HTTP takes method (GET, HEAD, POST, PUT, PATCH or DELETE, any case; default GET), expected_status_codes (a non-empty list of codes 100 to 599, default [200]), keyword (case-sensitive substring the response body must contain, at most 1024 characters; not allowed with HEAD), follow_redirects (default true), verify_ssl (default true; false skips TLS verification, which also means that monitor can no longer report a TLS_INVALID failure), request_headers (an object of header name to value: at most 20 headers; a name is at most 128 characters of letters, digits and ! # $ % & ' * + - . ^ _ ` | ~; a value is at most 1024 bytes of printable ASCII, space or tab; the whole object at most 8192 bytes as JSON; two names differing only in case, and the reserved names Host, Content-Length, Transfer-Encoding, Connection, Upgrade, TE, Trailer, Keep-Alive, CF-Connecting-IP and any Proxy-* name, are a 422) and request_body (a string of at most 8192 bytes as UTF-8; requires POST, PUT, PATCH or DELETE), all optional. Reads never return request_header values: each one comes back as the literal __FETTLE_UNCHANGED__, and writing that value back in an update keeps the stored header unchanged (on create it is a 422). PING takes packet_count (1 to 20, default 4), optional. SSL takes warn_before_days (1 to 365, default 14) and port (1 to 65535, default 443), both optional. TCP takes either port (one port, 1 to 65535, expected_state \"open\" by default or \"closed\") or ports — a list of 1 to 20 distinct ports that must all be closed: ports requires expected_state \"closed\", exactly one region and interval_seconds of at least 300, and a check fails when any listed port accepts a connection (the monitor goes DOWN once confirmation_threshold failures confirm it). Passing both port and ports, or neither, is a 422. expected_state values are lowercase. DNS requires record_type (A, AAAA, CNAME, MX, TXT or NS; no default) and takes optional expected_value (at most 2048 characters): when set, one answer must equal it (case-insensitive, ignoring surrounding spaces and a trailing dot; exact for TXT); when absent, any answer passes. For MX the answers are the mail host names only, without priority (mail.example.com, not 10 mail.example.com). A and AAAA both look up every address of the host, IPv4 and IPv6 alike, and any one of them may match; write an IPv6 address in its shortest form. The ports rules above are checked against the monitor after the change, so changing only the interval or the regions of a ports monitor can be rejected too. A monitor that checks a list of ports cannot switch to a single port (422): create a new monitor instead. regions is a list of one or more distinct region codes (get_plan_usage lists them in limits.allowed_regions, for example eu-central; an unknown code is a 403) — SSL and DNS monitors must target exactly one region (422 otherwise). interval_seconds (integer, 30 to 86400) is the time between checks; timeout_seconds (integer, 1 to 120) is how long one check may take. confirmation_threshold (integer, 1 to 10; 3 when not set on create) is how many checks in a row must fail in every region before the monitor goes DOWN and an incident opens. notification_cooldown_seconds (integer, 60 to 86400; 1800 when not set on create) only holds back a duplicate first alert for the same incident within that window. Repeat reminders while the incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (see get_plan_usage; 0 means no reminders), not this value; it never holds back the recovery alert. Plan limits apply: minimum interval_seconds, how many monitors may use an interval below 60 seconds (only moving a monitor from 60 seconds or more to below 60 takes a slot), and max_regions per monitor. Breaking one is a 403 that names the limit. get_plan_usage shows the limits and current usage. Use pause_monitor and resume_monitor, not this tool, to stop or restart checks. channel_ids (array of channel uuids), when passed, replaces the whole binding; an empty list clears it, after which every verified, active channel is alerted; omit it to leave the binding unchanged; an id that is not an active channel of this organization is a 404. badge_enabled (boolean) turns the monitor's public status badge on or off; a monitor on a published status page has a badge even when it is false. tags, when passed, replaces the monitor's whole tag list (at most 10); pass an empty list to clear it. Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Example: {\"monitor_id\": \"<id from list_monitors>\", \"interval_seconds\": 600}",
|
|
531
|
+
"description": "Change an existing monitor's settings and return it (the get_monitor shape); its type and target cannot change (sending either is a 422). Requires a key with the write scope. monitor_id (uuid, required) is the monitor's id from list_monitors; an id that is not a monitor of this organization (or a deleted one) is a 404. Every other field is optional: name (1 to 255 characters), interval_seconds, timeout_seconds, regions, config, confirmation_threshold, notification_cooldown_seconds, channel_ids, badge_enabled and tags. Only the fields you pass are modified: omit a field to leave it unchanged, and never send null. At least one field besides monitor_id is required (422 otherwise). config is the exception to partial updates: passing it replaces the monitor's entire config, not just the keys you include — any field of that type's schema you leave out is reset to its default. Passing only port on a TCP monitor whose expected_state is closed silently resets expected_state to open unless you include it too. config is a JSON object whose shape depends on type. HTTP takes method (GET, HEAD, POST, PUT, PATCH or DELETE, any case; default GET), expected_status_codes (a non-empty list of codes 100 to 599, default [200]), keyword (case-sensitive substring the response body must contain, at most 1024 characters; not allowed with HEAD), follow_redirects (default true), verify_ssl (default true; false skips TLS verification, which also means that monitor can no longer report a TLS_INVALID failure), request_headers (an object of header name to value: at most 20 headers; a name is at most 128 characters of letters, digits and ! # $ % & ' * + - . ^ _ ` | ~; a value is at most 1024 bytes of printable ASCII, space or tab; the whole object at most 8192 bytes as JSON; two names differing only in case, and the reserved names Host, Content-Length, Transfer-Encoding, Connection, Upgrade, TE, Trailer, Keep-Alive, CF-Connecting-IP and any Proxy-* name, are a 422) and request_body (a string of at most 8192 bytes as UTF-8; requires POST, PUT, PATCH or DELETE), all optional. Reads never return request_header values: each one comes back as the literal __FETTLE_UNCHANGED__, and writing that value back in an update keeps the stored header unchanged (on create it is a 422). PING takes packet_count (1 to 20, default 4), optional. SSL takes warn_before_days (1 to 365, default 14) and port (1 to 65535, default 443), both optional. TCP takes either port (one port, 1 to 65535, expected_state \"open\" by default or \"closed\") or ports — a list of 1 to 20 distinct ports that must all be closed: ports requires expected_state \"closed\", exactly one region and interval_seconds of at least 300, and a check fails when any listed port accepts a connection (the monitor goes DOWN once confirmation_threshold failures confirm it). Passing both port and ports, or neither, is a 422. expected_state values are lowercase. DNS requires record_type (A, AAAA, CNAME, MX, TXT or NS; no default) and takes optional expected_value (at most 2048 characters): when set, one answer must equal it (case-insensitive, ignoring surrounding spaces and a trailing dot; exact for TXT); when absent, any answer passes. For MX the answers are the mail host names only, without priority (mail.example.com, not 10 mail.example.com). A and AAAA both look up every address of the host, IPv4 and IPv6 alike, and any one of them may match; write an IPv6 address in its shortest form. The ports rules above are checked against the monitor after the change, so changing only the interval or the regions of a ports monitor can be rejected too. A monitor that checks a list of ports cannot switch to a single port (422): create a new monitor instead. regions is a list of one or more distinct region codes (get_plan_usage lists them in limits.allowed_regions, for example eu-central; an unknown code is a 403) — SSL and DNS monitors must target exactly one region (422 otherwise). interval_seconds (integer, 30 to 86400) is the time between checks; timeout_seconds (integer, 1 to 120) is how long one check may take. confirmation_threshold (integer, 1 to 10; 3 when not set on create) is how many checks in a row must fail in every region before the monitor goes DOWN and an incident opens. notification_cooldown_seconds (integer, 60 to 86400; 1800 when not set on create) only holds back a duplicate first alert for the same incident within that window. Repeat reminders while the incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (see get_plan_usage; 0 means no reminders), not this value; it never holds back the recovery alert. Plan limits apply: minimum interval_seconds, how many monitors may use an interval below 60 seconds (only moving a monitor from 60 seconds or more to below 60 takes a slot), and max_regions per monitor. Breaking one is a 403 that names the limit. get_plan_usage shows the limits and current usage. Use pause_monitor and resume_monitor, not this tool, to stop or restart checks. channel_ids (array of channel uuids), when passed, replaces the whole binding; an empty list clears it, after which every verified, active channel is alerted; omit it to leave the binding unchanged; an id that is not an active channel of this organization is a 404; list_channels gives the ids. badge_enabled (boolean) turns the monitor's public status badge on or off; a monitor on a published status page has a badge even when it is false. tags, when passed, replaces the monitor's whole tag list (at most 10); pass an empty list to clear it. Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Example: {\"monitor_id\": \"<id from list_monitors>\", \"interval_seconds\": 600}",
|
|
391
532
|
"scope": "write",
|
|
392
533
|
"input_schema": {
|
|
393
534
|
"type": "object",
|
|
@@ -584,7 +725,7 @@
|
|
|
584
725
|
{
|
|
585
726
|
"name": "bulk_update_monitor_tags",
|
|
586
727
|
"title": "Retag several monitors at once",
|
|
587
|
-
"description": "Add and/or remove tags across up to 300 monitors in one call — the way to retag a whole fleet without one request per monitor. monitor_ids (array of 1 to 300 distinct monitor uuids, required; a repeated id is a 422) names the monitors; every one must belong to the organization: an unknown id rejects the whole request with a 404 naming every id it could not find. add and remove (arrays of up to 10 tags each, optional) apply as (current tags | add) - remove per monitor. A tag listed in both add and remove is rejected with a 422, not silently resolved — the two lists must be disjoint. At least one of add or remove is required. A monitor that would end up with more than 10 tags rejects the whole request (422); nothing is changed when any check fails. Returns monitors_updated. Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Requires a key with the write scope.",
|
|
728
|
+
"description": "Add and/or remove tags across up to 300 monitors in one call — the way to retag a whole fleet without one request per monitor. monitor_ids (array of 1 to 300 distinct monitor uuids, required; a repeated id is a 422) names the monitors; every one must belong to the organization: an unknown id rejects the whole request with a 404 naming every id it could not find. add and remove (arrays of up to 10 tags each, optional) apply as (current tags | add) - remove per monitor. A tag listed in both add and remove is rejected with a 422, not silently resolved — the two lists must be disjoint. At least one of add or remove is required. A monitor that would end up with more than 10 tags rejects the whole request (422); nothing is changed when any check fails. Returns monitors_updated. Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Requires a key with the write scope. Example: {\"monitor_ids\": [\"<id from list_monitors>\", \"<id from list_monitors>\"], \"add\": [\"env:prod\"], \"remove\": [\"env:staging\"]}",
|
|
588
729
|
"scope": "write",
|
|
589
730
|
"input_schema": {
|
|
590
731
|
"type": "object",
|
|
@@ -785,7 +926,7 @@
|
|
|
785
926
|
{
|
|
786
927
|
"name": "list_heartbeats",
|
|
787
928
|
"title": "List heartbeat monitors",
|
|
788
|
-
"description": "List heartbeat (cron / dead-man's-switch) monitors: each with id, name, state (PENDING, UP, DOWN or PAUSED; a new heartbeat is PENDING until a successful ping makes it UP or a /fail ping makes it DOWN), period_seconds, grace_seconds, ping_url, last_ping_at, last_success_at, overdue_at, tags and channel_ids. The result is a page: items plus total, page, size and pages. All arguments are optional. page (integer, 1 or more, default 1) and size (integer, 1 to 100, default 25) select the page. q (string, up to 255 characters) matches a case-insensitive substring of the name. sort is status (the default: DOWN, then PENDING, then UP, then PAUSED, newest first within each), name (alphabetical) or created_at (newest first). tag takes a JSON array of up to 10 tags, lowercased before matching
|
|
929
|
+
"description": "List heartbeat (cron / dead-man's-switch) monitors: each with id, name, state (PENDING, UP, DOWN or PAUSED; a new heartbeat is PENDING until a successful ping makes it UP or a /fail ping makes it DOWN), period_seconds, grace_seconds, ping_url, last_ping_at, last_success_at, overdue_at, tags and channel_ids. The result is a page: items plus total, page, size and pages. All arguments are optional. page (integer, 1 or more, default 1) and size (integer, 1 to 100, default 25) select the page. q (string, up to 255 characters) matches a case-insensitive substring of the name. sort is status (the default: DOWN, then PENDING, then UP, then PAUSED, newest first within each), name (alphabetical) or created_at (newest first). tag takes a JSON array of up to 10 tags, lowercased before matching; with tag_match all (the default) a heartbeat must carry every tag given, with tag_match any at least one.",
|
|
789
930
|
"scope": "read",
|
|
790
931
|
"input_schema": {
|
|
791
932
|
"type": "object",
|
|
@@ -818,6 +959,13 @@
|
|
|
818
959
|
},
|
|
819
960
|
"maxItems": 10,
|
|
820
961
|
"type": "array"
|
|
962
|
+
},
|
|
963
|
+
"tag_match": {
|
|
964
|
+
"enum": [
|
|
965
|
+
"all",
|
|
966
|
+
"any"
|
|
967
|
+
],
|
|
968
|
+
"type": "string"
|
|
821
969
|
}
|
|
822
970
|
},
|
|
823
971
|
"required": [],
|
|
@@ -832,7 +980,8 @@
|
|
|
832
980
|
"size",
|
|
833
981
|
"q",
|
|
834
982
|
"sort",
|
|
835
|
-
"tag"
|
|
983
|
+
"tag",
|
|
984
|
+
"tag_match"
|
|
836
985
|
],
|
|
837
986
|
"body": false,
|
|
838
987
|
"fixed_query": {}
|
|
@@ -841,7 +990,7 @@
|
|
|
841
990
|
{
|
|
842
991
|
"name": "create_heartbeat",
|
|
843
992
|
"title": "Create a heartbeat monitor",
|
|
844
|
-
"description": "Create a heartbeat monitor and get back ping_url, the URL a scheduled job should call (GET or POST) each time it succeeds. Requires a key with the write scope; the plan caps how many heartbeats an organization may have (403 past it, see get_plan_usage). Required: name (1 to 255 characters), period_seconds and grace_seconds. It is never reported late before its first successful ping (a /fail call still marks it DOWN). After that, an alert fires period_seconds + grace_seconds after the last ping (a success ping, or a call to ping_url + \"/start\" when the job begins, restarts that clock; ping_url + \"/fail\" marks it DOWN at once). To ping every N seconds and be alerted after T seconds of silence, set period_seconds = N and grace_seconds = T - N (T at least N; period_seconds 60 to 2592000, grace_seconds 0 to 2592000, and grace may exceed the period). notification_cooldown_seconds (integer, 60 to 86400, optional; 1800 when omitted) only holds back a duplicate first alert for the same incident within that window. Repeat reminders while the incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (see get_plan_usage; 0 means no reminders), not this value; the recovery alert is never held back by it. channel_ids (array of channel uuids, optional) binds notification channels; omit it or pass an empty list to alert every verified, active channel; an id that is not an active channel of this organization is a 404. tags is an optional list of flat labels (for example env:prod, service:api) used to group and filter heartbeats, at most 10 per heartbeat. Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Other errors: 422 for an invalid argument, naming it. Example: {\"name\": \"nightly backup\", \"period_seconds\": 86400, \"grace_seconds\": 3600}",
|
|
993
|
+
"description": "Create a heartbeat monitor and get back ping_url, the URL a scheduled job should call (GET or POST) each time it succeeds. Requires a key with the write scope; the plan caps how many heartbeats an organization may have (403 past it, see get_plan_usage). Required: name (1 to 255 characters), period_seconds and grace_seconds. It is never reported late before its first successful ping (a /fail call still marks it DOWN). After that, an alert fires period_seconds + grace_seconds after the last ping (a success ping, or a call to ping_url + \"/start\" when the job begins, restarts that clock; ping_url + \"/fail\" marks it DOWN at once). To ping every N seconds and be alerted after T seconds of silence, set period_seconds = N and grace_seconds = T - N (T at least N; period_seconds 60 to 2592000, grace_seconds 0 to 2592000, and grace may exceed the period). notification_cooldown_seconds (integer, 60 to 86400, optional; 1800 when omitted) only holds back a duplicate first alert for the same incident within that window. Repeat reminders while the incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (see get_plan_usage; 0 means no reminders), not this value; the recovery alert is never held back by it. channel_ids (array of channel uuids, optional) binds notification channels; omit it or pass an empty list to alert every verified, active channel; an id that is not an active channel of this organization is a 404; list_channels gives the ids. tags is an optional list of flat labels (for example env:prod, service:api) used to group and filter heartbeats, at most 10 per heartbeat. Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Other errors: 422 for an invalid argument, naming it. Example: {\"name\": \"nightly backup\", \"period_seconds\": 86400, \"grace_seconds\": 3600}",
|
|
845
994
|
"scope": "write",
|
|
846
995
|
"input_schema": {
|
|
847
996
|
"type": "object",
|
|
@@ -897,9 +1046,485 @@
|
|
|
897
1046
|
}
|
|
898
1047
|
},
|
|
899
1048
|
{
|
|
900
|
-
"name": "
|
|
901
|
-
"title": "
|
|
902
|
-
"description": "
|
|
1049
|
+
"name": "get_heartbeat",
|
|
1050
|
+
"title": "Get a heartbeat monitor",
|
|
1051
|
+
"description": "Return one heartbeat: name, state, period_seconds, grace_seconds, ping_url, last_ping_at, last_success_at, last_start_at, last_duration_ms, overdue_at (when it will be reported late), notification_cooldown_seconds, is_active, channel_ids and tags. heartbeat_id (uuid, required) is the heartbeat's id from list_heartbeats; an id that is not a heartbeat of this organization (or a deleted one) is a 404.",
|
|
1052
|
+
"scope": "read",
|
|
1053
|
+
"input_schema": {
|
|
1054
|
+
"type": "object",
|
|
1055
|
+
"properties": {
|
|
1056
|
+
"heartbeat_id": {
|
|
1057
|
+
"format": "uuid",
|
|
1058
|
+
"type": "string"
|
|
1059
|
+
}
|
|
1060
|
+
},
|
|
1061
|
+
"required": [
|
|
1062
|
+
"heartbeat_id"
|
|
1063
|
+
],
|
|
1064
|
+
"additionalProperties": false
|
|
1065
|
+
},
|
|
1066
|
+
"operation": {
|
|
1067
|
+
"method": "GET",
|
|
1068
|
+
"path": "/v1/heartbeats/{heartbeat_id}",
|
|
1069
|
+
"path_params": [
|
|
1070
|
+
"heartbeat_id"
|
|
1071
|
+
],
|
|
1072
|
+
"query": [],
|
|
1073
|
+
"body": false,
|
|
1074
|
+
"fixed_query": {}
|
|
1075
|
+
}
|
|
1076
|
+
},
|
|
1077
|
+
{
|
|
1078
|
+
"name": "update_heartbeat",
|
|
1079
|
+
"title": "Update a heartbeat monitor",
|
|
1080
|
+
"description": "Change a heartbeat; only the fields you pass change (omit a field to keep it). Requires a key with the write scope. heartbeat_id (uuid, required) is the heartbeat's id from list_heartbeats; an id that is not a heartbeat of this organization (or a deleted one) is a 404. name (1 to 255 characters). period_seconds (60 to 2592000) and grace_seconds (0 to 2592000): an alert fires period_seconds + grace_seconds after the last ping. A new period or grace applies from the next ping; the current deadline (overdue_at) is not recomputed. notification_cooldown_seconds (60 to 86400) only holds back a duplicate first alert. channel_ids (array of channel uuids) replaces the binding; [] clears it, which alerts every verified, active channel; an id that is not an active channel of this organization is a 404 (list_channels gives the ids). tags replaces the whole tag list, at most 10; [] clears it. Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Other errors: 422 for an invalid argument, naming it. Returns the heartbeat. Example: {\"heartbeat_id\": \"<id from list_heartbeats>\", \"grace_seconds\": 7200}",
|
|
1081
|
+
"scope": "write",
|
|
1082
|
+
"input_schema": {
|
|
1083
|
+
"type": "object",
|
|
1084
|
+
"properties": {
|
|
1085
|
+
"heartbeat_id": {
|
|
1086
|
+
"format": "uuid",
|
|
1087
|
+
"type": "string"
|
|
1088
|
+
},
|
|
1089
|
+
"name": {
|
|
1090
|
+
"maxLength": 255,
|
|
1091
|
+
"minLength": 1,
|
|
1092
|
+
"type": "string"
|
|
1093
|
+
},
|
|
1094
|
+
"period_seconds": {
|
|
1095
|
+
"maximum": 2592000,
|
|
1096
|
+
"minimum": 60,
|
|
1097
|
+
"type": "integer"
|
|
1098
|
+
},
|
|
1099
|
+
"grace_seconds": {
|
|
1100
|
+
"maximum": 2592000,
|
|
1101
|
+
"minimum": 0,
|
|
1102
|
+
"type": "integer"
|
|
1103
|
+
},
|
|
1104
|
+
"notification_cooldown_seconds": {
|
|
1105
|
+
"maximum": 86400,
|
|
1106
|
+
"minimum": 60,
|
|
1107
|
+
"type": "integer"
|
|
1108
|
+
},
|
|
1109
|
+
"channel_ids": {
|
|
1110
|
+
"items": {
|
|
1111
|
+
"format": "uuid",
|
|
1112
|
+
"type": "string"
|
|
1113
|
+
},
|
|
1114
|
+
"type": "array"
|
|
1115
|
+
},
|
|
1116
|
+
"tags": {
|
|
1117
|
+
"items": {
|
|
1118
|
+
"type": "string"
|
|
1119
|
+
},
|
|
1120
|
+
"type": "array"
|
|
1121
|
+
}
|
|
1122
|
+
},
|
|
1123
|
+
"required": [
|
|
1124
|
+
"heartbeat_id"
|
|
1125
|
+
],
|
|
1126
|
+
"additionalProperties": false
|
|
1127
|
+
},
|
|
1128
|
+
"operation": {
|
|
1129
|
+
"method": "PATCH",
|
|
1130
|
+
"path": "/v1/heartbeats/{heartbeat_id}",
|
|
1131
|
+
"path_params": [
|
|
1132
|
+
"heartbeat_id"
|
|
1133
|
+
],
|
|
1134
|
+
"query": [],
|
|
1135
|
+
"body": true,
|
|
1136
|
+
"fixed_query": {}
|
|
1137
|
+
}
|
|
1138
|
+
},
|
|
1139
|
+
{
|
|
1140
|
+
"name": "pause_heartbeat",
|
|
1141
|
+
"title": "Pause a heartbeat monitor",
|
|
1142
|
+
"description": "Pause a heartbeat: it is no longer reported late, pings to its ping_url are accepted but ignored, and its open incident closes without an alert. Use it when the job is stopped on purpose, for example a runner taken out of service. Requires a key with the write scope. heartbeat_id (uuid, required) is the heartbeat's id from list_heartbeats; an id that is not a heartbeat of this organization (or a deleted one) is a 404. Pausing a paused heartbeat succeeds without change. Returns the heartbeat.",
|
|
1143
|
+
"scope": "write",
|
|
1144
|
+
"input_schema": {
|
|
1145
|
+
"type": "object",
|
|
1146
|
+
"properties": {
|
|
1147
|
+
"heartbeat_id": {
|
|
1148
|
+
"format": "uuid",
|
|
1149
|
+
"type": "string"
|
|
1150
|
+
}
|
|
1151
|
+
},
|
|
1152
|
+
"required": [
|
|
1153
|
+
"heartbeat_id"
|
|
1154
|
+
],
|
|
1155
|
+
"additionalProperties": false
|
|
1156
|
+
},
|
|
1157
|
+
"operation": {
|
|
1158
|
+
"method": "POST",
|
|
1159
|
+
"path": "/v1/heartbeats/{heartbeat_id}/pause",
|
|
1160
|
+
"path_params": [
|
|
1161
|
+
"heartbeat_id"
|
|
1162
|
+
],
|
|
1163
|
+
"query": [],
|
|
1164
|
+
"body": false,
|
|
1165
|
+
"fixed_query": {}
|
|
1166
|
+
}
|
|
1167
|
+
},
|
|
1168
|
+
{
|
|
1169
|
+
"name": "resume_heartbeat",
|
|
1170
|
+
"title": "Resume a heartbeat monitor",
|
|
1171
|
+
"description": "Resume a paused heartbeat. It goes back to PENDING with no deadline, so it is not reported late until its next successful ping restarts the clock. Resuming one that is not paused resets it to PENDING the same way. Requires a key with the write scope. heartbeat_id (uuid, required) is the heartbeat's id from list_heartbeats; an id that is not a heartbeat of this organization (or a deleted one) is a 404. Returns the heartbeat.",
|
|
1172
|
+
"scope": "write",
|
|
1173
|
+
"input_schema": {
|
|
1174
|
+
"type": "object",
|
|
1175
|
+
"properties": {
|
|
1176
|
+
"heartbeat_id": {
|
|
1177
|
+
"format": "uuid",
|
|
1178
|
+
"type": "string"
|
|
1179
|
+
}
|
|
1180
|
+
},
|
|
1181
|
+
"required": [
|
|
1182
|
+
"heartbeat_id"
|
|
1183
|
+
],
|
|
1184
|
+
"additionalProperties": false
|
|
1185
|
+
},
|
|
1186
|
+
"operation": {
|
|
1187
|
+
"method": "POST",
|
|
1188
|
+
"path": "/v1/heartbeats/{heartbeat_id}/resume",
|
|
1189
|
+
"path_params": [
|
|
1190
|
+
"heartbeat_id"
|
|
1191
|
+
],
|
|
1192
|
+
"query": [],
|
|
1193
|
+
"body": false,
|
|
1194
|
+
"fixed_query": {}
|
|
1195
|
+
}
|
|
1196
|
+
},
|
|
1197
|
+
{
|
|
1198
|
+
"name": "delete_heartbeat",
|
|
1199
|
+
"title": "Delete a heartbeat monitor",
|
|
1200
|
+
"description": "Delete a heartbeat for good; its ping_url stops working (404). This cannot be undone — to stop alerts for a while, use pause_heartbeat instead. Requires a key with the write scope. heartbeat_id (uuid, required) is the heartbeat's id from list_heartbeats; an id that is not a heartbeat of this organization (or a deleted one) is a 404.",
|
|
1201
|
+
"scope": "write",
|
|
1202
|
+
"input_schema": {
|
|
1203
|
+
"type": "object",
|
|
1204
|
+
"properties": {
|
|
1205
|
+
"heartbeat_id": {
|
|
1206
|
+
"format": "uuid",
|
|
1207
|
+
"type": "string"
|
|
1208
|
+
}
|
|
1209
|
+
},
|
|
1210
|
+
"required": [
|
|
1211
|
+
"heartbeat_id"
|
|
1212
|
+
],
|
|
1213
|
+
"additionalProperties": false
|
|
1214
|
+
},
|
|
1215
|
+
"operation": {
|
|
1216
|
+
"method": "DELETE",
|
|
1217
|
+
"path": "/v1/heartbeats/{heartbeat_id}",
|
|
1218
|
+
"path_params": [
|
|
1219
|
+
"heartbeat_id"
|
|
1220
|
+
],
|
|
1221
|
+
"query": [],
|
|
1222
|
+
"body": false,
|
|
1223
|
+
"fixed_query": {}
|
|
1224
|
+
}
|
|
1225
|
+
},
|
|
1226
|
+
{
|
|
1227
|
+
"name": "list_maintenance_windows",
|
|
1228
|
+
"title": "List maintenance windows",
|
|
1229
|
+
"description": "List the organization's maintenance windows: each with id, name, enabled, scope (ORG or MONITOR), dtstart, duration_minutes, rrule, timezone, monitor_ids, created_at and next_occurrences (always empty here; get_maintenance_window fills it). The result is a page: items plus total, page, size and pages. All arguments are optional. page (integer, 1 or more, default 1) and size (integer, 1 to 100, default 25) select the page. q (string, up to 255 characters) matches a case-insensitive substring of the name. sort is created_at (the default, newest first) or name (alphabetical).",
|
|
1230
|
+
"scope": "read",
|
|
1231
|
+
"input_schema": {
|
|
1232
|
+
"type": "object",
|
|
1233
|
+
"properties": {
|
|
1234
|
+
"page": {
|
|
1235
|
+
"minimum": 1,
|
|
1236
|
+
"type": "integer"
|
|
1237
|
+
},
|
|
1238
|
+
"size": {
|
|
1239
|
+
"maximum": 100,
|
|
1240
|
+
"minimum": 1,
|
|
1241
|
+
"type": "integer"
|
|
1242
|
+
},
|
|
1243
|
+
"q": {
|
|
1244
|
+
"maxLength": 255,
|
|
1245
|
+
"type": "string"
|
|
1246
|
+
},
|
|
1247
|
+
"sort": {
|
|
1248
|
+
"enum": [
|
|
1249
|
+
"name",
|
|
1250
|
+
"created_at"
|
|
1251
|
+
],
|
|
1252
|
+
"type": "string"
|
|
1253
|
+
}
|
|
1254
|
+
},
|
|
1255
|
+
"required": [],
|
|
1256
|
+
"additionalProperties": false
|
|
1257
|
+
},
|
|
1258
|
+
"operation": {
|
|
1259
|
+
"method": "GET",
|
|
1260
|
+
"path": "/v1/maintenance-windows",
|
|
1261
|
+
"path_params": [],
|
|
1262
|
+
"query": [
|
|
1263
|
+
"page",
|
|
1264
|
+
"size",
|
|
1265
|
+
"q",
|
|
1266
|
+
"sort"
|
|
1267
|
+
],
|
|
1268
|
+
"body": false,
|
|
1269
|
+
"fixed_query": {}
|
|
1270
|
+
}
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
"name": "list_active_maintenance",
|
|
1274
|
+
"title": "List maintenance windows in effect now",
|
|
1275
|
+
"description": "List the enabled maintenance windows that are in effect right now, as a plain array (not a page) of the list_maintenance_windows shape. Use it to tell whether alerts are silenced at the moment; an ORG-scope window covers every monitor. No arguments.",
|
|
1276
|
+
"scope": "read",
|
|
1277
|
+
"input_schema": {
|
|
1278
|
+
"type": "object",
|
|
1279
|
+
"properties": {},
|
|
1280
|
+
"required": [],
|
|
1281
|
+
"additionalProperties": false
|
|
1282
|
+
},
|
|
1283
|
+
"operation": {
|
|
1284
|
+
"method": "GET",
|
|
1285
|
+
"path": "/v1/maintenance-windows/active",
|
|
1286
|
+
"path_params": [],
|
|
1287
|
+
"query": [],
|
|
1288
|
+
"body": false,
|
|
1289
|
+
"fixed_query": {}
|
|
1290
|
+
}
|
|
1291
|
+
},
|
|
1292
|
+
{
|
|
1293
|
+
"name": "get_maintenance_window",
|
|
1294
|
+
"title": "Get a maintenance window",
|
|
1295
|
+
"description": "Return one maintenance window, in the list_maintenance_windows shape, with next_occurrences filled in (the next three, each with start and end). window_id (uuid, required) is the window's id from list_maintenance_windows; an id that is not a window of this organization is a 404.",
|
|
1296
|
+
"scope": "read",
|
|
1297
|
+
"input_schema": {
|
|
1298
|
+
"type": "object",
|
|
1299
|
+
"properties": {
|
|
1300
|
+
"window_id": {
|
|
1301
|
+
"format": "uuid",
|
|
1302
|
+
"type": "string"
|
|
1303
|
+
}
|
|
1304
|
+
},
|
|
1305
|
+
"required": [
|
|
1306
|
+
"window_id"
|
|
1307
|
+
],
|
|
1308
|
+
"additionalProperties": false
|
|
1309
|
+
},
|
|
1310
|
+
"operation": {
|
|
1311
|
+
"method": "GET",
|
|
1312
|
+
"path": "/v1/maintenance-windows/{window_id}",
|
|
1313
|
+
"path_params": [
|
|
1314
|
+
"window_id"
|
|
1315
|
+
],
|
|
1316
|
+
"query": [],
|
|
1317
|
+
"body": false,
|
|
1318
|
+
"fixed_query": {}
|
|
1319
|
+
}
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
"name": "create_maintenance_window",
|
|
1323
|
+
"title": "Create a maintenance window",
|
|
1324
|
+
"description": "Create a maintenance window that silences alerts for a time. Requires a key with the write scope. Required: name (1 to 255 characters), scope, dtstart and duration_minutes. enabled (boolean, default true): false stores it without effect. During a window the covered monitors keep being checked, but no incident opens and no alert goes out; use a window rather than pausing monitors around a deploy or reboot. scope is ORG (every monitor of the organization, monitor_ids ignored) or MONITOR (only monitor_ids, a list of monitor uuids from list_monitors, at least one; an id that is not a monitor of this organization is a 404). dtstart is the first start as an ISO 8601 date-time in local wall-clock time of timezone, for example 2026-10-14T22:00:00; a UTC offset or Z is a 422. duration_minutes (integer, 1 to 40320) is how long each occurrence lasts. rrule (at most 1024 characters) repeats it, as a single iCal RRULE without the RRULE: prefix, for example FREQ=WEEKLY;BYDAY=SU;BYHOUR=3; hourly, minutely and secondly frequencies are refused. timezone (IANA name such as Europe/Berlin, at most 64 characters) is the zone the schedule repeats in, so a weekly 03:00 stays 03:00 across daylight-saving changes. Call preview_maintenance_window first to check a recurring schedule. Omit rrule for a one-time window. When timezone is omitted the organization's timezone is used. The plan caps how many windows an organization may have (403 past it or when the plan has none; see max_maintenance_windows in get_plan_usage). Other errors: 422 for an invalid argument or schedule, naming it. Returns the window. Example: {\"name\": \"Deploy\", \"scope\": \"MONITOR\", \"monitor_ids\": [\"<id from list_monitors>\"], \"dtstart\": \"2026-10-14T22:00:00\", \"duration_minutes\": 30}",
|
|
1325
|
+
"scope": "write",
|
|
1326
|
+
"input_schema": {
|
|
1327
|
+
"type": "object",
|
|
1328
|
+
"properties": {
|
|
1329
|
+
"name": {
|
|
1330
|
+
"maxLength": 255,
|
|
1331
|
+
"minLength": 1,
|
|
1332
|
+
"type": "string"
|
|
1333
|
+
},
|
|
1334
|
+
"enabled": {
|
|
1335
|
+
"type": "boolean"
|
|
1336
|
+
},
|
|
1337
|
+
"scope": {
|
|
1338
|
+
"enum": [
|
|
1339
|
+
"MONITOR",
|
|
1340
|
+
"ORG"
|
|
1341
|
+
],
|
|
1342
|
+
"type": "string"
|
|
1343
|
+
},
|
|
1344
|
+
"dtstart": {
|
|
1345
|
+
"format": "date-time",
|
|
1346
|
+
"type": "string"
|
|
1347
|
+
},
|
|
1348
|
+
"duration_minutes": {
|
|
1349
|
+
"exclusiveMinimum": 0,
|
|
1350
|
+
"maximum": 40320,
|
|
1351
|
+
"type": "integer"
|
|
1352
|
+
},
|
|
1353
|
+
"rrule": {
|
|
1354
|
+
"maxLength": 1024,
|
|
1355
|
+
"type": "string"
|
|
1356
|
+
},
|
|
1357
|
+
"timezone": {
|
|
1358
|
+
"maxLength": 64,
|
|
1359
|
+
"type": "string"
|
|
1360
|
+
},
|
|
1361
|
+
"monitor_ids": {
|
|
1362
|
+
"items": {
|
|
1363
|
+
"format": "uuid",
|
|
1364
|
+
"type": "string"
|
|
1365
|
+
},
|
|
1366
|
+
"type": "array"
|
|
1367
|
+
}
|
|
1368
|
+
},
|
|
1369
|
+
"required": [
|
|
1370
|
+
"name",
|
|
1371
|
+
"scope",
|
|
1372
|
+
"dtstart",
|
|
1373
|
+
"duration_minutes"
|
|
1374
|
+
],
|
|
1375
|
+
"additionalProperties": false
|
|
1376
|
+
},
|
|
1377
|
+
"operation": {
|
|
1378
|
+
"method": "POST",
|
|
1379
|
+
"path": "/v1/maintenance-windows",
|
|
1380
|
+
"path_params": [],
|
|
1381
|
+
"query": [],
|
|
1382
|
+
"body": true,
|
|
1383
|
+
"fixed_query": {}
|
|
1384
|
+
}
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
"name": "update_maintenance_window",
|
|
1388
|
+
"title": "Update a maintenance window",
|
|
1389
|
+
"description": "Change a maintenance window; only the fields you pass change (omit a field to keep it; a recurring window cannot be turned into a one-time one — delete it and create a new one). monitor_ids replaces the list. Requires a key with the write scope. window_id (uuid, required) is the window's id from list_maintenance_windows; an id that is not a window of this organization is a 404. Fields: name, enabled, scope, dtstart, duration_minutes, rrule, timezone, monitor_ids. During a window the covered monitors keep being checked, but no incident opens and no alert goes out; use a window rather than pausing monitors around a deploy or reboot. scope is ORG (every monitor of the organization, monitor_ids ignored) or MONITOR (only monitor_ids, a list of monitor uuids from list_monitors, at least one; an id that is not a monitor of this organization is a 404). dtstart is the first start as an ISO 8601 date-time in local wall-clock time of timezone, for example 2026-10-14T22:00:00; a UTC offset or Z is a 422. duration_minutes (integer, 1 to 40320) is how long each occurrence lasts. rrule (at most 1024 characters) repeats it, as a single iCal RRULE without the RRULE: prefix, for example FREQ=WEEKLY;BYDAY=SU;BYHOUR=3; hourly, minutely and secondly frequencies are refused. timezone (IANA name such as Europe/Berlin, at most 64 characters) is the zone the schedule repeats in, so a weekly 03:00 stays 03:00 across daylight-saving changes. Call preview_maintenance_window first to check a recurring schedule. Other errors: 422 for an invalid argument, 406 for a resulting schedule that is invalid (for example a bad rrule), each with the reason. Returns the window. Example: {\"window_id\": \"<id from list_maintenance_windows>\", \"enabled\": false}",
|
|
1390
|
+
"scope": "write",
|
|
1391
|
+
"input_schema": {
|
|
1392
|
+
"type": "object",
|
|
1393
|
+
"properties": {
|
|
1394
|
+
"window_id": {
|
|
1395
|
+
"format": "uuid",
|
|
1396
|
+
"type": "string"
|
|
1397
|
+
},
|
|
1398
|
+
"name": {
|
|
1399
|
+
"maxLength": 255,
|
|
1400
|
+
"minLength": 1,
|
|
1401
|
+
"type": "string"
|
|
1402
|
+
},
|
|
1403
|
+
"enabled": {
|
|
1404
|
+
"type": "boolean"
|
|
1405
|
+
},
|
|
1406
|
+
"scope": {
|
|
1407
|
+
"enum": [
|
|
1408
|
+
"MONITOR",
|
|
1409
|
+
"ORG"
|
|
1410
|
+
],
|
|
1411
|
+
"type": "string"
|
|
1412
|
+
},
|
|
1413
|
+
"dtstart": {
|
|
1414
|
+
"format": "date-time",
|
|
1415
|
+
"type": "string"
|
|
1416
|
+
},
|
|
1417
|
+
"duration_minutes": {
|
|
1418
|
+
"exclusiveMinimum": 0,
|
|
1419
|
+
"maximum": 40320,
|
|
1420
|
+
"type": "integer"
|
|
1421
|
+
},
|
|
1422
|
+
"rrule": {
|
|
1423
|
+
"maxLength": 1024,
|
|
1424
|
+
"type": "string"
|
|
1425
|
+
},
|
|
1426
|
+
"timezone": {
|
|
1427
|
+
"maxLength": 64,
|
|
1428
|
+
"type": "string"
|
|
1429
|
+
},
|
|
1430
|
+
"monitor_ids": {
|
|
1431
|
+
"items": {
|
|
1432
|
+
"format": "uuid",
|
|
1433
|
+
"type": "string"
|
|
1434
|
+
},
|
|
1435
|
+
"type": "array"
|
|
1436
|
+
}
|
|
1437
|
+
},
|
|
1438
|
+
"required": [
|
|
1439
|
+
"window_id"
|
|
1440
|
+
],
|
|
1441
|
+
"additionalProperties": false
|
|
1442
|
+
},
|
|
1443
|
+
"operation": {
|
|
1444
|
+
"method": "PATCH",
|
|
1445
|
+
"path": "/v1/maintenance-windows/{window_id}",
|
|
1446
|
+
"path_params": [
|
|
1447
|
+
"window_id"
|
|
1448
|
+
],
|
|
1449
|
+
"query": [],
|
|
1450
|
+
"body": true,
|
|
1451
|
+
"fixed_query": {}
|
|
1452
|
+
}
|
|
1453
|
+
},
|
|
1454
|
+
{
|
|
1455
|
+
"name": "delete_maintenance_window",
|
|
1456
|
+
"title": "Delete a maintenance window",
|
|
1457
|
+
"description": "Delete a maintenance window; alerts for its monitors resume at once. This cannot be undone — to suspend it, use update_maintenance_window with enabled false. Requires a key with the write scope. window_id (uuid, required) is the window's id from list_maintenance_windows; an id that is not a window of this organization is a 404.",
|
|
1458
|
+
"scope": "write",
|
|
1459
|
+
"input_schema": {
|
|
1460
|
+
"type": "object",
|
|
1461
|
+
"properties": {
|
|
1462
|
+
"window_id": {
|
|
1463
|
+
"format": "uuid",
|
|
1464
|
+
"type": "string"
|
|
1465
|
+
}
|
|
1466
|
+
},
|
|
1467
|
+
"required": [
|
|
1468
|
+
"window_id"
|
|
1469
|
+
],
|
|
1470
|
+
"additionalProperties": false
|
|
1471
|
+
},
|
|
1472
|
+
"operation": {
|
|
1473
|
+
"method": "DELETE",
|
|
1474
|
+
"path": "/v1/maintenance-windows/{window_id}",
|
|
1475
|
+
"path_params": [
|
|
1476
|
+
"window_id"
|
|
1477
|
+
],
|
|
1478
|
+
"query": [],
|
|
1479
|
+
"body": false,
|
|
1480
|
+
"fixed_query": {}
|
|
1481
|
+
}
|
|
1482
|
+
},
|
|
1483
|
+
{
|
|
1484
|
+
"name": "preview_maintenance_window",
|
|
1485
|
+
"title": "Preview a maintenance schedule",
|
|
1486
|
+
"description": "Return the next three occurrences (start and end) a schedule would produce, without saving anything, as an array. Use it before create_maintenance_window for a recurring window. Requires a key with the write scope. Required: dtstart (ISO 8601 date-time in local wall-clock time of timezone; a UTC offset or Z is a 422) and duration_minutes (integer, 1 to 40320). rrule (single iCal RRULE without the RRULE: prefix, at most 1024 characters; hourly, minutely and secondly frequencies are refused) and timezone (IANA name, at most 64 characters; the organization's timezone when omitted). An invalid schedule is a 422 with the reason. Example: {\"dtstart\": \"2026-10-18T03:00:00\", \"duration_minutes\": 60, \"rrule\": \"FREQ=WEEKLY;BYDAY=SU\", \"timezone\": \"Europe/Berlin\"}",
|
|
1487
|
+
"scope": "write",
|
|
1488
|
+
"input_schema": {
|
|
1489
|
+
"type": "object",
|
|
1490
|
+
"properties": {
|
|
1491
|
+
"dtstart": {
|
|
1492
|
+
"format": "date-time",
|
|
1493
|
+
"type": "string"
|
|
1494
|
+
},
|
|
1495
|
+
"duration_minutes": {
|
|
1496
|
+
"exclusiveMinimum": 0,
|
|
1497
|
+
"maximum": 40320,
|
|
1498
|
+
"type": "integer"
|
|
1499
|
+
},
|
|
1500
|
+
"rrule": {
|
|
1501
|
+
"maxLength": 1024,
|
|
1502
|
+
"type": "string"
|
|
1503
|
+
},
|
|
1504
|
+
"timezone": {
|
|
1505
|
+
"maxLength": 64,
|
|
1506
|
+
"type": "string"
|
|
1507
|
+
}
|
|
1508
|
+
},
|
|
1509
|
+
"required": [
|
|
1510
|
+
"dtstart",
|
|
1511
|
+
"duration_minutes"
|
|
1512
|
+
],
|
|
1513
|
+
"additionalProperties": false
|
|
1514
|
+
},
|
|
1515
|
+
"operation": {
|
|
1516
|
+
"method": "POST",
|
|
1517
|
+
"path": "/v1/maintenance-windows/preview",
|
|
1518
|
+
"path_params": [],
|
|
1519
|
+
"query": [],
|
|
1520
|
+
"body": true,
|
|
1521
|
+
"fixed_query": {}
|
|
1522
|
+
}
|
|
1523
|
+
},
|
|
1524
|
+
{
|
|
1525
|
+
"name": "list_status_pages",
|
|
1526
|
+
"title": "List status pages",
|
|
1527
|
+
"description": "List the organization's status pages: each with id, slug, name, description, is_published (whether it is publicly visible now), history_days, created_at, groups (each with name, position and its components) and ungrouped_components (components outside any group). The result is a page: items plus total, page, size and pages. All arguments are optional. page (integer, 1 or more, default 1) and size (integer, 1 to 100, default 25) select the page. sort is created_at (the default, newest first) or name (alphabetical).",
|
|
903
1528
|
"scope": "read",
|
|
904
1529
|
"input_schema": {
|
|
905
1530
|
"type": "object",
|
|
@@ -936,6 +1561,570 @@
|
|
|
936
1561
|
"body": false,
|
|
937
1562
|
"fixed_query": {}
|
|
938
1563
|
}
|
|
1564
|
+
},
|
|
1565
|
+
{
|
|
1566
|
+
"name": "list_check_results",
|
|
1567
|
+
"title": "List a monitor's check results",
|
|
1568
|
+
"description": "List individual check results of a monitor, newest first: each with id, region, checked_at, status (UP, DEGRADED, DOWN or ERROR), response_time_ms, status_code, error_message, details and maintenance_window_id (set when the check ran inside a window). Use it to find out why a monitor is DOWN: which regions fail, with what code or error. The result is a page: items plus total, page, size and pages; total counts only the results that match the filters. monitor_id (uuid, required) is the monitor's id from list_monitors; an id that is not a monitor of this organization (or a deleted one) is a 404. All other arguments are optional. page (integer, 1 or more, default 1) and size (integer, 1 to 100, default 25) pick the page. region (string, up to 64 characters) keeps only results of that exact region code. status (UP, DEGRADED, DOWN or ERROR) keeps only that status. period_days (integer, 1 to 365) keeps only results of the last that many days; without it every stored result is eligible.",
|
|
1569
|
+
"scope": "read",
|
|
1570
|
+
"input_schema": {
|
|
1571
|
+
"type": "object",
|
|
1572
|
+
"properties": {
|
|
1573
|
+
"monitor_id": {
|
|
1574
|
+
"format": "uuid",
|
|
1575
|
+
"type": "string"
|
|
1576
|
+
},
|
|
1577
|
+
"page": {
|
|
1578
|
+
"minimum": 1,
|
|
1579
|
+
"type": "integer"
|
|
1580
|
+
},
|
|
1581
|
+
"size": {
|
|
1582
|
+
"maximum": 100,
|
|
1583
|
+
"minimum": 1,
|
|
1584
|
+
"type": "integer"
|
|
1585
|
+
},
|
|
1586
|
+
"region": {
|
|
1587
|
+
"maxLength": 64,
|
|
1588
|
+
"type": "string"
|
|
1589
|
+
},
|
|
1590
|
+
"status": {
|
|
1591
|
+
"enum": [
|
|
1592
|
+
"UP",
|
|
1593
|
+
"DEGRADED",
|
|
1594
|
+
"DOWN",
|
|
1595
|
+
"ERROR"
|
|
1596
|
+
],
|
|
1597
|
+
"type": "string"
|
|
1598
|
+
},
|
|
1599
|
+
"period_days": {
|
|
1600
|
+
"maximum": 365,
|
|
1601
|
+
"minimum": 1,
|
|
1602
|
+
"type": "integer"
|
|
1603
|
+
}
|
|
1604
|
+
},
|
|
1605
|
+
"required": [
|
|
1606
|
+
"monitor_id"
|
|
1607
|
+
],
|
|
1608
|
+
"additionalProperties": false
|
|
1609
|
+
},
|
|
1610
|
+
"operation": {
|
|
1611
|
+
"method": "GET",
|
|
1612
|
+
"path": "/v1/monitors/{monitor_id}/check-results",
|
|
1613
|
+
"path_params": [
|
|
1614
|
+
"monitor_id"
|
|
1615
|
+
],
|
|
1616
|
+
"query": [
|
|
1617
|
+
"page",
|
|
1618
|
+
"size",
|
|
1619
|
+
"region",
|
|
1620
|
+
"status",
|
|
1621
|
+
"period_days"
|
|
1622
|
+
],
|
|
1623
|
+
"body": false,
|
|
1624
|
+
"fixed_query": {}
|
|
1625
|
+
}
|
|
1626
|
+
},
|
|
1627
|
+
{
|
|
1628
|
+
"name": "get_response_time_by_region",
|
|
1629
|
+
"title": "Get a monitor's response time by region",
|
|
1630
|
+
"description": "Return a monitor's average response time over time, one series per region: monitor_id, window, bucket_seconds and regions, each with region, display_name and points. Every region the monitor is configured for has a series. points are oldest first and cover the whole window, each with bucket_start, avg_response_time_ms (null when the bucket had no successful check) and sample_count. Use it to see where a monitor is slow and since when. monitor_id (uuid, required) is the monitor's id from list_monitors; an id that is not a monitor of this organization (or a deleted one) is a 404. window (optional) is 24h (the default; 24 hourly buckets), 7d (28 six-hourly buckets) or 30d (30 daily buckets); any other value is a 422.",
|
|
1631
|
+
"scope": "read",
|
|
1632
|
+
"input_schema": {
|
|
1633
|
+
"type": "object",
|
|
1634
|
+
"properties": {
|
|
1635
|
+
"monitor_id": {
|
|
1636
|
+
"format": "uuid",
|
|
1637
|
+
"type": "string"
|
|
1638
|
+
},
|
|
1639
|
+
"window": {
|
|
1640
|
+
"enum": [
|
|
1641
|
+
"24h",
|
|
1642
|
+
"7d",
|
|
1643
|
+
"30d"
|
|
1644
|
+
],
|
|
1645
|
+
"type": "string"
|
|
1646
|
+
}
|
|
1647
|
+
},
|
|
1648
|
+
"required": [
|
|
1649
|
+
"monitor_id"
|
|
1650
|
+
],
|
|
1651
|
+
"additionalProperties": false
|
|
1652
|
+
},
|
|
1653
|
+
"operation": {
|
|
1654
|
+
"method": "GET",
|
|
1655
|
+
"path": "/v1/monitors/{monitor_id}/response-time-by-region",
|
|
1656
|
+
"path_params": [
|
|
1657
|
+
"monitor_id"
|
|
1658
|
+
],
|
|
1659
|
+
"query": [
|
|
1660
|
+
"window"
|
|
1661
|
+
],
|
|
1662
|
+
"body": false,
|
|
1663
|
+
"fixed_query": {}
|
|
1664
|
+
}
|
|
1665
|
+
},
|
|
1666
|
+
{
|
|
1667
|
+
"name": "get_uptime_daily",
|
|
1668
|
+
"title": "Get a monitor's daily uptime",
|
|
1669
|
+
"description": "Return a monitor's uptime for each UTC day, as monitor_id and days: an array ordered oldest first and ending today, one entry per day with date, uptime_percentage, total_checks, up_checks, down_checks, degraded_checks and maintenance_checks. A degraded check counts as up, and a day with no checks (or only checks inside a maintenance window) has a null uptime_percentage, not 100. Use it to find the day an outage or degradation began; get_uptime_summary gives the 24h, 7d and 30d totals. monitor_id (uuid, required) is the monitor's id from list_monitors; an id that is not a monitor of this organization (or a deleted one) is a 404. days (optional integer, 1 to 365, default 30) is how many days to return; it is capped at the plan's history retention (limits.history_retention_days in get_plan_usage), so fewer days can come back than asked for.",
|
|
1670
|
+
"scope": "read",
|
|
1671
|
+
"input_schema": {
|
|
1672
|
+
"type": "object",
|
|
1673
|
+
"properties": {
|
|
1674
|
+
"monitor_id": {
|
|
1675
|
+
"format": "uuid",
|
|
1676
|
+
"type": "string"
|
|
1677
|
+
},
|
|
1678
|
+
"days": {
|
|
1679
|
+
"maximum": 365,
|
|
1680
|
+
"minimum": 1,
|
|
1681
|
+
"type": "integer"
|
|
1682
|
+
}
|
|
1683
|
+
},
|
|
1684
|
+
"required": [
|
|
1685
|
+
"monitor_id"
|
|
1686
|
+
],
|
|
1687
|
+
"additionalProperties": false
|
|
1688
|
+
},
|
|
1689
|
+
"operation": {
|
|
1690
|
+
"method": "GET",
|
|
1691
|
+
"path": "/v1/monitors/{monitor_id}/uptime-daily",
|
|
1692
|
+
"path_params": [
|
|
1693
|
+
"monitor_id"
|
|
1694
|
+
],
|
|
1695
|
+
"query": [
|
|
1696
|
+
"days"
|
|
1697
|
+
],
|
|
1698
|
+
"body": false,
|
|
1699
|
+
"fixed_query": {}
|
|
1700
|
+
}
|
|
1701
|
+
},
|
|
1702
|
+
{
|
|
1703
|
+
"name": "get_incident",
|
|
1704
|
+
"title": "Get an incident",
|
|
1705
|
+
"description": "Return one incident: id, monitor_id or heartbeat_id (exactly one is set), started_at, resolved_at, cause, cause_detail, last_notified_at, acknowledged_at, acknowledged_by, renotify_count and notification_logs (the alert attempts: each with id, channel_type, destination, event TRIGGERED, RESOLVED or SSL_EXPIRY, sent_at, status PENDING, SENT or FAILED, and error). destination is an email address, a Telegram chat id, or for a webhook only scheme://host/… (the full URL is never returned). incident_id (uuid, required) is the incident's id from list_incidents; an id that is not an incident of this organization is a 404.",
|
|
1706
|
+
"scope": "read",
|
|
1707
|
+
"input_schema": {
|
|
1708
|
+
"type": "object",
|
|
1709
|
+
"properties": {
|
|
1710
|
+
"incident_id": {
|
|
1711
|
+
"format": "uuid",
|
|
1712
|
+
"type": "string"
|
|
1713
|
+
}
|
|
1714
|
+
},
|
|
1715
|
+
"required": [
|
|
1716
|
+
"incident_id"
|
|
1717
|
+
],
|
|
1718
|
+
"additionalProperties": false
|
|
1719
|
+
},
|
|
1720
|
+
"operation": {
|
|
1721
|
+
"method": "GET",
|
|
1722
|
+
"path": "/v1/incidents/{incident_id}",
|
|
1723
|
+
"path_params": [
|
|
1724
|
+
"incident_id"
|
|
1725
|
+
],
|
|
1726
|
+
"query": [],
|
|
1727
|
+
"body": false,
|
|
1728
|
+
"fixed_query": {}
|
|
1729
|
+
}
|
|
1730
|
+
},
|
|
1731
|
+
{
|
|
1732
|
+
"name": "rename_tag",
|
|
1733
|
+
"title": "Rename a tag everywhere",
|
|
1734
|
+
"description": "Rename a tag on every monitor and heartbeat that carries it; an item that already has the new name keeps one copy. Requires a key with the write scope. Required: from (the existing tag) and to (the new name). Tags are trimmed, lowercased and deduplicated on write, each at most 50 characters of lowercase letters, digits and : _ . / - , starting with a letter or digit. Call list_tags first to reuse the organization's existing names instead of inventing near-duplicates. Returns from, to and how many monitors_updated and heartbeats_updated changed; a tag nothing carries is not an error, both counts are 0. Example: {\"from\": \"prod\", \"to\": \"env:prod\"}",
|
|
1735
|
+
"scope": "write",
|
|
1736
|
+
"input_schema": {
|
|
1737
|
+
"type": "object",
|
|
1738
|
+
"properties": {
|
|
1739
|
+
"from": {
|
|
1740
|
+
"minLength": 1,
|
|
1741
|
+
"type": "string"
|
|
1742
|
+
},
|
|
1743
|
+
"to": {
|
|
1744
|
+
"minLength": 1,
|
|
1745
|
+
"type": "string"
|
|
1746
|
+
}
|
|
1747
|
+
},
|
|
1748
|
+
"required": [
|
|
1749
|
+
"from",
|
|
1750
|
+
"to"
|
|
1751
|
+
],
|
|
1752
|
+
"additionalProperties": false
|
|
1753
|
+
},
|
|
1754
|
+
"operation": {
|
|
1755
|
+
"method": "PATCH",
|
|
1756
|
+
"path": "/v1/tags",
|
|
1757
|
+
"path_params": [],
|
|
1758
|
+
"query": [],
|
|
1759
|
+
"body": true,
|
|
1760
|
+
"fixed_query": {}
|
|
1761
|
+
}
|
|
1762
|
+
},
|
|
1763
|
+
{
|
|
1764
|
+
"name": "delete_tag",
|
|
1765
|
+
"title": "Remove a tag everywhere",
|
|
1766
|
+
"description": "Remove a tag from every monitor and heartbeat that carries it. This cannot be undone. Requires a key with the write scope. tag (string, required) is the tag to remove, as list_tags shows it. Returns from (the tag) and how many monitors_updated and heartbeats_updated changed; a tag nothing carries is not an error, both counts are 0.",
|
|
1767
|
+
"scope": "write",
|
|
1768
|
+
"input_schema": {
|
|
1769
|
+
"type": "object",
|
|
1770
|
+
"properties": {
|
|
1771
|
+
"tag": {
|
|
1772
|
+
"minLength": 1,
|
|
1773
|
+
"type": "string"
|
|
1774
|
+
}
|
|
1775
|
+
},
|
|
1776
|
+
"required": [
|
|
1777
|
+
"tag"
|
|
1778
|
+
],
|
|
1779
|
+
"additionalProperties": false
|
|
1780
|
+
},
|
|
1781
|
+
"operation": {
|
|
1782
|
+
"method": "DELETE",
|
|
1783
|
+
"path": "/v1/tags",
|
|
1784
|
+
"path_params": [],
|
|
1785
|
+
"query": [
|
|
1786
|
+
"tag"
|
|
1787
|
+
],
|
|
1788
|
+
"body": false,
|
|
1789
|
+
"fixed_query": {}
|
|
1790
|
+
}
|
|
1791
|
+
},
|
|
1792
|
+
{
|
|
1793
|
+
"name": "get_status_page",
|
|
1794
|
+
"title": "Get a status page",
|
|
1795
|
+
"description": "Return one status page in the list_status_pages shape, including its groups and ungrouped_components; each component has an id (the component_ids of a status page incident are these), a monitor_id, display_name and position. page_id (uuid, required) is the page's id from list_status_pages; an id that is not a status page of this organization is a 404.",
|
|
1796
|
+
"scope": "read",
|
|
1797
|
+
"input_schema": {
|
|
1798
|
+
"type": "object",
|
|
1799
|
+
"properties": {
|
|
1800
|
+
"page_id": {
|
|
1801
|
+
"format": "uuid",
|
|
1802
|
+
"type": "string"
|
|
1803
|
+
}
|
|
1804
|
+
},
|
|
1805
|
+
"required": [
|
|
1806
|
+
"page_id"
|
|
1807
|
+
],
|
|
1808
|
+
"additionalProperties": false
|
|
1809
|
+
},
|
|
1810
|
+
"operation": {
|
|
1811
|
+
"method": "GET",
|
|
1812
|
+
"path": "/v1/status-pages/{page_id}",
|
|
1813
|
+
"path_params": [
|
|
1814
|
+
"page_id"
|
|
1815
|
+
],
|
|
1816
|
+
"query": [],
|
|
1817
|
+
"body": false,
|
|
1818
|
+
"fixed_query": {}
|
|
1819
|
+
}
|
|
1820
|
+
},
|
|
1821
|
+
{
|
|
1822
|
+
"name": "list_status_page_incidents",
|
|
1823
|
+
"title": "List a status page's incidents",
|
|
1824
|
+
"description": "List the incidents on a status page, newest first, both those posted by a person and those Fettle opened itself: each with id, title, status, is_auto (opened by Fettle from a monitor rather than by a person), started_at, resolved_at, notified_at (when subscribers were first emailed; null if they were not), component_ids and updates (the timeline, oldest first, each with id, status, body, created_by and created_at). The result is a page: items plus total, page, size and pages. page_id (uuid, required) is the page's id from list_status_pages; an id that is not a status page of this organization is a 404. Optional: page (integer, 1 or more, default 1) and size (integer, 1 to 100, default 25).",
|
|
1825
|
+
"scope": "read",
|
|
1826
|
+
"input_schema": {
|
|
1827
|
+
"type": "object",
|
|
1828
|
+
"properties": {
|
|
1829
|
+
"page_id": {
|
|
1830
|
+
"format": "uuid",
|
|
1831
|
+
"type": "string"
|
|
1832
|
+
},
|
|
1833
|
+
"page": {
|
|
1834
|
+
"minimum": 1,
|
|
1835
|
+
"type": "integer"
|
|
1836
|
+
},
|
|
1837
|
+
"size": {
|
|
1838
|
+
"maximum": 100,
|
|
1839
|
+
"minimum": 1,
|
|
1840
|
+
"type": "integer"
|
|
1841
|
+
}
|
|
1842
|
+
},
|
|
1843
|
+
"required": [
|
|
1844
|
+
"page_id"
|
|
1845
|
+
],
|
|
1846
|
+
"additionalProperties": false
|
|
1847
|
+
},
|
|
1848
|
+
"operation": {
|
|
1849
|
+
"method": "GET",
|
|
1850
|
+
"path": "/v1/status-pages/{page_id}/incidents",
|
|
1851
|
+
"path_params": [
|
|
1852
|
+
"page_id"
|
|
1853
|
+
],
|
|
1854
|
+
"query": [
|
|
1855
|
+
"page",
|
|
1856
|
+
"size"
|
|
1857
|
+
],
|
|
1858
|
+
"body": false,
|
|
1859
|
+
"fixed_query": {}
|
|
1860
|
+
}
|
|
1861
|
+
},
|
|
1862
|
+
{
|
|
1863
|
+
"name": "create_status_page_incident",
|
|
1864
|
+
"title": "Post an incident on a status page",
|
|
1865
|
+
"description": "Open an incident on a status page with a first message. This is public and emails the page's confirmed subscribers (details below): confirm the wording with the user before calling. Requires a key with the write scope. page_id (uuid, required) is the page's id from list_status_pages; an id that is not a status page of this organization is a 404. Required: title (1 to 255 characters) and body (the first message, 1 to 5000 characters). status is INVESTIGATING, IDENTIFIED, MONITORING or RESOLVED; RESOLVED closes the incident on the page. It defaults to INVESTIGATING. Any status but RESOLVED emails every confirmed subscriber of the page at once; RESOLVED records an already closed incident (a postmortem) and emails nobody. component_ids (optional array of component uuids from get_status_page) marks the affected components; an id that is not a component of this page is a 404. Returns the incident. Example: {\"page_id\": \"<id from list_status_pages>\", \"title\": \"API errors\", \"body\": \"We are investigating elevated error rates.\"}",
|
|
1866
|
+
"scope": "write",
|
|
1867
|
+
"input_schema": {
|
|
1868
|
+
"type": "object",
|
|
1869
|
+
"properties": {
|
|
1870
|
+
"page_id": {
|
|
1871
|
+
"format": "uuid",
|
|
1872
|
+
"type": "string"
|
|
1873
|
+
},
|
|
1874
|
+
"title": {
|
|
1875
|
+
"maxLength": 255,
|
|
1876
|
+
"minLength": 1,
|
|
1877
|
+
"type": "string"
|
|
1878
|
+
},
|
|
1879
|
+
"status": {
|
|
1880
|
+
"enum": [
|
|
1881
|
+
"INVESTIGATING",
|
|
1882
|
+
"IDENTIFIED",
|
|
1883
|
+
"MONITORING",
|
|
1884
|
+
"RESOLVED"
|
|
1885
|
+
],
|
|
1886
|
+
"type": "string"
|
|
1887
|
+
},
|
|
1888
|
+
"body": {
|
|
1889
|
+
"maxLength": 5000,
|
|
1890
|
+
"minLength": 1,
|
|
1891
|
+
"type": "string"
|
|
1892
|
+
},
|
|
1893
|
+
"component_ids": {
|
|
1894
|
+
"items": {
|
|
1895
|
+
"format": "uuid",
|
|
1896
|
+
"type": "string"
|
|
1897
|
+
},
|
|
1898
|
+
"type": "array"
|
|
1899
|
+
}
|
|
1900
|
+
},
|
|
1901
|
+
"required": [
|
|
1902
|
+
"page_id",
|
|
1903
|
+
"title",
|
|
1904
|
+
"body"
|
|
1905
|
+
],
|
|
1906
|
+
"additionalProperties": false
|
|
1907
|
+
},
|
|
1908
|
+
"operation": {
|
|
1909
|
+
"method": "POST",
|
|
1910
|
+
"path": "/v1/status-pages/{page_id}/incidents",
|
|
1911
|
+
"path_params": [
|
|
1912
|
+
"page_id"
|
|
1913
|
+
],
|
|
1914
|
+
"query": [],
|
|
1915
|
+
"body": true,
|
|
1916
|
+
"fixed_query": {}
|
|
1917
|
+
}
|
|
1918
|
+
},
|
|
1919
|
+
{
|
|
1920
|
+
"name": "post_status_page_update",
|
|
1921
|
+
"title": "Post an update to a status page incident",
|
|
1922
|
+
"description": "Add a message to a status page incident and set its status; status RESOLVED closes it. This is public and emails the page's confirmed subscribers (details below): confirm the wording with the user before calling. Requires a key with the write scope. page_id (uuid, required) is the page's id from list_status_pages; an id that is not a status page of this organization is a 404. incident_id (uuid, required) is the incident's id from list_status_page_incidents (not from list_incidents); an unknown one is a 404. Required: status and body (1 to 5000 characters). status is INVESTIGATING, IDENTIFIED, MONITORING or RESOLVED; RESOLVED closes the incident on the page. Every confirmed subscriber is emailed the update, except that an incident subscribers were never told about stays silent when this update resolves it. A resolved incident only accepts further RESOLVED updates; any other status is a 409. Returns the incident. Example: {\"page_id\": \"<id from list_status_pages>\", \"incident_id\": \"<id from list_status_page_incidents>\", \"status\": \"RESOLVED\", \"body\": \"Fixed; error rates are back to normal.\"}",
|
|
1923
|
+
"scope": "write",
|
|
1924
|
+
"input_schema": {
|
|
1925
|
+
"type": "object",
|
|
1926
|
+
"properties": {
|
|
1927
|
+
"page_id": {
|
|
1928
|
+
"format": "uuid",
|
|
1929
|
+
"type": "string"
|
|
1930
|
+
},
|
|
1931
|
+
"incident_id": {
|
|
1932
|
+
"format": "uuid",
|
|
1933
|
+
"type": "string"
|
|
1934
|
+
},
|
|
1935
|
+
"status": {
|
|
1936
|
+
"enum": [
|
|
1937
|
+
"INVESTIGATING",
|
|
1938
|
+
"IDENTIFIED",
|
|
1939
|
+
"MONITORING",
|
|
1940
|
+
"RESOLVED"
|
|
1941
|
+
],
|
|
1942
|
+
"type": "string"
|
|
1943
|
+
},
|
|
1944
|
+
"body": {
|
|
1945
|
+
"maxLength": 5000,
|
|
1946
|
+
"minLength": 1,
|
|
1947
|
+
"type": "string"
|
|
1948
|
+
}
|
|
1949
|
+
},
|
|
1950
|
+
"required": [
|
|
1951
|
+
"page_id",
|
|
1952
|
+
"incident_id",
|
|
1953
|
+
"status",
|
|
1954
|
+
"body"
|
|
1955
|
+
],
|
|
1956
|
+
"additionalProperties": false
|
|
1957
|
+
},
|
|
1958
|
+
"operation": {
|
|
1959
|
+
"method": "POST",
|
|
1960
|
+
"path": "/v1/status-pages/{page_id}/incidents/{incident_id}/updates",
|
|
1961
|
+
"path_params": [
|
|
1962
|
+
"page_id",
|
|
1963
|
+
"incident_id"
|
|
1964
|
+
],
|
|
1965
|
+
"query": [],
|
|
1966
|
+
"body": true,
|
|
1967
|
+
"fixed_query": {}
|
|
1968
|
+
}
|
|
1969
|
+
},
|
|
1970
|
+
{
|
|
1971
|
+
"name": "update_status_page_incident",
|
|
1972
|
+
"title": "Rename a status page incident",
|
|
1973
|
+
"description": "Change a status page incident's title; nothing is sent to subscribers. To change its status, use post_status_page_update. Requires a key with the write scope. page_id (uuid, required) is the page's id from list_status_pages; an id that is not a status page of this organization is a 404. incident_id (uuid, required) is from list_status_page_incidents. title (1 to 255 characters, required). Returns the incident. Example: {\"page_id\": \"<id from list_status_pages>\", \"incident_id\": \"<id from list_status_page_incidents>\", \"title\": \"API errors in eu-central\"}",
|
|
1974
|
+
"scope": "write",
|
|
1975
|
+
"input_schema": {
|
|
1976
|
+
"type": "object",
|
|
1977
|
+
"properties": {
|
|
1978
|
+
"page_id": {
|
|
1979
|
+
"format": "uuid",
|
|
1980
|
+
"type": "string"
|
|
1981
|
+
},
|
|
1982
|
+
"incident_id": {
|
|
1983
|
+
"format": "uuid",
|
|
1984
|
+
"type": "string"
|
|
1985
|
+
},
|
|
1986
|
+
"title": {
|
|
1987
|
+
"maxLength": 255,
|
|
1988
|
+
"minLength": 1,
|
|
1989
|
+
"type": "string"
|
|
1990
|
+
}
|
|
1991
|
+
},
|
|
1992
|
+
"required": [
|
|
1993
|
+
"page_id",
|
|
1994
|
+
"incident_id",
|
|
1995
|
+
"title"
|
|
1996
|
+
],
|
|
1997
|
+
"additionalProperties": false
|
|
1998
|
+
},
|
|
1999
|
+
"operation": {
|
|
2000
|
+
"method": "PATCH",
|
|
2001
|
+
"path": "/v1/status-pages/{page_id}/incidents/{incident_id}",
|
|
2002
|
+
"path_params": [
|
|
2003
|
+
"page_id",
|
|
2004
|
+
"incident_id"
|
|
2005
|
+
],
|
|
2006
|
+
"query": [],
|
|
2007
|
+
"body": true,
|
|
2008
|
+
"fixed_query": {}
|
|
2009
|
+
}
|
|
2010
|
+
},
|
|
2011
|
+
{
|
|
2012
|
+
"name": "delete_status_page_incident",
|
|
2013
|
+
"title": "Delete a status page incident",
|
|
2014
|
+
"description": "Remove an incident, with its timeline, from a status page; it stops showing at once and no tool restores it. Nothing is sent to subscribers. To close an incident instead, use post_status_page_update with RESOLVED. Requires a key with the write scope. page_id (uuid, required) is the page's id from list_status_pages; an id that is not a status page of this organization is a 404. incident_id (uuid, required) is from list_status_page_incidents.",
|
|
2015
|
+
"scope": "write",
|
|
2016
|
+
"input_schema": {
|
|
2017
|
+
"type": "object",
|
|
2018
|
+
"properties": {
|
|
2019
|
+
"page_id": {
|
|
2020
|
+
"format": "uuid",
|
|
2021
|
+
"type": "string"
|
|
2022
|
+
},
|
|
2023
|
+
"incident_id": {
|
|
2024
|
+
"format": "uuid",
|
|
2025
|
+
"type": "string"
|
|
2026
|
+
}
|
|
2027
|
+
},
|
|
2028
|
+
"required": [
|
|
2029
|
+
"page_id",
|
|
2030
|
+
"incident_id"
|
|
2031
|
+
],
|
|
2032
|
+
"additionalProperties": false
|
|
2033
|
+
},
|
|
2034
|
+
"operation": {
|
|
2035
|
+
"method": "DELETE",
|
|
2036
|
+
"path": "/v1/status-pages/{page_id}/incidents/{incident_id}",
|
|
2037
|
+
"path_params": [
|
|
2038
|
+
"page_id",
|
|
2039
|
+
"incident_id"
|
|
2040
|
+
],
|
|
2041
|
+
"query": [],
|
|
2042
|
+
"body": false,
|
|
2043
|
+
"fixed_query": {}
|
|
2044
|
+
}
|
|
2045
|
+
},
|
|
2046
|
+
{
|
|
2047
|
+
"name": "list_channels",
|
|
2048
|
+
"title": "List notification channels",
|
|
2049
|
+
"description": "List the organization's notification channels (up to 100): each with id, type (TELEGRAM, WEBHOOK, SLACK or DISCORD), label, is_verified, is_active and destination_hint (a chat id, a masked address, or for a webhook only its scheme and host). Use the ids in channel_ids of monitors and heartbeats. An inactive or unknown id cannot be bound (404), and only a verified, active channel is alerted: one that is not verified yet can be bound but receives nothing until it is. Email is not listed: every alert also goes to the account email of the user who created the monitor or heartbeat. Channels are added in the dashboard. No arguments.",
|
|
2050
|
+
"scope": "read",
|
|
2051
|
+
"input_schema": {
|
|
2052
|
+
"type": "object",
|
|
2053
|
+
"properties": {},
|
|
2054
|
+
"required": [],
|
|
2055
|
+
"additionalProperties": false
|
|
2056
|
+
},
|
|
2057
|
+
"operation": {
|
|
2058
|
+
"method": "GET",
|
|
2059
|
+
"path": "/v1/channels/directory",
|
|
2060
|
+
"path_params": [],
|
|
2061
|
+
"query": [],
|
|
2062
|
+
"body": false,
|
|
2063
|
+
"fixed_query": {}
|
|
2064
|
+
}
|
|
2065
|
+
},
|
|
2066
|
+
{
|
|
2067
|
+
"name": "list_regions",
|
|
2068
|
+
"title": "List check regions",
|
|
2069
|
+
"description": "List every check region of the platform as regions, each with code (what the regions argument takes), display_name, city, country_code, group and group_display_name. The plan decides which of them an organization may use: get_plan_usage shows limits.allowed_regions and how many one monitor may use (max_regions). No arguments.",
|
|
2070
|
+
"scope": "read",
|
|
2071
|
+
"input_schema": {
|
|
2072
|
+
"type": "object",
|
|
2073
|
+
"properties": {},
|
|
2074
|
+
"required": [],
|
|
2075
|
+
"additionalProperties": false
|
|
2076
|
+
},
|
|
2077
|
+
"operation": {
|
|
2078
|
+
"method": "GET",
|
|
2079
|
+
"path": "/v1/regions",
|
|
2080
|
+
"path_params": [],
|
|
2081
|
+
"query": [],
|
|
2082
|
+
"body": false,
|
|
2083
|
+
"fixed_query": {}
|
|
2084
|
+
}
|
|
2085
|
+
},
|
|
2086
|
+
{
|
|
2087
|
+
"name": "check_target",
|
|
2088
|
+
"title": "Probe a target before creating a monitor",
|
|
2089
|
+
"description": "Run one real check of a target from one region, chosen by Fettle, and report status (up, down, error or unknown), region, response_time_ms, status_code, error and failure_kind. unknown means no definite answer came back, not a failure. Use it before create_monitor to catch a typo or an unreachable host; a down result does not stop you from creating the monitor. Requires a key with the write scope and is rate limited per caller address (a 429 whose retry_after says how many seconds to wait). Required: type (HTTP, PING, SSL, TCP or DNS) and target, as in create_monitor. config (optional object) as in create_monitor; TCP and DNS need it. A target that is not public is a 422. Example: {\"type\": \"HTTP\", \"target\": \"https://api.example.com/health\"}",
|
|
2090
|
+
"scope": "write",
|
|
2091
|
+
"input_schema": {
|
|
2092
|
+
"type": "object",
|
|
2093
|
+
"properties": {
|
|
2094
|
+
"type": {
|
|
2095
|
+
"enum": [
|
|
2096
|
+
"HTTP",
|
|
2097
|
+
"PING",
|
|
2098
|
+
"SSL",
|
|
2099
|
+
"TCP",
|
|
2100
|
+
"DNS"
|
|
2101
|
+
],
|
|
2102
|
+
"type": "string"
|
|
2103
|
+
},
|
|
2104
|
+
"target": {
|
|
2105
|
+
"maxLength": 2048,
|
|
2106
|
+
"minLength": 1,
|
|
2107
|
+
"type": "string"
|
|
2108
|
+
},
|
|
2109
|
+
"config": {
|
|
2110
|
+
"additionalProperties": true,
|
|
2111
|
+
"type": "object"
|
|
2112
|
+
}
|
|
2113
|
+
},
|
|
2114
|
+
"required": [
|
|
2115
|
+
"type",
|
|
2116
|
+
"target"
|
|
2117
|
+
],
|
|
2118
|
+
"additionalProperties": false
|
|
2119
|
+
},
|
|
2120
|
+
"operation": {
|
|
2121
|
+
"method": "POST",
|
|
2122
|
+
"path": "/v1/monitors/precheck",
|
|
2123
|
+
"path_params": [],
|
|
2124
|
+
"query": [],
|
|
2125
|
+
"body": true,
|
|
2126
|
+
"fixed_query": {}
|
|
2127
|
+
}
|
|
939
2128
|
}
|
|
940
2129
|
]
|
|
941
2130
|
}
|