Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "acknowledge_incident", "bulk_create_monitors", "bulk_pause_monitors" and 46 more
AcknowledgeMark anincidentopensoincidentrepeatasnotificationsbeingstophandledwhilesosomeoneitsworksrepeatonalertsit;stop; the recovery alert still goesout. Requiresoutawhenkeyitwithresolves.theUsewriteitscope.whenincident_idsomeone(uuid,isrequired)workingison theincident'soutage.idItfromdoeslist_incidents;notancloseidthe incident (that happens when the monitor recovers) and it is notanforincidentstatusofpagethisincidentsorganization(post_status_page_update).isRequires a404.key with the write scope. Acknowledging twice keeps the firstacknowledgement, andacknowledgement;acknowledgingon a resolved incident it succeeds without effect on alerts. Returns theincident.incident in the get_incident shape.
{"additionalProperties":false,"properties":{"incident_id":{"description":"The incident's uuid from list_incidents. An id that is not an incident of this organization is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"acknowledged_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"acknowledged_by":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"cause":{"description":"Known values: TIMEOUT, DNS_FAILURE, CONNECTION_REFUSED, TLS_INVALID, HTTP_4XX, HTTP_5XX, HTTP_UNEXPECTED_STATUS, KEYWORD_MISSING, TOO_MANY_REDIRECTS, TARGET_BLOCKED, PORT_STATE_MISMATCH, INVALID_TARGET, HEARTBEAT_MISSED, HEARTBEAT_FAILED, UNKNOWN.","type":"string"},"cause_detail":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"heartbeat_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"last_notified_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"monitor_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"notification_logs":{"items":{"properties":{"channel_type":{"description":"Known values: EMAIL, TELEGRAM, WEBHOOK, SLACK, DISCORD.","type":"string"},"destination":{"type":"string"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"event":{"description":"Known values: TRIGGERED, RESOLVED, SSL_EXPIRY.","type":"string"},"id":{"format":"uuid","type":"string"},"sent_at":{"type":"string"},"status":{"description":"Known values: PENDING, SENT, FAILED.","type":"string"}},"required":["id","channel_type","destination","event","sent_at","status","error"],"type":"object"},"type":"array"},"renotify_count":{"type":"integer"},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","started_at","resolved_at","cause","cause_detail","last_notified_at","acknowledged_at","acknowledged_by","renotify_count","created_at","updated_at"],"type":"object"}Create 1 to 100 monitors in one call: pass monitors,a list whose items take the sameallfieldsorandnothing;followfortheasamesinglerulesmonitorasuse create_monitor. Requires a key with the write scope.All are created or none is: anAn invalid item, or a batch that would exceed theplan's limitsplan, rejects the whole call andnothing is created. On success it returns monitors,createsone
⟨24 unchanged words⟩ to stop monitoring a whole project or group(find idsfound withlist_monitorslist_monitors;andforitsonefilters);monitor use pause_monitor, and to silence alerts around a deploy,preferwhilecreate_maintenance_window.checks keep running use create_maintenance_window instead. 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: theshortlist_monitors rows after the change
⟨16 unchanged words⟩ PENDING and is checked on the next tick.Requires aForkeyonewithmonitortheusewriteresume_monitor;scope.tomonitor_idsrun(arrayaofcheck1righttoaway100ondistinct
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,1alltoor300nothing:distincteach monitoruuids, required; aendsrepeatedwithid(itsistagsa|422add)names the monitors; every-one
Set the samevaluesinterval, timeout, regions, channels, threshold or cooldown on up to 100 monitors in one call, all ornothing,nothing.forFor example, move twenty PING monitors to otherregions 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,regions.required)Notholdsforoneconfig ormore of: interval_seconds (30 to 86400), timeout_seconds (1 to 120), regions (list of region codes; see list_regions), channel_idsname (array of channel uuids from list_channels; replaces each monitor's binding, [] clearsuseit
Re-armQueueaone existing monitor to run on the scheduler's next tick instead of waiting out itsinterval.interval,Returnsfor example to confirm a fix. It returns the monitor record, not a check result—: call get_monitor or list_check_results a moment later for the outcome. To probe a target that has no monitor yet use check_target; toseerestart a paused monitor use resume_monitor. Requires a key with theoutcome.write scope. A repeat call for the same monitor within 30 seconds,isor
Run one real check of a target from one region,chosen by Fettle,andwithoutreportcreating anything. It reports status (up, down, error or unknown), ⟨27 unchanged words⟩ host; a down result does not stop youfromcreating the monitor. For a monitor that already exists use check_now. Requires a key with the writescopescope.andIt is rate limited percallercalling address:(a 429 whose retry_after says how many seconds towait). 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.wait. Example: {"type": "HTTP", " ⟨3 unchanged words⟩
Create a heartbeatmonitor and get back:ping_url,FettlethealertsURLwhen a scheduled jobshould call (GET or POST) each time it succeeds. Requires a key with the write scope; the plan caps how many heartbeats an organizationstopsmaycallinghaveits(403ping_url.pastUse it,see get_plan_usage). Required: name (1 tofor255croncharacters)
Create a one-time or recurring maintenance window that silences alerts fora time. Requires a key with the write scope. Required: name (1 to 255 characters), scope, dtstart and duration_minutes. enabled (boolean, default true): false storessomeitorwithoutalleffect.monitors.DuringWhile a windowtheiscoveredin effect its monitors keep being checked, but no incident opens and no alert goesout; use a window rather thanout.pausingUsemonitorsit around a deploy orreboot. scope is ORG (every monitor of the organization, monitor_ids ignored) or MONITOR (only monitor_ids, a
Createaone monitor that checks a URL, host or port on a scheduleand 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,fromspaceone ortab; 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-*more
Openana new incident on a status page withaits firstmessage. 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 (uuidmessage,required)toistell the page'sid fromvisitorslist_status_pages;about anid that is not a status page of thisoutage.organizationIt isa 404. Required: title (1 to 255 characters)public andbodyemails
Deleteaone heartbeat forgood;good: its ping_url stops working (404).Thisandcannotnobetoolundonerestores—it. Use it only when the user asked for deletion; to stop alerts for a while,usepause_heartbeat instead.pause_heartbeat. 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) isReturnsa{"success":
Deleteaone maintenance window; alerts for its monitors resume atonce.onceThisandcannotnobetoolundonerestores—it.toTo suspend a window but keep 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 isReturnsa{"success":404.true}.
Soft-deleteDeleteaone monitor: it stops being checked andno longer appearsdisappearsinfrom the organization'smonitormonitors,list.andPrefernopause_monitortoolunlessrestores it. Use it only when the user explicitly asked fordeletion. Requires the writedeletion;scope.otherwisemonitor_idprefer
Remove an incident,withand its timeline,from a status page; it stops showing at once, nothing is sent to subscribers, and no tool restores it.NothingUseisitsentfortoansubscribers.incidentToposted by mistake; to closeanaincidentrealinstead,one
Remove a tag from every monitor and heartbeat that carriesit.it;Thisthecannotitemsbethemselvesundone.stay,Requiresandanokeytoolwithrestores thewritetag.scope.Usetagit(string,to
List the ports that shouldnotnever be reachable from the internet (databases, queues, admin panels):. Returns ports, eachasa portplusnumber and the service that usually listens on it.TakesUsenoitarguments.toTopick ports when asked to watch a server,for exposed services; it creates nothing. Then createONEone
ReturnRead one heartbeat:in full, including how long its last run took. It has name, state, period_seconds, grace_seconds, ping_url, last_ping_at, last_success_at, last_start_at, last_duration_ms (how long the last run took, from its /start to its success ping), overdue_at (when it will be reported late), notification_cooldown_seconds, is_active, channel_ids and tags.heartbeat_idUse(uuid,itrequired)toisanswerthewhetherheartbeat'saidjobfromran,list_heartbeats;
ReturnRead one incident:in full, with every alert sent for it. It has id, monitor_id or heartbeat_id (exactly one is ⟨5 unchanged words⟩ last_notified_at, acknowledged_at, acknowledged_by, renotify_count and notification_logs (theeach alertattemptsattempt:each withid, channel_type, destination, event TRIGGERED, RESOLVED ⟨4 unchanged words⟩ PENDING, SENT or FAILED, and error). Use it to tell who acknowledged an incident and whether its alerts were delivered. destination is an email address, a Telegram chat id, orfor a webhookonly scheme://host/…(the full URL is never returned). incident_id (uuid,ofrequired)aiswebhook.theTo
ReturnRead one maintenance window,inwiththeitslist_maintenance_windowsscheduleshapeandplusitsnext_occurrencesnext(three occurrences. It has thenextlist_maintenance_windowsthreefields plus next_occurrences, each with start andend).end.window_idUse
Read one monitor's full configuration and currentstate:state. It has type, target, interval_seconds, timeout_seconds, regions, config ⟨13 unchanged words⟩ , tags, badge_enabled, last_checked_at, next_run_at, andssl_expires_at and ssl_cert_infofor SSLmonitors.monitorsForssl_expires_atuptimeandfiguresssl_cert_info.useUseget_uptime_summary.itmonitor_idbefore(uuidupdate_monitor,required)sinceis
Show the organization's plan, its limits andhowcurrentmuchusage,ofto check that new monitors, heartbeats or regions fit before creating themisorusedtonow.explainTakesano403arguments.naming a limit. Region codes and their cities come from list_regions; billing changes happen only in the dashboard. Values are current as of the call. Returns plan (one of FREE, PLUS, PRO, MAX, ENTERPRISE), limits and usage. limitsincludes: max_monitors, min_interval_seconds, max_fast_monitors (how many
ReturnChartaone monitor's average response time over time, one series per region: monitor_id,window, bucket_seconds andtoregions,seeeachwherewithitregion,isdisplay_nameslow andpoints. Every region the monitor is configured forsincehaswhen.aReturnsseriesmonitor_id
ReturnRead one status pageinwiththeitslist_status_pagescomponents.shape,Itincludinghasitsthegroupslist_status_pagesandfields,ungrouped_components;where each component hasanid(the component_ids of a status page incident are these),amonitor_id, display_name and position.page_idUse
ReturnReportaone monitor's uptime for each UTC day,asoldestmonitor_idfirst anddays:endingantoday,arraytoorderedfindoldestthefirstdayandanendingoutagetoday,orone
UptimeReport one monitor's uptime percentage, average response time and incidentcounts for one monitorcount over the24-hourlast 24 hours,7-day7 days and30-day30windowsdays atonce. Use thisonce, to answer'howhow reliable it hasthisbeen.been'.For a day-by-day series use get_uptime_daily; for response time per region use get_response_time_by_region; for the individual failures use list_check_results.
List the enabled maintenance windowsthat arein effectrightatnowthis moment,asto tell whether aplainmonitor'sarrayalerts(notare silenced now. An ORG-scope window covers every monitor, apage)MONITOR-scopeofonetheitslist_maintenance_windowsmonitor_ids.shape.For
List the organization's notification channels (up to 100):,eachtowithget the ids that channel_ids of monitors and heartbeats take. Each has id, type (TELEGRAM, WEBHOOK, SLACK or ⟨6 unchanged words⟩ a chat id, a masked address, orforawebhook only itswebhook's scheme and host).Use the ids in channel_idsOnlyofamonitorsverified,andactiveheartbeats.channelAnisinactive
List one monitor's individual check resultsof 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 itto find out whya monitorit is DOWN: which regions fail,and with what status code or error.TheEachresulthasisid,aregion,page:checked_at,itemsstatus,plusresponse_time_ms,
ListFind heartbeat (cron / dead-man's-switch)monitors:monitors.eachEachwithhas id, name, state (PENDING,UP, DOWN or PAUSED; a new heartbeat is PENDINGuntil asuccessfulsuccess ping makes it UP or a /fail ping makes it DOWN; later UP, DOWN or PAUSED), 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. AllUseargumentsitaretooptional.getpage
List the organization'sincidents — bothmonitor and heartbeat incidents, newestfirst.first, to see what is or was down and which alerts went out. Each item has id, monitor_id or heartbeat_id ( ⟨14 unchanged words⟩ error), acknowledged_at and notification_logs: the alerts sentfor it, oldest first, each with id, channel_type (EMAIL, TELEGRAM, WEBHOOK, SLACK or DISCORD), destination (where it went;may be masked), event (TRIGGERED for the ⟨25 unchanged words⟩ or FAILED) and error (the last deliveryerror; null when SENTerror).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. monitor_id (uuid) keepsFor onemonitor's incidents. status is open orincident'sresolvedfull(lowercase);recordomit
List every maintenance window of theorganization'sorganization,maintenanceenabledwindows:oreachnot,within effect or not. Each has id, name, enabled, scope (ORG or MONITOR), dtstart, duration_minutes, rrule, timezone, monitor_ids andcreated_at (get_maintenance_window adds the upcomingcreated_at.occurrences).UseTheitresulttoisfind apage: items plus total, page,window's
List theFind monitors in the organizationthe APIbykeyname,belongstarget,totype,onestatusshortor tag. Each roweachis short: id, name, type, target, status, is_active, tags, interval_seconds, ssl_expires_at,last_checked_at. The result is a page: items plus total, page, sizeandpages.last_checked_at. Usethisit first tofindget
List every check region of the platform,asto show the user where checks can run. Returns regions, each with code (whatthea regions argument takes), display_name, city, country_code, group and group_display_name. Theplanorganizationdecidesmaywhichuse only some of them:antoorganizationchoosemayregionsuse:forget_plan_usagea
List the incidents shown onaone status page, newest first, boththoseposted by a person andthose Fettleopeneditself:byeachFettle.withEach has id, title, status, is_auto (opened by Fettle from a monitorrather than by a person), started_at, resolved_at, notified_at (when subscribers were first emailed; null ifthey were notnever), component_ids and updates (the timeline, oldest ⟨4 unchanged words⟩ , status, body, created_by and created_at).The result is a page: itemsUseplusittotal,to
List the organization's public statuspages:pages.eachEachwithhas id, slug, name, description, is_published (whether it ispublicly visible now), history_days, created_at, groups (each with name, position and its components) andungrouped_components (components outside anyungrouped_components.group).UseTheitresulttoisfind apage: items pluspage'stotal,idpage,before
Listeverythetagtags used in the organization,with how many monitors and how many heartbeats carry each one,most-used first: items, each withtag,monitor_count andheartbeat_count.heartbeat_count, as items. Callthisit before taggingsomething newanything so you reusethe names alreadyaninexistingusenameratherinsteadthanof
Pauseaone heartbeat: it is no longer reported late, ⟨18 unchanged words⟩ when the job is stopped on purpose,forsuchexampleas a runner taken out ofservice. Requires a key with the writeservice;scope.resume_heartbeatheartbeat_idundoes(uuidit,required) iswhilethedelete_heartbeatheartbeat'sremovesidthefromheartbeat
Stop checkingaone monitor without deleting it— use before planned downtime. Requires a key with the write scope. The:monitor'sits status becomes PAUSED,and an open incident on itis closedcloses without a recovery alert.PausingUseaitpausedwhen the user wants a monitorchangesoffnothing.forReturnsantheopen-endedmonitor
Add a message toaan existing status page incident and set its status;statusRESOLVED closes it.ThisIt is public and emails the page's confirmed subscribers(details below): confirm the wording with the user before calling.RequiresEveryaconfirmedkeysubscriberwithgets thewrite scope. page_id (uuidupdate,required) is the page's id from list_status_pages; an idexcept thatis not a status page of this organization is a 404. incident_id (uuid, required) is theresolvingincident's
ReturnCompute the next three occurrences,(each with start and end), that a schedule would produce, without savinganything, as an array.anything. Use itbefore create_maintenance_windowtoforcheck a recurringwindow. Requires a key with the write scope. Required: dtstart (ISO 8601 date-time in local wall-clock time of timezone; ascheduleUTCbeforeoffsetcreate_maintenance_window orZupdate_maintenance_window;isfor
⟨14 unchanged words⟩ already has the new name keeps one copy.Requires aUsekeyitwithtothefixwriteascope.namingRequired:schemefromacross(theexisting tag) andorganization; to(the new name). Tags are trimmed, lowercased and deduplicated on write,changeeachtheattags
Resumeaone pausedheartbeat.heartbeat:Itit goes back to PENDING with no deadline, so it is not reported late until its nextsuccessfulsuccess ping restarts the clock.Resuming oneUsethatitisoncenotthepausedjobresetsrunsitagain; toPENDING thechangesame
ResumeRestart checks onaone pausedmonitor. Requires a key with the write scope.monitor:Itsits status goes back to PENDING and it is checked on the scheduler's nexttick;tick.resumingFor many monitors use bulk_resume_monitors; to check a running monitor right away use check_now. Requires a key with the write scope. Resuming an active monitor is a no-op success. A ⟨15 unchanged words⟩ or delete another one first. Returns the monitor(the get_monitor shape). monitor_id (uuid, required) isin themonitor's id from list_monitors; an id that is not a monitor of this organization (or a deleted one) is aget_monitor404.shape.
Changea 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 deletedone)is a 404.heartbeat's name(1 to 255 characters). period_seconds (60 to 2592000) and grace_seconds (0 to 2592000):,antiming,alertchannelsfiresorperiod_secondstags;+onlygrace_secondstheafterfieldstheyoulast
Changeaone maintenancewindow; only the fields you pass change (omit a field to keep it; a recurring window cannot bewindow'sturnedname,intoschedule,ascopeone-timeoronemonitors,—ordeleteswitch itand create a new one). monitor_ids replaces the list. Requires a keyoff withthe write scope. window_id (uuid,enabledrequired)false;
Changean existingone 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) isin themonitor'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 andget_monitortags.shape. Only the fields you passare modified: omit a field to leave it unchangedchange, andnever send null. Atat least onefieldbesides 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
Change a status page incident'stitle;title without telling anyone: nothing is sent to subscribers. To change its status,or add a message 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": ⟨12 unchanged words⟩
{"additionalProperties":false,"properties":{"incident_id":{"description":"The status page incident's uuid from list_status_page_incidents (not from list_incidents). An unknown id is a 404.","format":"uuid","type":"string"},"page_id":{"description":"The status page's uuid from list_status_pages. An id that is not a status page of this organization is a 404.","format":"uuid","type":"string"},"title":{"description":"The new headline, 1 to 255 characters.","maxLength":255,"minLength":1,"type": ⟨7 unchanged words⟩
Authorization required → not required
First tool surface recorded: 49 tools (server version 1.3.1)
Certificate changed, valid to 2027-01-07
Certificate recorded, valid to 2026-11-18
Authorization required
Showing the latest 6 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"additionalProperties":false,"properties":{"monitors":{"description":"Monitors1 tocreate100 monitors, eachshapedtakingliketheasamesinglefieldscreateandrequest.rules as create_monitor's arguments. Items with is_active false are created paused and still count toward the plan.","items":{"additionalProperties":false,"properties" ⟨100 unchanged words⟩
before
—after
{"properties":{"monitors":{"items":{"properties":{"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"}},"required":["id","name","type","target","status","is_active","interval_seconds","ssl_expires_at","last_checked_at"],"type":"object"},"type":"array"}},"required":["monitors"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_ids":{"description":"Monitors1 toact100on.distinctEverymonitor uuids from list_monitors. A repeated idmustisbelongato422;theanactiveidorganization.that is not a monitor of this organization is a 404 naming it, and then nothing changes.","items":{"format":"uuid"," ⟨12 unchanged words⟩
before
—after
{"properties":{"monitors":{"items":{"properties":{"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"}},"required":["id","name","type","target","status","is_active","interval_seconds","ssl_expires_at","last_checked_at"],"type":"object"},"type":"array"}},"required":["monitors"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_ids":{"description":"Monitors1 toact100on.distinctEverymonitor uuids from list_monitors. A repeated idmustisbelongato422;theanactiveidorganization.that is not a monitor of this organization is a 404 naming it, and then nothing changes.","items":{"format":"uuid"," ⟨12 unchanged words⟩
before
—after
{"properties":{"monitors":{"items":{"properties":{"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"}},"required":["id","name","type","target","status","is_active","interval_seconds","ssl_expires_at","last_checked_at"],"type":"object"},"type":"array"}},"required":["monitors"],"type":"object"}⟨4 unchanged words⟩ description":"Tags to add to every listedmonitor.monitor, up to 10.","items":{"type":"string"},"type":"array"},"monitor_ids":{"description":"Monitors1 toretag.300Everydistinct monitor uuids from list_monitors. A repeated idmustisbelongato422; an unknown id rejects theactivewholeorganization.call with a 404 naming every id not found.","items":{"format":"uuid"," ⟨9 unchanged words⟩ description":"Tags to remove from every listedmonitor.monitor, up to 10.","items":{"type":"string"}, ⟨6 unchanged words⟩
before
—after
{"properties":{"monitors_updated":{"type":"integer"}},"required":["monitors_updated"],"type":"object"}{"additionalProperties":false,"properties":{"changes":{"additionalProperties":false,"description":"The values to set, at least one of: interval_seconds (30 to 86400), timeout_seconds (1 to 120), regions (region codes from limits.allowed_regions in get_plan_usage), channel_ids (channel uuids from list_channels; replaces each 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.","minProperties":1,"properties":{"channel_ids":{" ⟨44 unchanged words⟩ :"object"},"monitor_ids":{"description":"Monitors1 toact100on.distinctEverymonitor uuids from list_monitors. A repeated idmustisbelongato422;theanactiveidorganization.that is not a monitor of this organization is a 404 naming it, and then nothing changes.","items":{"format":"uuid"," ⟨13 unchanged words⟩
before
—after
{"properties":{"monitors":{"items":{"properties":{"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"}},"required":["id","name","type","target","status","is_active","interval_seconds","ssl_expires_at","last_checked_at"],"type":"object"},"type":"array"}},"required":["monitors"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"badge_enabled":{"type":"boolean"},"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"config":{"additionalProperties":true,"type":"object"},"confirmation_threshold":{"type":"integer"},"created_at":{"type":"string"},"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"next_run_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"notification_cooldown_seconds":{"type":"integer"},"region_statuses":{"description":"Per-region latest status, sorted by region name.\n\nBuilt from ``region_snapshots``; ``job_id`` is dropped (internal\ndedup key) and malformed/partial snapshot rows are skipped rather\nthan failing the read.","items":{"properties":{"checked_at":{"type":"string"},"display_name":{"type":"string"},"region":{"type":"string"},"status":{"description":"Known values: UP, DEGRADED, DOWN, ERROR.","type":"string"}},"required":["region","status","checked_at","display_name"],"type":"object"},"type":"array"},"regions":{"items":{"type":"string"},"type":"array"},"ssl_cert_info":{"anyOf":[{"properties":{"issuer":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_after":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_before":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"valid":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"type":"object"},{"type":"null"}]},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"timeout_seconds":{"type":"integer"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"},"updated_at":{"type":"string"},"user_id":{"format":"uuid","type":"string"}},"required":["id","user_id","name","type","target","interval_seconds","timeout_seconds","regions","config","status","last_checked_at","next_run_at","confirmation_threshold","notification_cooldown_seconds","ssl_expires_at","is_active","created_at","updated_at","region_statuses"],"type":"object"}{"additionalProperties":false,"properties":{"config":{"additionalProperties":true,"description":"As in create_monitor; TCP and DNS need it. The region, interval and update rules there do not apply to a one-off probe. An object whose fields depend on type, all optional unless stated. HTTP: method (GET, HEAD, POST, PUT, PATCH or DELETE, any case; default GET); expected_status_codes (non-empty list of codes 100 to 599, default [200]); keyword (case-sensitive substring the body must contain, at most 1024 characters, not with HEAD); follow_redirects (default true); verify_ssl (default true; false skips TLS verification, so the monitor can never report TLS_INVALID); request_headers (object of name to value: at most 20, a name at most 128 characters of letters, digits and ! # $ % & ' * + - . ^ _ ` | ~, a value at most 1024 bytes of printable ASCII, space or tab, the whole object at most 8192 bytes as JSON; names differing only in case, and Host, Content-Length, Transfer-Encoding, Connection, Upgrade, TE, Trailer, Keep-Alive, CF-Connecting-IP or any Proxy-* name, are a 422); request_body (string, at most 8192 bytes as UTF-8, needs POST, PUT, PATCH or DELETE). Reads return every request_headers value as the literal __FETTLE_UNCHANGED__; writing that literal back in an update keeps the stored value (on create it is a 422). PING: packet_count (1 to 20, default 4). SSL: warn_before_days (1 to 365, default 14) and port (1 to 65535, default 443). TCP: either port (1 to 65535) with expected_state \"open\" (default) or \"closed\", or ports (1 to 20 distinct ports that must all be closed, which needs expected_state \"closed\", exactly one region and interval_seconds of at least 300; a check fails when any of them accepts a connection, and the monitor goes DOWN once confirmation_threshold failures confirm it). Both port and ports, or neither, is a 422; expected_state values are lowercase. DNS: record_type (A, AAAA, CNAME, MX, TXT or NS; required) and expected_value (at most 2048 characters). With expected_value one answer must equal it (case-insensitive, ignoring surrounding spaces and a trailing dot; exact for TXT); without it any answer passes. MX answers are the mail host names without priority (mail.example.com, not 10 mail.example.com). A and AAAA look up every address of the host, IPv4 and IPv6 alike, and any one may match; write an IPv6 address in its shortest form.","type":"object"},"target":{"description":"What to check, up to 2048 characters. HTTP: an http:// or https:// URL (https:// is added when the scheme is missing; port, path and query are kept). PING, SSL, TCP and DNS: a bare public hostname or IP address with no :port and no path (the port goes in config): host:port is a 422, and a full URL is cut down to its host, losing its port. Hostnames are ASCII (punycode for internationalized domains). localhost, *.localhost and addresses that are not public (private, loopback, link-local, CGNAT 100.64.0.0/10, reserved, unspecified) are a 422.","maxLength":2048,"minLength":1,"type":"string"},"type":{"description":"HTTP (a URL answers with an expected status), PING (a host answers ICMP), SSL (a certificate is valid and not about to expire), TCP (a port is open, or a list of ports is closed) or DNS (a record resolves, optionally to an expected value).","enum":["HTTP","PING","SSL" ⟨9 unchanged words⟩
before
—after
{"properties":{"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"failure_kind":{"anyOf":[{"description":"Known values: TIMEOUT, DNS_FAILURE, CONNECTION_REFUSED, TLS_INVALID, HTTP_4XX, HTTP_5XX, HTTP_UNEXPECTED_STATUS, KEYWORD_MISSING, TOO_MANY_REDIRECTS, TARGET_BLOCKED, PORT_STATE_MISMATCH, INVALID_TARGET, UNKNOWN.","type":"string"},{"type":"null"}]},"region":{"type":"string"},"response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"status":{"description":"Known values: up, down, error, unknown.","type":"string"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}]}},"required":["status","region"],"type":"object"}{"additionalProperties":false,"properties":{"channel_ids":{"description":"Notification channel uuids from list_channels. Omit it or pass [] to alert every verified, active channel of the organization. An id that is not an active channel of this organization is a 404.","items":{"format":"uuid","type":"string"},"type":"array"},"grace_seconds":{"description":"Extra seconds of silence tolerated after the period before the heartbeat is reported late, 0 to 2592000; it may exceed the period.","maximum":2592000,"minimum":0,"type":"integer"},"name":{"description":"Display name, 1 to 255 characters.","maxLength":255,"minLength":1,"type":"string"},"notification_cooldown_seconds":{"description":"60 to 86400 seconds; 1800 when not set on create. Only holds back a duplicate first alert for the same incident within that window. Repeat reminders while an incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (get_plan_usage; 0 means no reminders) instead, and the recovery alert is never held back.","maximum":86400,"minimum":60,"type":"integer"},"period_seconds":{"description":"How often the job runs, 60 to 2592000 seconds. 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).","maximum":2592000,"minimum":60,"type":"integer"},"tags":{"description":"Flat labels for grouping and filtering, for example env:prod or service:api, at most 10. Each tag is trimmed, lowercased and deduplicated on write, at most 50 characters of a-z, 0-9 and : _ . / -, starting with a letter or digit. Reuse names from list_tags rather than inventing near-duplicates.","items":{"type":"string"},"type ⟨7 unchanged words⟩
before
—after
{"properties":{"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"created_at":{"type":"string"},"grace_seconds":{"type":"integer"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"last_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"last_ping_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_start_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"notification_cooldown_seconds":{"type":"integer"},"overdue_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"period_seconds":{"type":"integer"},"ping_url":{"type":"string"},"state":{"description":"Known values: PENDING, UP, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"updated_at":{"type":"string"}},"required":["id","name","state","period_seconds","grace_seconds","ping_url","last_ping_at","last_success_at","last_start_at","last_duration_ms","overdue_at","notification_cooldown_seconds","is_active","created_at","updated_at"],"type":"object"}{"additionalProperties":false,"properties":{"dtstart":{"description":"The first start, an ISO 8601 date-time in the wall-clock time of timezone, for example 2026-10-14T22:00:00. A UTC offset or Z is a 422.","format":"date-time","type":"string"},"duration_minutes":{"description":"How long each occurrence lasts, 1 to 40320 minutes.","exclusiveMinimum":0,"maximum":40320,"type":"integer"},"enabled":{"description":"Default true; false stores the window without effect.","type":"boolean"},"monitor_ids":{"description":"Monitor uuids from list_monitors, at least one when scope is MONITOR. An id that is not a monitor of this organization is a 404.","items":{"format":"uuid","type":"string"},"type":"array"},"name":{"description":"Display name, 1 to 255 characters.","maxLength":255,"minLength":1,"type":"string"},"rrule":{"description":"Repeats the window: one iCal RRULE without the RRULE: prefix, at most 1024 characters, for example FREQ=WEEKLY;BYDAY=SU;BYHOUR=3. Hourly, minutely and secondly frequencies are refused. Omit it for a one-time window.","maxLength":1024,"type":"string"},"scope":{"description":"ORG covers every monitor of the organization and ignores monitor_ids; MONITOR covers only monitor_ids.","enum":["MONITOR","ORG"],"type":"string"},"timezone":{"description":"IANA zone name such as Europe/Berlin, at most 64 characters. The schedule repeats in it, so a weekly 03:00 stays 03:00 across daylight-saving changes. Defaults to the organization's timezone.","maxLength":64,"type":"string"}}, ⟨7 unchanged words⟩
before
—after
{"properties":{"created_at":{"type":"string"},"dtstart":{"type":"string"},"duration_minutes":{"type":"integer"},"enabled":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"monitor_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"name":{"type":"string"},"rrule":{"anyOf":[{"type":"string"},{"type":"null"}]},"scope":{"description":"Known values: MONITOR, ORG.","type":"string"},"timezone":{"type":"string"}},"required":["id","name","enabled","scope","dtstart","duration_minutes","rrule","timezone","created_at"],"type":"object"}{"additionalProperties":false,"properties":{"channel_ids":{"description":"Notification channel uuids from list_channels. Omit it or pass [] to alert every verified, active channel of the organization. An id that is not an active channel of this organization is a 404.","items":{"format":"uuid","type": ⟨2 unchanged words⟩ array"},"config":{"additionalProperties":true,"description":"An object whose fields depend on type, all optional unless stated. HTTP: method (GET, HEAD, POST, PUT, PATCH or DELETE, any case; default GET); expected_status_codes (non-empty list of codes 100 to 599, default [200]); keyword (case-sensitive substring the body must contain, at most 1024 characters, not with HEAD); follow_redirects (default true); verify_ssl (default true; false skips TLS verification, so the monitor can never report TLS_INVALID); request_headers (object of name to value: at most 20, a name at most 128 characters of letters, digits and ! # $ % & ' * + - . ^ _ ` | ~, a value at most 1024 bytes of printable ASCII, space or tab, the whole object at most 8192 bytes as JSON; names differing only in case, and Host, Content-Length, Transfer-Encoding, Connection, Upgrade, TE, Trailer, Keep-Alive, CF-Connecting-IP or any Proxy-* name, are a 422); request_body (string, at most 8192 bytes as UTF-8, needs POST, PUT, PATCH or DELETE). Reads return every request_headers value as the literal __FETTLE_UNCHANGED__; writing that literal back in an update keeps the stored value (on create it is a 422). PING: packet_count (1 to 20, default 4). SSL: warn_before_days (1 to 365, default 14) and port (1 to 65535, default 443). TCP: either port (1 to 65535) with expected_state \"open\" (default) or \"closed\", or ports (1 to 20 distinct ports that must all be closed, which needs expected_state \"closed\", exactly one region and interval_seconds of at least 300; a check fails when any of them accepts a connection, and the monitor goes DOWN once confirmation_threshold failures confirm it). Both port and ports, or neither, is a 422; expected_state values are lowercase. DNS: record_type (A, AAAA, CNAME, MX, TXT or NS; required) and expected_value (at most 2048 characters). With expected_value one answer must equal it (case-insensitive, ignoring surrounding spaces and a trailing dot; exact for TXT); without it any answer passes. MX answers are the mail host names without priority (mail.example.com, not 10 mail.example.com). A and AAAA look up every address of the host, IPv4 and IPv6 alike, and any one may match; write an IPv6 address in its shortest form. Omit it for HTTP, PING or SSL to take the defaults; a TCP or DNS monitor without it is a 422.","type":"object"},"confirmation_threshold":{"description":"How many checks in a row must fail in every region before the monitor goes DOWN and an incident opens, 1 to 10; 3 when not set on create.","maximum":10,"minimum":1,"type":"integer"},"interval_seconds":{"description":"Seconds between checks, 30 to 86400. The plan sets a minimum (limits.min_interval_seconds) and caps how many monitors may check more often than every 60 seconds (max_fast_monitors); breaking either is a 403 naming the limit.","maximum":86400,"minimum":30,"type":"integer"},"is_active":{"description":"Default true. false creates it paused: no check runs until resume_monitor.","type":"boolean"},"name":{"description":"Display name, 1 to 255 characters.","maxLength":255,"minLength":1,"type":"string"},"notification_cooldown_seconds":{"description":"60 to 86400 seconds; 1800 when not set on create. Only holds back a duplicate first alert for the same incident within that window. Repeat reminders while an incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (get_plan_usage; 0 means no reminders) instead, and the recovery alert is never held back.","maximum":86400,"minimum":60,"type":"integer"},"regions":{"description":"One or more distinct region codes, for example eu-central: the plan's choices are limits.allowed_regions in get_plan_usage. An unknown code, or more regions than the plan's max_regions, is a 403. SSL and DNS monitors take exactly one region (422 otherwise).","items":{"type":"string"},"minItems":1,"type":"array"},"tags":{"description":"Flat labels for grouping and filtering, for example env:prod or service:api, at most 10. Each tag is trimmed, lowercased and deduplicated on write, at most 50 characters of a-z, 0-9 and : _ . / -, starting with a letter or digit. Reuse names from list_tags rather than inventing near-duplicates.","items":{"type":"string"},"type":"array"},"target":{"description":"What to check, up to 2048 characters. HTTP: an http:// or https:// URL (https:// is added when the scheme is missing; port, path and query are kept). PING, SSL, TCP and DNS: a bare public hostname or IP address with no :port and no path (the port goes in config): host:port is a 422, and a full URL is cut down to its host, losing its port. Hostnames are ASCII (punycode for internationalized domains). localhost, *.localhost and addresses that are not public (private, loopback, link-local, CGNAT 100.64.0.0/10, reserved, unspecified) are a 422. Cannot be changed after create.","maxLength":2048,"minLength":1,"type":"string"},"timeout_seconds":{"description":"Seconds one check may take before it fails, 1 to 120.","maximum":120,"minimum":1,"type":"integer"},"type":{"description":"HTTP (a URL answers with an expected status), PING (a host answers ICMP), SSL (a certificate is valid and not about to expire), TCP (a port is open, or a list of ports is closed) or DNS (a record resolves, optionally to an expected value). Cannot be changed after create.","enum":["HTTP","PING","SSL" ⟨13 unchanged words⟩
before
—after
{"properties":{"badge_enabled":{"type":"boolean"},"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"config":{"additionalProperties":true,"type":"object"},"confirmation_threshold":{"type":"integer"},"created_at":{"type":"string"},"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"next_run_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"notification_cooldown_seconds":{"type":"integer"},"region_statuses":{"description":"Per-region latest status, sorted by region name.\n\nBuilt from ``region_snapshots``; ``job_id`` is dropped (internal\ndedup key) and malformed/partial snapshot rows are skipped rather\nthan failing the read.","items":{"properties":{"checked_at":{"type":"string"},"display_name":{"type":"string"},"region":{"type":"string"},"status":{"description":"Known values: UP, DEGRADED, DOWN, ERROR.","type":"string"}},"required":["region","status","checked_at","display_name"],"type":"object"},"type":"array"},"regions":{"items":{"type":"string"},"type":"array"},"ssl_cert_info":{"anyOf":[{"properties":{"issuer":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_after":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_before":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"valid":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"type":"object"},{"type":"null"}]},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"timeout_seconds":{"type":"integer"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"},"updated_at":{"type":"string"},"user_id":{"format":"uuid","type":"string"}},"required":["id","user_id","name","type","target","interval_seconds","timeout_seconds","regions","config","status","last_checked_at","next_run_at","confirmation_threshold","notification_cooldown_seconds","ssl_expires_at","is_active","created_at","updated_at","region_statuses"],"type":"object"}{"additionalProperties":false,"properties":{"body":{"description":"The first message. The message subscribers read, 1 to 5000 characters.","maxLength":5000,"minLength":1,"type":"string"},"component_ids":{"description":"The affected components: uuids from get_status_page. An id that is not a component of this page is a 404.","items":{"format":"uuid","type":"string"},"type":"array"},"page_id":{"description":"The status page's uuid from list_status_pages. An id that is not a status page of this organization is a 404.","format":"uuid","type":"string"},"status":{"description":"INVESTIGATING, IDENTIFIED, MONITORING or RESOLVED; RESOLVED closes the incident on the page. Default INVESTIGATING.","enum":["INVESTIGATING","IDENTIFIED","MONITORING","RESOLVED"],"type":"string"},"title":{"description":"The incident's headline, 1 to 255 characters.","maxLength":255,"minLength":1,"type": ⟨7 unchanged words⟩
before
—after
{"properties":{"component_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"is_auto":{"type":"boolean"},"notified_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"status":{"description":"Known values: INVESTIGATING, IDENTIFIED, MONITORING, RESOLVED.","type":"string"},"title":{"type":"string"},"updates":{"items":{"properties":{"body":{"type":"string"},"created_at":{"type":"string"},"created_by":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"status":{"description":"Known values: INVESTIGATING, IDENTIFIED, MONITORING, RESOLVED.","type":"string"}},"required":["id","status","body","created_by","created_at"],"type":"object"},"type":"array"}},"required":["id","title","status","is_auto","started_at","resolved_at","notified_at","component_ids","updates"],"type":"object"}{"additionalProperties":false,"properties":{"heartbeat_id":{"description":"The heartbeat's uuid from list_heartbeats. An id that is not a heartbeat of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"success":{"type":"boolean"}},"required":["success"],"type":"object"}{"additionalProperties":false,"properties":{"window_id":{"description":"The window's uuid from list_maintenance_windows. An id that is not a window of this organization is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"success":{"type":"boolean"}},"required":["success"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"success":{"type":"boolean"}},"required":["success"],"type":"object"}{"additionalProperties":false,"properties":{"incident_id":{"description":"The status page incident's uuid from list_status_page_incidents (not from list_incidents). An unknown id is a 404.","format":"uuid","type":"string"},"page_id":{"description":"The status page's uuid from list_status_pages. An id that is not a status page of this organization is a 404.","format":"uuid","type":"string"} ⟨5 unchanged words⟩
before
—after
{"properties":{"success":{"type":"boolean"}},"required":["success"],"type":"object"}{"additionalProperties":false,"properties":{"tag":{"description":"The tag to remove, exactly as list_tags shows it.","minLength":1,"type":"string"}}," ⟨4 unchanged words⟩
before
—after
{"properties":{"from":{"type":"string"},"heartbeats_updated":{"type":"integer"},"monitors_updated":{"type":"integer"}},"required":["from","monitors_updated","heartbeats_updated"],"type":"object"}before
—after
{"properties":{"ports":{"items":{"properties":{"port":{"type":"integer"},"service":{"type":"string"}},"required":["port","service"],"type":"object"},"type":"array"}},"required":["ports"],"type":"object"}{"additionalProperties":false,"properties":{"heartbeat_id":{"description":"The heartbeat's uuid from list_heartbeats. An id that is not a heartbeat of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"created_at":{"type":"string"},"grace_seconds":{"type":"integer"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"last_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"last_ping_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_start_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"notification_cooldown_seconds":{"type":"integer"},"overdue_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"period_seconds":{"type":"integer"},"ping_url":{"type":"string"},"state":{"description":"Known values: PENDING, UP, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"updated_at":{"type":"string"}},"required":["id","name","state","period_seconds","grace_seconds","ping_url","last_ping_at","last_success_at","last_start_at","last_duration_ms","overdue_at","notification_cooldown_seconds","is_active","created_at","updated_at"],"type":"object"}{"additionalProperties":false,"properties":{"incident_id":{"description":"The incident's uuid from list_incidents. An id that is not an incident of this organization is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"acknowledged_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"acknowledged_by":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"cause":{"description":"Known values: TIMEOUT, DNS_FAILURE, CONNECTION_REFUSED, TLS_INVALID, HTTP_4XX, HTTP_5XX, HTTP_UNEXPECTED_STATUS, KEYWORD_MISSING, TOO_MANY_REDIRECTS, TARGET_BLOCKED, PORT_STATE_MISMATCH, INVALID_TARGET, HEARTBEAT_MISSED, HEARTBEAT_FAILED, UNKNOWN.","type":"string"},"cause_detail":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"heartbeat_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"last_notified_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"monitor_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"notification_logs":{"items":{"properties":{"channel_type":{"description":"Known values: EMAIL, TELEGRAM, WEBHOOK, SLACK, DISCORD.","type":"string"},"destination":{"type":"string"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"event":{"description":"Known values: TRIGGERED, RESOLVED, SSL_EXPIRY.","type":"string"},"id":{"format":"uuid","type":"string"},"sent_at":{"type":"string"},"status":{"description":"Known values: PENDING, SENT, FAILED.","type":"string"}},"required":["id","channel_type","destination","event","sent_at","status","error"],"type":"object"},"type":"array"},"renotify_count":{"type":"integer"},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","started_at","resolved_at","cause","cause_detail","last_notified_at","acknowledged_at","acknowledged_by","renotify_count","created_at","updated_at"],"type":"object"}{"additionalProperties":false,"properties":{"window_id":{"description":"The window's uuid from list_maintenance_windows. An id that is not a window of this organization is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"created_at":{"type":"string"},"dtstart":{"type":"string"},"duration_minutes":{"type":"integer"},"enabled":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"monitor_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"name":{"type":"string"},"next_occurrences":{"items":{"properties":{"end":{"type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"rrule":{"anyOf":[{"type":"string"},{"type":"null"}]},"scope":{"description":"Known values: MONITOR, ORG.","type":"string"},"timezone":{"type":"string"}},"required":["id","name","enabled","scope","dtstart","duration_minutes","rrule","timezone","created_at"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"badge_enabled":{"type":"boolean"},"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"config":{"additionalProperties":true,"type":"object"},"confirmation_threshold":{"type":"integer"},"created_at":{"type":"string"},"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"next_run_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"notification_cooldown_seconds":{"type":"integer"},"region_statuses":{"description":"Per-region latest status, sorted by region name.\n\nBuilt from ``region_snapshots``; ``job_id`` is dropped (internal\ndedup key) and malformed/partial snapshot rows are skipped rather\nthan failing the read.","items":{"properties":{"checked_at":{"type":"string"},"display_name":{"type":"string"},"region":{"type":"string"},"status":{"description":"Known values: UP, DEGRADED, DOWN, ERROR.","type":"string"}},"required":["region","status","checked_at","display_name"],"type":"object"},"type":"array"},"regions":{"items":{"type":"string"},"type":"array"},"ssl_cert_info":{"anyOf":[{"properties":{"issuer":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_after":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_before":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"valid":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"type":"object"},{"type":"null"}]},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"timeout_seconds":{"type":"integer"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"},"updated_at":{"type":"string"},"user_id":{"format":"uuid","type":"string"}},"required":["id","user_id","name","type","target","interval_seconds","timeout_seconds","regions","config","status","last_checked_at","next_run_at","confirmation_threshold","notification_cooldown_seconds","ssl_expires_at","is_active","created_at","updated_at","region_statuses"],"type":"object"}before
—after
{"properties":{"limits":{"properties":{"allowed_channel_types":{"items":{"description":"Known values: EMAIL, TELEGRAM, WEBHOOK, SLACK, DISCORD.","type":"string"},"type":"array"},"allowed_regions":{"items":{"type":"string"},"type":"array"},"api_rate_limit_per_minute":{"type":"integer"},"fast_interval_threshold_seconds":{"type":"integer"},"history_retention_days":{"type":"integer"},"max_api_keys":{"type":"integer"},"max_channels":{"anyOf":[{"type":"integer"},{"type":"null"}]},"max_fast_monitors":{"anyOf":[{"type":"integer"},{"type":"null"}]},"max_heartbeats":{"anyOf":[{"type":"integer"},{"type":"null"}]},"max_maintenance_windows":{"anyOf":[{"type":"integer"},{"type":"null"}]},"max_monitors":{"anyOf":[{"type":"integer"},{"type":"null"}]},"max_regions":{"anyOf":[{"type":"integer"},{"type":"null"}]},"max_status_page_subscribers":{"anyOf":[{"type":"integer"},{"type":"null"}]},"max_status_pages":{"anyOf":[{"type":"integer"},{"type":"null"}]},"min_interval_seconds":{"type":"integer"},"renotify_interval_seconds":{"type":"integer"},"renotify_max_count":{"type":"integer"},"tier":{"description":"Known values: FREE, PLUS, PRO, MAX, ENTERPRISE.","type":"string"}},"required":["tier","max_monitors","min_interval_seconds","max_fast_monitors","fast_interval_threshold_seconds","max_regions","history_retention_days","allowed_channel_types","max_channels","max_heartbeats","max_maintenance_windows","max_status_pages","max_status_page_subscribers","renotify_interval_seconds","renotify_max_count","max_api_keys","api_rate_limit_per_minute","allowed_regions"],"type":"object"},"plan":{"description":"Known values: FREE, PLUS, PRO, MAX, ENTERPRISE.","type":"string"},"usage":{"properties":{"fast_monitors":{"description":"Monitors with an interval below the fast threshold.","type":"integer"},"heartbeats":{"type":"integer"},"monitors":{"description":"Monitors, paused ones included.","type":"integer"}},"required":["monitors","fast_monitors","heartbeats"],"type":"object"}},"required":["plan","limits","usage"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"},"window":{"description":"24h (the default; up to 24 hourly buckets), 7d (up to 28 six-hourly buckets) or 30d (up to 30 daily buckets).","enum":["24h","7d","30d" ⟨6 unchanged words⟩
before
—after
{"properties":{"bucket_seconds":{"type":"integer"},"monitor_id":{"format":"uuid","type":"string"},"regions":{"items":{"properties":{"display_name":{"type":"string"},"points":{"items":{"properties":{"avg_response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"bucket_start":{"type":"string"},"sample_count":{"type":"integer"}},"required":["bucket_start","sample_count"],"type":"object"},"type":"array"},"region":{"type":"string"}},"required":["region","display_name","points"],"type":"object"},"type":"array"},"window":{"type":"string"}},"required":["monitor_id","window","bucket_seconds","regions"],"type":"object"}{"additionalProperties":false,"properties":{"page_id":{"description":"The status page's uuid from list_status_pages. An id that is not a status page of this organization is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"created_at":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"groups":{"items":{"properties":{"components":{"items":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"monitor_id":{"format":"uuid","type":"string"},"position":{"type":"integer"}},"required":["id","monitor_id","display_name","position"],"type":"object"},"type":"array"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"position":{"type":"integer"}},"required":["id","name","position","components"],"type":"object"},"type":"array"},"history_days":{"type":"integer"},"id":{"format":"uuid","type":"string"},"is_published":{"type":"boolean"},"name":{"type":"string"},"slug":{"type":"string"},"ungrouped_components":{"items":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"monitor_id":{"format":"uuid","type":"string"},"position":{"type":"integer"}},"required":["id","monitor_id","display_name","position"],"type":"object"},"type":"array"}},"required":["id","slug","name","description","is_published","history_days","created_at","groups","ungrouped_components"],"type":"object"}{"additionalProperties":false,"properties":{"days":{"description":"How many days to return, 1 to 365; default 30. Capped at the plan's limits.history_retention_days (get_plan_usage), so fewer days can come back.","maximum":365,"minimum":1,"type":"integer"},"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"} ⟨4 unchanged words⟩
before
—after
{"properties":{"days":{"items":{"properties":{"date":{"type":"string"},"degraded_checks":{"type":"integer"},"down_checks":{"type":"integer"},"maintenance_checks":{"type":"integer"},"total_checks":{"type":"integer"},"up_checks":{"type":"integer"},"uptime_percentage":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["date","uptime_percentage","total_checks","up_checks","down_checks"],"type":"object"},"type":"array"},"monitor_id":{"format":"uuid","type":"string"}},"required":["monitor_id","days"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"monitor_id":{"format":"uuid","type":"string"},"windows":{"additionalProperties":{"properties":{"avg_response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"degraded_checks":{"type":"integer"},"down_checks":{"type":"integer"},"incident_count":{"type":"integer"},"total_checks":{"type":"integer"},"up_checks":{"type":"integer"},"uptime_percentage":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["uptime_percentage","total_checks","up_checks","down_checks","incident_count","avg_response_time_ms"],"type":"object"},"type":"object"}},"required":["monitor_id","windows"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"},"page":{"description":"Page number, 1 or more; default 1.","minimum":1,"type":"integer"},"period_days":{"description":"Keep results of the last N days, 1 to 365; without it every stored result is eligible.","maximum":365,"minimum":1,"type":"integer"},"region":{"description":"Keep one region's results: its exact code, up to 64 characters.","maxLength":64,"type":"string"},"size":{"description":"Rows per page, 1 to 100; default 25. Keep paging until you have seen total rows.","maximum":100,"minimum":1,"type":"integer"},"status":{"description":"Keep results with this status only.","enum":["UP","DEGRADED","DOWN" ⟨7 unchanged words⟩
before
—after
{"properties":{"items":{"items":{"properties":{"checked_at":{"type":"string"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}]},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"job_id":{"type":"string"},"maintenance_window_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"monitor_id":{"format":"uuid","type":"string"},"region":{"type":"string"},"response_time_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"status":{"description":"Known values: UP, DEGRADED, DOWN, ERROR.","type":"string"},"status_code":{"anyOf":[{"type":"integer"},{"type":"null"}]}},"required":["id","monitor_id","region","checked_at","status","response_time_ms","status_code","error_message","details","job_id"],"type":"object"},"type":"array"},"page":{"type":"integer"},"pages":{"type":"integer"},"size":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total","page","size","pages"],"type":"object"}{"additionalProperties":false,"properties":{"page":{"description":"Page number, 1 or more; default 1.","minimum":1,"type":"integer"},"q":{"description":"Case-insensitive substring of the name, up to 255 characters.","maxLength":255,"type":"string"},"size":{"description":"Rows per page, 1 to 100; default 25. Keep paging until you have seen total rows.","maximum":100,"minimum":1,"type":"integer"},"sort":{"description":"status (the default: DOWN, PENDING, UP, PAUSED, newest first within each), name, or created_at (newest first).","enum":["status","name","created_at"],"type":"string"},"tag":{"description":"Keep items carrying these tags: a JSON array of up to 10 tags, each up to 50 characters, lowercased before matching. tag_match decides whether all or any of them must match.","items":{"maxLength":50,"type":"string"},"maxItems":10,"type":"array"},"tag_match":{"description":"all (the default): an item must carry every tag in tag. any: at least one of them.","enum":["all","any"],"type ⟨4 unchanged words⟩
before
—after
{"properties":{"items":{"items":{"properties":{"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"created_at":{"type":"string"},"grace_seconds":{"type":"integer"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"last_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"last_ping_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_start_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"notification_cooldown_seconds":{"type":"integer"},"overdue_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"period_seconds":{"type":"integer"},"ping_url":{"type":"string"},"state":{"description":"Known values: PENDING, UP, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"updated_at":{"type":"string"}},"required":["id","name","state","period_seconds","grace_seconds","ping_url","last_ping_at","last_success_at","last_start_at","last_duration_ms","overdue_at","notification_cooldown_seconds","is_active","created_at","updated_at"],"type":"object"},"type":"array"},"page":{"type":"integer"},"pages":{"type":"integer"},"size":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total","page","size","pages"],"type":"object"}{"additionalProperties":false,"properties":{"cause":{"description":"Filter byKeepstructuredone failurecause.cause, such as TIMEOUT, HTTP_5XX or HEARTBEAT_MISSED.","enum":["TIMEOUT","DNS_FAILURE"," ⟨13 unchanged words⟩ ,"type":"string"},"monitor_id":{"description":"Keep one monitor's incidents: its uuid from list_monitors.","format":"uuid","type":"string"},"page":{"description":"Page number, 1 or more; default 1.","minimum":1,"type":"integer"},"period_days":{"description":"OnlyKeep incidentsthat wereactive within the last Ndays.days,An1incidenttostill365. An openisincident alwaysincludedqualifies,whenever it started. Combinedso withstatus=open this makes period_days a no-op, since everystatus openincident already satisfies thatitarmchanges—nothing: usestatus=resolvedstatus resolved, or omit status, to see the window take effect.","maximum ⟨3 unchanged words⟩ ,"type":"integer"},"size":{"description":"Rows per page, 1 to 100; default 25. Keep paging until you have seen total rows.","maximum":100,"minimum":1,"type":"integer"},"status":{"description":"Filter byopen orresolved;resolved (lowercase); omit it for both.","enum":["open"," ⟨6 unchanged words⟩
before
—after
{"properties":{"items":{"items":{"properties":{"acknowledged_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"acknowledged_by":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"cause":{"description":"Known values: TIMEOUT, DNS_FAILURE, CONNECTION_REFUSED, TLS_INVALID, HTTP_4XX, HTTP_5XX, HTTP_UNEXPECTED_STATUS, KEYWORD_MISSING, TOO_MANY_REDIRECTS, TARGET_BLOCKED, PORT_STATE_MISMATCH, INVALID_TARGET, HEARTBEAT_MISSED, HEARTBEAT_FAILED, UNKNOWN.","type":"string"},"cause_detail":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"heartbeat_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"last_notified_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"monitor_id":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"notification_logs":{"items":{"properties":{"channel_type":{"description":"Known values: EMAIL, TELEGRAM, WEBHOOK, SLACK, DISCORD.","type":"string"},"destination":{"type":"string"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"event":{"description":"Known values: TRIGGERED, RESOLVED, SSL_EXPIRY.","type":"string"},"id":{"format":"uuid","type":"string"},"sent_at":{"type":"string"},"status":{"description":"Known values: PENDING, SENT, FAILED.","type":"string"}},"required":["id","channel_type","destination","event","sent_at","status","error"],"type":"object"},"type":"array"},"renotify_count":{"type":"integer"},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","started_at","resolved_at","cause","cause_detail","last_notified_at","acknowledged_at","acknowledged_by","renotify_count","created_at","updated_at"],"type":"object"},"type":"array"},"page":{"type":"integer"},"pages":{"type":"integer"},"size":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total","page","size","pages"],"type":"object"}{"additionalProperties":false,"properties":{"page":{"description":"Page number, 1 or more; default 1.","minimum":1,"type":"integer"},"q":{"description":"Case-insensitive substring of the name, up to 255 characters.","maxLength":255,"type":"string"},"size":{"description":"Rows per page, 1 to 100; default 25. Keep paging until you have seen total rows.","maximum":100,"minimum":1,"type":"integer"},"sort":{"description":"created_at (the default, newest first) or name.","enum":["name","created_at"],"type ⟨4 unchanged words⟩
before
—after
{"properties":{"items":{"items":{"properties":{"created_at":{"type":"string"},"dtstart":{"type":"string"},"duration_minutes":{"type":"integer"},"enabled":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"monitor_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"name":{"type":"string"},"rrule":{"anyOf":[{"type":"string"},{"type":"null"}]},"scope":{"description":"Known values: MONITOR, ORG.","type":"string"},"timezone":{"type":"string"}},"required":["id","name","enabled","scope","dtstart","duration_minutes","rrule","timezone","created_at"],"type":"object"},"type":"array"},"page":{"type":"integer"},"pages":{"type":"integer"},"size":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total","page","size","pages"],"type":"object"}{"additionalProperties":false,"properties":{"page":{"description":"Page number, 1 or more; default 1.","minimum":1,"type":"integer"},"q":{"description":"Case-insensitive substring of the name or the target, up to 255 characters.","maxLength":255,"type":"string"},"size":{"description":"Rows per page, 1 to 100; default 25. Keep paging until you have seen total rows.","maximum":100,"minimum":1,"type":"integer"},"sort":{"description":"status (the default: PENDING, DOWN, DEGRADED, UP, PAUSED, then by name), up_first (healthy first), name, newest, oldest, or ssl_expiry (soonest-expiring certificates first; monitors with no known expiry, non-SSL types or not checked yet, last).","enum":["status","up_first","name", ⟨3 unchanged words⟩ ,"type":"string"},"status":{"description":"Keep monitors in any of these states: a JSON array. PENDING means no verdict yet.","items":{"enum":["PENDING","UP" ⟨5 unchanged words⟩ ,"type":"array"},"tag":{"description":"Keep items carrying these tags: a JSON array of up to 10 tags, each up to 50 characters, lowercased before matching. tag_match decides whether all or any of them must match.","items":{"maxLength":50,"type":"string"},"maxItems":10,"type":"array"},"tag_match":{"description":"all (the default): an item must carry every tag in tag. any: at least one of them.","enum":["all","any"],"type":"string"},"type":{"description":"Keep monitors of any of these types: a JSON array.","items":{"enum":["HTTP","PING ⟨10 unchanged words⟩
before
—after
{"properties":{"regions":{"items":{"properties":{"city":{"type":"string"},"code":{"type":"string"},"country_code":{"type":"string"},"display_name":{"type":"string"},"group":{"type":"string"},"group_display_name":{"type":"string"}},"required":["code","display_name","city","country_code","group","group_display_name"],"type":"object"},"type":"array"}},"required":["regions"],"type":"object"}{"additionalProperties":false,"properties":{"page":{"description":"Page number, 1 or more; default 1.","minimum":1,"type":"integer"},"page_id":{"description":"The status page's uuid from list_status_pages. An id that is not a status page of this organization is a 404.","format":"uuid","type":"string"},"size":{"description":"Rows per page, 1 to 100; default 25. Keep paging until you have seen total rows.","maximum":100,"minimum":1,"type": ⟨5 unchanged words⟩
before
—after
{"properties":{"items":{"items":{"properties":{"component_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"is_auto":{"type":"boolean"},"notified_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"status":{"description":"Known values: INVESTIGATING, IDENTIFIED, MONITORING, RESOLVED.","type":"string"},"title":{"type":"string"},"updates":{"items":{"properties":{"body":{"type":"string"},"created_at":{"type":"string"},"created_by":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"status":{"description":"Known values: INVESTIGATING, IDENTIFIED, MONITORING, RESOLVED.","type":"string"}},"required":["id","status","body","created_by","created_at"],"type":"object"},"type":"array"}},"required":["id","title","status","is_auto","started_at","resolved_at","notified_at","component_ids","updates"],"type":"object"},"type":"array"},"page":{"type":"integer"},"pages":{"type":"integer"},"size":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total","page","size","pages"],"type":"object"}{"additionalProperties":false,"properties":{"page":{"description":"Page number, 1 or more; default 1.","minimum":1,"type":"integer"},"size":{"description":"Rows per page, 1 to 100; default 25. Keep paging until you have seen total rows.","maximum":100,"minimum":1,"type":"integer"},"sort":{"description":"created_at (the default, newest first) or name.","enum":["name","created_at"],"type ⟨4 unchanged words⟩
before
—after
{"properties":{"items":{"items":{"properties":{"created_at":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"groups":{"items":{"properties":{"components":{"items":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"monitor_id":{"format":"uuid","type":"string"},"position":{"type":"integer"}},"required":["id","monitor_id","display_name","position"],"type":"object"},"type":"array"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"position":{"type":"integer"}},"required":["id","name","position","components"],"type":"object"},"type":"array"},"history_days":{"type":"integer"},"id":{"format":"uuid","type":"string"},"is_published":{"type":"boolean"},"name":{"type":"string"},"slug":{"type":"string"},"ungrouped_components":{"items":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"monitor_id":{"format":"uuid","type":"string"},"position":{"type":"integer"}},"required":["id","monitor_id","display_name","position"],"type":"object"},"type":"array"}},"required":["id","slug","name","description","is_published","history_days","created_at","groups","ungrouped_components"],"type":"object"},"type":"array"},"page":{"type":"integer"},"pages":{"type":"integer"},"size":{"type":"integer"},"total":{"type":"integer"}},"required":["items","total","page","size","pages"],"type":"object"}{"additionalProperties":false,"properties":{"kind":{"description":"monitor or heartbeat lists only the tags that kind of item uses; all (the default) lists both. Both counts are reported either way.","enum":["monitor","heartbeat","all"] ⟨5 unchanged words⟩
before
—after
{"properties":{"items":{"items":{"properties":{"heartbeat_count":{"type":"integer"},"monitor_count":{"type":"integer"},"tag":{"type":"string"}},"required":["tag","monitor_count","heartbeat_count"],"type":"object"},"type":"array"}},"required":["items"],"type":"object"}{"additionalProperties":false,"properties":{"heartbeat_id":{"description":"The heartbeat's uuid from list_heartbeats. An id that is not a heartbeat of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"created_at":{"type":"string"},"grace_seconds":{"type":"integer"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"last_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"last_ping_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_start_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"notification_cooldown_seconds":{"type":"integer"},"overdue_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"period_seconds":{"type":"integer"},"ping_url":{"type":"string"},"state":{"description":"Known values: PENDING, UP, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"updated_at":{"type":"string"}},"required":["id","name","state","period_seconds","grace_seconds","ping_url","last_ping_at","last_success_at","last_start_at","last_duration_ms","overdue_at","notification_cooldown_seconds","is_active","created_at","updated_at"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"badge_enabled":{"type":"boolean"},"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"config":{"additionalProperties":true,"type":"object"},"confirmation_threshold":{"type":"integer"},"created_at":{"type":"string"},"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"next_run_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"notification_cooldown_seconds":{"type":"integer"},"region_statuses":{"description":"Per-region latest status, sorted by region name.\n\nBuilt from ``region_snapshots``; ``job_id`` is dropped (internal\ndedup key) and malformed/partial snapshot rows are skipped rather\nthan failing the read.","items":{"properties":{"checked_at":{"type":"string"},"display_name":{"type":"string"},"region":{"type":"string"},"status":{"description":"Known values: UP, DEGRADED, DOWN, ERROR.","type":"string"}},"required":["region","status","checked_at","display_name"],"type":"object"},"type":"array"},"regions":{"items":{"type":"string"},"type":"array"},"ssl_cert_info":{"anyOf":[{"properties":{"issuer":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_after":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_before":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"valid":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"type":"object"},{"type":"null"}]},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"timeout_seconds":{"type":"integer"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"},"updated_at":{"type":"string"},"user_id":{"format":"uuid","type":"string"}},"required":["id","user_id","name","type","target","interval_seconds","timeout_seconds","regions","config","status","last_checked_at","next_run_at","confirmation_threshold","notification_cooldown_seconds","ssl_expires_at","is_active","created_at","updated_at","region_statuses"],"type":"object"}{"additionalProperties":false,"properties":{"body":{"description":"The message subscribers read, 1 to 5000 characters.","maxLength":5000,"minLength":1,"type":"string"},"incident_id":{"description":"The status page incident's uuid from list_status_page_incidents (not from list_incidents). An unknown id is a 404.","format":"uuid","type":"string"},"page_id":{"description":"The status page's uuid from list_status_pages. An id that is not a status page of this organization is a 404.","format":"uuid","type":"string"},"status":{"description":"INVESTIGATING, IDENTIFIED, MONITORING or RESOLVED; RESOLVED closes the incident on the page.","enum":["INVESTIGATING","IDENTIFIED","MONITORING" ⟨10 unchanged words⟩
before
—after
{"properties":{"component_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"is_auto":{"type":"boolean"},"notified_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"status":{"description":"Known values: INVESTIGATING, IDENTIFIED, MONITORING, RESOLVED.","type":"string"},"title":{"type":"string"},"updates":{"items":{"properties":{"body":{"type":"string"},"created_at":{"type":"string"},"created_by":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"status":{"description":"Known values: INVESTIGATING, IDENTIFIED, MONITORING, RESOLVED.","type":"string"}},"required":["id","status","body","created_by","created_at"],"type":"object"},"type":"array"}},"required":["id","title","status","is_auto","started_at","resolved_at","notified_at","component_ids","updates"],"type":"object"}{"additionalProperties":false,"properties":{"dtstart":{"description":"The first start, an ISO 8601 date-time in the wall-clock time of timezone, for example 2026-10-14T22:00:00. A UTC offset or Z is a 422.","format":"date-time","type":"string"},"duration_minutes":{"description":"How long each occurrence lasts, 1 to 40320 minutes.","exclusiveMinimum":0,"maximum":40320,"type":"integer"},"rrule":{"description":"Repeats the window: one iCal RRULE without the RRULE: prefix, at most 1024 characters, for example FREQ=WEEKLY;BYDAY=SU;BYHOUR=3. Hourly, minutely and secondly frequencies are refused. Omit it for a one-time window.","maxLength":1024,"type":"string"},"timezone":{"description":"IANA zone name such as Europe/Berlin, at most 64 characters. The schedule repeats in it, so a weekly 03:00 stays 03:00 across daylight-saving changes. Defaults to the organization's timezone.","maxLength":64,"type":"string"}}, ⟨5 unchanged words⟩
{"additionalProperties":false,"properties":{"from":{"description":"The existing tag, as list_tags shows it.","minLength":1,"type":"string"},"to":{"description":"The new name. Each tag is trimmed, lowercased and deduplicated on write, at most 50 characters of a-z, 0-9 and : _ . / -, starting with a letter or digit. Reuse names from list_tags rather than inventing near-duplicates.","minLength":1,"type":"string"}}, ⟨5 unchanged words⟩
before
—after
{"properties":{"from":{"type":"string"},"heartbeats_updated":{"type":"integer"},"monitors_updated":{"type":"integer"},"to":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["from","monitors_updated","heartbeats_updated"],"type":"object"}{"additionalProperties":false,"properties":{"heartbeat_id":{"description":"The heartbeat's uuid from list_heartbeats. An id that is not a heartbeat of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"created_at":{"type":"string"},"grace_seconds":{"type":"integer"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"last_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"last_ping_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_start_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"notification_cooldown_seconds":{"type":"integer"},"overdue_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"period_seconds":{"type":"integer"},"ping_url":{"type":"string"},"state":{"description":"Known values: PENDING, UP, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"updated_at":{"type":"string"}},"required":["id","name","state","period_seconds","grace_seconds","ping_url","last_ping_at","last_success_at","last_start_at","last_duration_ms","overdue_at","notification_cooldown_seconds","is_active","created_at","updated_at"],"type":"object"}{"additionalProperties":false,"properties":{"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"}} ⟨4 unchanged words⟩
before
—after
{"properties":{"badge_enabled":{"type":"boolean"},"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"config":{"additionalProperties":true,"type":"object"},"confirmation_threshold":{"type":"integer"},"created_at":{"type":"string"},"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"next_run_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"notification_cooldown_seconds":{"type":"integer"},"region_statuses":{"description":"Per-region latest status, sorted by region name.\n\nBuilt from ``region_snapshots``; ``job_id`` is dropped (internal\ndedup key) and malformed/partial snapshot rows are skipped rather\nthan failing the read.","items":{"properties":{"checked_at":{"type":"string"},"display_name":{"type":"string"},"region":{"type":"string"},"status":{"description":"Known values: UP, DEGRADED, DOWN, ERROR.","type":"string"}},"required":["region","status","checked_at","display_name"],"type":"object"},"type":"array"},"regions":{"items":{"type":"string"},"type":"array"},"ssl_cert_info":{"anyOf":[{"properties":{"issuer":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_after":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_before":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"valid":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"type":"object"},{"type":"null"}]},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"timeout_seconds":{"type":"integer"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"},"updated_at":{"type":"string"},"user_id":{"format":"uuid","type":"string"}},"required":["id","user_id","name","type","target","interval_seconds","timeout_seconds","regions","config","status","last_checked_at","next_run_at","confirmation_threshold","notification_cooldown_seconds","ssl_expires_at","is_active","created_at","updated_at","region_statuses"],"type":"object"}{"additionalProperties":false,"properties":{"channel_ids":{"description":"Notification channel uuids from list_channels. When passed it replaces the whole binding; [] clears it, after which every verified, active channel is alerted; omit it to keep the binding. An id that is not an active channel of this organization is a 404.","items":{"format":"uuid","type":"string"},"type":"array"},"grace_seconds":{"description":"Extra seconds of silence tolerated after the period before the heartbeat is reported late, 0 to 2592000; it may exceed the period.","maximum":2592000,"minimum":0,"type":"integer"},"heartbeat_id":{"description":"The heartbeat's uuid from list_heartbeats. An id that is not a heartbeat of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"},"name":{"description":"Display name, 1 to 255 characters.","maxLength":255,"minLength":1,"type":"string"},"notification_cooldown_seconds":{"description":"60 to 86400 seconds; 1800 when not set on create. Only holds back a duplicate first alert for the same incident within that window. Repeat reminders while an incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (get_plan_usage; 0 means no reminders) instead, and the recovery alert is never held back.","maximum":86400,"minimum":60,"type":"integer"},"period_seconds":{"description":"How often the job runs, 60 to 2592000 seconds. 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).","maximum":2592000,"minimum":60,"type":"integer"},"tags":{"description":"Replaces the whole tag list when passed, at most 10; [] clears it; omit it to keep the tags. Each tag is trimmed, lowercased and deduplicated on write, at most 50 characters of a-z, 0-9 and : _ . / -, starting with a letter or digit. Reuse names from list_tags rather than inventing near-duplicates.","items":{"type":"string"},"type ⟨5 unchanged words⟩
before
—after
{"properties":{"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"created_at":{"type":"string"},"grace_seconds":{"type":"integer"},"id":{"format":"uuid","type":"string"},"is_active":{"type":"boolean"},"last_duration_ms":{"anyOf":[{"type":"integer"},{"type":"null"}]},"last_ping_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_start_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_success_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"notification_cooldown_seconds":{"type":"integer"},"overdue_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"period_seconds":{"type":"integer"},"ping_url":{"type":"string"},"state":{"description":"Known values: PENDING, UP, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"updated_at":{"type":"string"}},"required":["id","name","state","period_seconds","grace_seconds","ping_url","last_ping_at","last_success_at","last_start_at","last_duration_ms","overdue_at","notification_cooldown_seconds","is_active","created_at","updated_at"],"type":"object"}{"additionalProperties":false,"properties":{"dtstart":{"description":"The first start, an ISO 8601 date-time in the wall-clock time of timezone, for example 2026-10-14T22:00:00. A UTC offset or Z is a 422.","format":"date-time","type":"string"},"duration_minutes":{"description":"How long each occurrence lasts, 1 to 40320 minutes.","exclusiveMinimum":0,"maximum":40320,"type":"integer"},"enabled":{"description":"false keeps the window but stops it silencing alerts.","type":"boolean"},"monitor_ids":{"description":"Replaces the list when passed. Monitor uuids from list_monitors, at least one when scope is MONITOR. An id that is not a monitor of this organization is a 404.","items":{"format":"uuid","type":"string"},"type":"array"},"name":{"description":"Display name, 1 to 255 characters.","maxLength":255,"minLength":1,"type":"string"},"rrule":{"description":"Repeats the window: one iCal RRULE without the RRULE: prefix, at most 1024 characters, for example FREQ=WEEKLY;BYDAY=SU;BYHOUR=3. Hourly, minutely and secondly frequencies are refused.","maxLength":1024,"type":"string"},"scope":{"description":"ORG covers every monitor of the organization and ignores monitor_ids; MONITOR covers only monitor_ids.","enum":["MONITOR","ORG"],"type":"string"},"timezone":{"description":"IANA zone name such as Europe/Berlin, at most 64 characters. The schedule repeats in it, so a weekly 03:00 stays 03:00 across daylight-saving changes.","maxLength":64,"type":"string"},"window_id":{"description":"The window's uuid from list_maintenance_windows. An id that is not a window of this organization is a 404.","format":"uuid","type":"string"} ⟨4 unchanged words⟩
before
—after
{"properties":{"created_at":{"type":"string"},"dtstart":{"type":"string"},"duration_minutes":{"type":"integer"},"enabled":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"monitor_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"name":{"type":"string"},"rrule":{"anyOf":[{"type":"string"},{"type":"null"}]},"scope":{"description":"Known values: MONITOR, ORG.","type":"string"},"timezone":{"type":"string"}},"required":["id","name","enabled","scope","dtstart","duration_minutes","rrule","timezone","created_at"],"type":"object"}{"additionalProperties":false,"properties":{"badge_enabled":{"description":"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.","type":"boolean"},"channel_ids":{"description":"Notification channel uuids from list_channels. When passed it replaces the whole binding; [] clears it, after which every verified, active channel is alerted; omit it to keep the binding. An id that is not an active channel of this organization is a 404.","items":{"format":"uuid","type": ⟨2 unchanged words⟩ array"},"config":{"additionalProperties":true,"description":"Replaces the monitor's whole config, not just the keys you send: a field of the type's schema you leave out resets to its default (read the current one with get_monitor first). Sending only port on a TCP monitor whose expected_state is closed resets it to open. A port-list TCP monitor cannot switch to a single port (422). An object whose fields depend on type, all optional unless stated. HTTP: method (GET, HEAD, POST, PUT, PATCH or DELETE, any case; default GET); expected_status_codes (non-empty list of codes 100 to 599, default [200]); keyword (case-sensitive substring the body must contain, at most 1024 characters, not with HEAD); follow_redirects (default true); verify_ssl (default true; false skips TLS verification, so the monitor can never report TLS_INVALID); request_headers (object of name to value: at most 20, a name at most 128 characters of letters, digits and ! # $ % & ' * + - . ^ _ ` | ~, a value at most 1024 bytes of printable ASCII, space or tab, the whole object at most 8192 bytes as JSON; names differing only in case, and Host, Content-Length, Transfer-Encoding, Connection, Upgrade, TE, Trailer, Keep-Alive, CF-Connecting-IP or any Proxy-* name, are a 422); request_body (string, at most 8192 bytes as UTF-8, needs POST, PUT, PATCH or DELETE). Reads return every request_headers value as the literal __FETTLE_UNCHANGED__; writing that literal back in an update keeps the stored value (on create it is a 422). PING: packet_count (1 to 20, default 4). SSL: warn_before_days (1 to 365, default 14) and port (1 to 65535, default 443). TCP: either port (1 to 65535) with expected_state \"open\" (default) or \"closed\", or ports (1 to 20 distinct ports that must all be closed, which needs expected_state \"closed\", exactly one region and interval_seconds of at least 300; a check fails when any of them accepts a connection, and the monitor goes DOWN once confirmation_threshold failures confirm it). Both port and ports, or neither, is a 422; expected_state values are lowercase. DNS: record_type (A, AAAA, CNAME, MX, TXT or NS; required) and expected_value (at most 2048 characters). With expected_value one answer must equal it (case-insensitive, ignoring surrounding spaces and a trailing dot; exact for TXT); without it any answer passes. MX answers are the mail host names without priority (mail.example.com, not 10 mail.example.com). A and AAAA look up every address of the host, IPv4 and IPv6 alike, and any one may match; write an IPv6 address in its shortest form.","type":"object"},"confirmation_threshold":{"description":"How many checks in a row must fail in every region before the monitor goes DOWN and an incident opens, 1 to 10; 3 when not set on create.","maximum":10,"minimum":1,"type":"integer"},"interval_seconds":{"description":"Seconds between checks, 30 to 86400. The plan sets a minimum (limits.min_interval_seconds) and caps how many monitors may check more often than every 60 seconds (max_fast_monitors); breaking either is a 403 naming the limit.","maximum":86400,"minimum":30,"type":"integer"},"monitor_id":{"description":"The monitor's uuid from list_monitors. An id that is not a monitor of this organization, or a deleted one, is a 404.","format":"uuid","type":"string"},"name":{"description":"Display name, 1 to 255 characters.","maxLength":255,"minLength":1,"type":"string"},"notification_cooldown_seconds":{"description":"60 to 86400 seconds; 1800 when not set on create. Only holds back a duplicate first alert for the same incident within that window. Repeat reminders while an incident stays open and unacknowledged follow the plan's renotify_interval_seconds and renotify_max_count (get_plan_usage; 0 means no reminders) instead, and the recovery alert is never held back.","maximum":86400,"minimum":60,"type":"integer"},"regions":{"description":"One or more distinct region codes, for example eu-central: the plan's choices are limits.allowed_regions in get_plan_usage. An unknown code, or more regions than the plan's max_regions, is a 403. SSL and DNS monitors take exactly one region (422 otherwise).","items":{"type":"string"},"minItems":1,"type":"array"},"tags":{"description":"Replaces the whole tag list when passed, at most 10; [] clears it; omit it to keep the tags. Each tag is trimmed, lowercased and deduplicated on write, at most 50 characters of a-z, 0-9 and : _ . / -, starting with a letter or digit. Reuse names from list_tags rather than inventing near-duplicates.","items":{"type":"string"},"type":"array"},"timeout_seconds":{"description":"Seconds one check may take before it fails, 1 to 120.","maximum":120,"minimum":1,"type": ⟨5 unchanged words⟩
before
—after
{"properties":{"badge_enabled":{"type":"boolean"},"channel_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"config":{"additionalProperties":true,"type":"object"},"confirmation_threshold":{"type":"integer"},"created_at":{"type":"string"},"id":{"format":"uuid","type":"string"},"interval_seconds":{"type":"integer"},"is_active":{"type":"boolean"},"last_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"next_run_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"notification_cooldown_seconds":{"type":"integer"},"region_statuses":{"description":"Per-region latest status, sorted by region name.\n\nBuilt from ``region_snapshots``; ``job_id`` is dropped (internal\ndedup key) and malformed/partial snapshot rows are skipped rather\nthan failing the read.","items":{"properties":{"checked_at":{"type":"string"},"display_name":{"type":"string"},"region":{"type":"string"},"status":{"description":"Known values: UP, DEGRADED, DOWN, ERROR.","type":"string"}},"required":["region","status","checked_at","display_name"],"type":"object"},"type":"array"},"regions":{"items":{"type":"string"},"type":"array"},"ssl_cert_info":{"anyOf":[{"properties":{"issuer":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_after":{"anyOf":[{"type":"string"},{"type":"null"}]},"not_before":{"anyOf":[{"type":"string"},{"type":"null"}]},"subject":{"anyOf":[{"type":"string"},{"type":"null"}]},"valid":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"type":"object"},{"type":"null"}]},"ssl_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Known values: PENDING, UP, DEGRADED, DOWN, PAUSED.","type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"target":{"type":"string"},"timeout_seconds":{"type":"integer"},"type":{"description":"Known values: HTTP, PING, SSL, TCP, DNS.","type":"string"},"updated_at":{"type":"string"},"user_id":{"format":"uuid","type":"string"}},"required":["id","user_id","name","type","target","interval_seconds","timeout_seconds","regions","config","status","last_checked_at","next_run_at","confirmation_threshold","notification_cooldown_seconds","ssl_expires_at","is_active","created_at","updated_at","region_statuses"],"type":"object"}before
—after
{"properties":{"component_ids":{"items":{"format":"uuid","type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"is_auto":{"type":"boolean"},"notified_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"status":{"description":"Known values: INVESTIGATING, IDENTIFIED, MONITORING, RESOLVED.","type":"string"},"title":{"type":"string"},"updates":{"items":{"properties":{"body":{"type":"string"},"created_at":{"type":"string"},"created_by":{"anyOf":[{"format":"uuid","type":"string"},{"type":"null"}]},"id":{"format":"uuid","type":"string"},"status":{"description":"Known values: INVESTIGATING, IDENTIFIED, MONITORING, RESOLVED.","type":"string"}},"required":["id","status","body","created_by","created_at"],"type":"object"},"type":"array"}},"required":["id","title","status","is_auto","started_at","resolved_at","notified_at","component_ids","updates"],"type":"object"}