Monitor uptime and incidents, run checks, and publish status updates from your Uptimepage org.
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Acknowledge an incident: take ownership and halt escalation. Internal/operational only — does NOT post anything to the public status page. Use post_incident_update for customer-facing updates. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
The incident id.
Optional internal note recorded on the incident's activity timeline. This is operator-facing, not published to the public status page.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Acknowledge an incident: take ownership and halt escalation. Internal/operational only — does NOT post anything to the public status page. Use post_incident_update for customer-facing updates. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The incident id. |
| note | string | null | Optional internal note recorded on the incident's activity timeline. This is operator-facing, not published to the public status page. |
{
"type": "object",
"title": "IncidentActionArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The incident id."
},
"note": {
"type": [
"string",
"null"
],
"description": "Optional internal note recorded on the incident's activity timeline.\nThis is operator-facing, not published to the public status page."
}
},
"description": "`acknowledge_incident` / `resolve_incident` argument."
}Add monitors to a status page as public components, in one confirmation where the client can show a prompt. Give each a public_name the page's readers will understand, since the monitor's own name is operator-facing, and a public_group to file related components together. Monitors already on the page are reported as such rather than duplicated. detail_link_enabled publishes a per-monitor detail view that shows the monitor's real name and address, not public_name. Not read-only.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The page slug (from `list_status_pages`). |
| components* | array | The monitors to add, in the order they should appear. |
{
"type": "object",
"$defs": {
"NewComponentArg": {
"type": "object",
"required": [
"monitor_id"
],
"properties": {
"monitor_id": {
"type": "string",
"description": "The monitor id (from `list_monitors`)."
},
"sort_order": {
"type": [
"integer",
"null"
],
"format": "int32",
"description": "Position on the page, ascending. Defaults to the order given."
},
"public_name": {
"type": [
"string",
"null"
],
"description": "Public-facing name, at most 80 characters. Defaults to the monitor's\nown name, which is operator-facing and may not read well in public."
},
"public_group": {
"type": [
"string",
"null"
],
"description": "Grouping label, at most 50 characters. Components sharing a label are\nrendered together."
},
"public_description": {
"type": [
"string",
"null"
],
"description": "Public description, at most 200 characters."
},
"detail_link_enabled": {
"type": [
"boolean",
"null"
],
"description": "Publish a per-monitor detail view. That view renders the monitor's\noperator-side name and address, not `public_name`."
}
},
"description": "One monitor to curate onto a page."
}
},
"title": "AddComponentsArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"components"
],
"properties": {
"slug": {
"type": "string",
"description": "The page slug (from `list_status_pages`)."
},
"components": {
"type": "array",
"items": {
"$ref": "#/$defs/NewComponentArg"
},
"description": "The monitors to add, in the order they should appear."
}
},
"description": "`add_status_page_components` argument."
}Cancel a maintenance window that has not ended. It leaves the status pages, stops holding paging, and stays listed under past as a record; subscribers already told about it are not sent a cancellation. To stop a running window early and keep it as completed work, use update_maintenance with end_now instead. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The window id (from `list_maintenance`). |
{
"type": "object",
"title": "MaintenanceIdArg",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The window id (from `list_maintenance`)."
}
},
"description": "Argument of the maintenance tools that take only an id.",
"additionalProperties": false
}Schedule a maintenance window for planned work on some monitors. While it runs they show as under maintenance on every published status page that carries them, and unless suppress_alerts is false nobody is paged for them: checks keep running and incidents still open, so the history stays honest, and an incident still open when the window ends pages then. Prefer this over pause_monitor for planned work. Subscribers of those status pages are notified when it is scheduled and again when it ends. Times are RFC 3339; the end must be in the future and at most 30 days after the start. Shows the window, its monitors, whether paging is held and where it is announced, where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Argument | Type | Description |
|---|---|---|
| title* | string | Shown on the status page and in subscriber notices. At most 200 characters. |
| ends_at* | string | RFC 3339 end: in the future, after the start, and at most 30 days after it. |
| starts_at* | string | RFC 3339 start. A start already past opens the window at once. |
| description | string | null | Shown with the title. At most 5000 characters. |
| monitor_ids* | array | The monitors the work touches, by id from `list_monitors`. At least one. |
| suppress_alerts | boolean | null |
Create a monitor for an http, tcp, ping, dns, tls_cert, domain_expiry, heartbeat or manual check. A manual monitor has nothing to probe; set its state afterwards with set_monitor_state. The check is run once before anything is saved and the result is shown to the user along with every setting it would apply; where the client can show a prompt, nothing is created unless they approve; otherwise the monitor is created on the token's scope and the trial result comes back with it. Bind it to alerts as you create it: pass channel_ids from list_notification_channels (this needs the channels:read scope), and if the org has no channel yet, say so rather than leaving a monitor that pages nobody. Leave regions unset unless the user named where they want the check to run from — omitted, it probes from the operator's default set, which is already the intended coverage; naming more regions than the plan allows is refused outright. Request headers and a request body can be set, but a credential must be referenced rather than pasted: write `Bearer {{ my_key }}` and call list_variables for the keys this org has. A URL carrying a username or password is refused, and browser flows cannot be created here — add those in the app. Not read-only.
| Argument | Type | Description |
|---|---|---|
| name* | string | What the operator will see in lists and alerts. |
| tags | array | null | At most 50, each at most 50 characters. |
| check* | any | |
| regions | array | null | Probe regions to run the check from, as ids from `list_regions`. Omit unless the user named the places they want covered: omitting takes the regions `list_regions` flags `default_selected`, which is the coverage the operator chose, capped at the plan's region cap and falling back to the control plane's own region when nothing is flagged. A vantage point can be offered without being on by default, so the full catalog is not the thorough answer. Rejected for a heartbeat, which is pinged rather than probed, and a set larger than a `max_regions` `list_regions` reports is refused outright, not trimmed to fit. |
Create several monitors at once, with one confirmation covering the batch where the client can show a prompt. Every check is run once first and all the results are shown together, so a misconfigured endpoint is visible before anything is saved. An item that fails validation or its trial run is reported in the results and the rest are still created. Prefer this over repeated create_monitor calls whenever the user names more than one thing to watch: it costs them one prompt instead of many. Same per-monitor fields and same limits as create_monitor. Not read-only.
| Argument | Type | Description |
|---|---|---|
| monitors* | array | The monitors to create. Each is validated and probed before the single confirmation covering the batch. |
{
"type": "object",
"$defs": {
"NewCheck": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"url"
],
"properties": {
"url": {
"type": "string"
},
"body": {
"type": [
"string",
"null"
],
"description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference."
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"type": [
"string",
"null"
],
"description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`."
},
"headers": {
"type": [
"object",
"null"
],
"description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
"additionalProperties": {
"type": "string"
}
},
"ip_version": {
"type": [
"string",
"null"
],
"description": "`any` (default), `ipv4` or `ipv6`. See `ip_version` on `Tcp`."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0,
"description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`."
},
"verify_tls": {
"type": [
"boolean",
"null"
],
"description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch."
},
"expected_status": {
"type": [
"string",
"null"
],
"description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`."
},
"follow_redirects": {
"type": [
"boolean",
"null"
],
"description": "Defaults to true, following at most 5 hops."
},
"expected_body_contains": {
"type": [
"string",
"null"
],
"description": "Text the response body must contain for the check to pass."
}
},
"description": "An HTTP(S) endpoint.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"host",
"port"
],
"properties": {
"host": {
"type": "string"
},
"port": {
"type": "integer",
"format": "uint16",
"maximum": 65535,
"minimum": 0
},
"type": {
"type": "string",
"const": "tcp"
},
"ip_version": {
"type": [
"string",
"null"
],
"description": "`any` (default) dials whichever of IPv6 and IPv4 connects first,\nso a broken AAAA record or IPv6 firewall stays hidden. `ipv4` or\n`ipv6` checks only that family and fails when the host has no\naddress in it. To watch both, create one monitor per family."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
}
},
"description": "A TCP port accepting connections.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"host"
],
"properties": {
"host": {
"type": "string"
},
"type": {
"type": "string",
"const": "ping"
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
}
},
"description": "ICMP reachability.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"domain"
],
"properties": {
"type": {
"type": "string",
"const": "dns"
},
"domain": {
"type": "string",
"description": "Name to resolve. A `ptr` lookup also takes an IP address."
},
"resolver": {
"type": [
"string",
"null"
],
"description": "Resolver to ask. Defaults to the agent's own."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
},
"record_type": {
"type": [
"string",
"null"
],
"description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`."
},
"expected_records": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Every record the answer must hold and nothing else, written as a\nresult's `answers` shows them (`10 mail.example.com.` for MX, or a\nbare `mail.example.com` to allow any preference). Any record\nadded, removed or changed fails the check. Not combined with\n`expected_contains`."
},
"expected_contains": {
"type": [
"string",
"null"
],
"description": "Text the answer must contain."
}
},
"description": "A DNS record resolving, optionally to an expected value.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"host"
],
"properties": {
"host": {
"type": "string"
},
"port": {
"type": [
"integer",
"null"
],
"format": "uint16",
"maximum": 65535,
"minimum": 0,
"description": "Defaults to 443."
},
"type": {
"type": "string",
"const": "tls_cert"
},
"warn_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Days of remaining validity that degrade the check. Default 30."
},
"ip_version": {
"type": [
"string",
"null"
],
"description": "`any` (default), `ipv4` or `ipv6`. See `ip_version` on `Tcp`."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
},
"critical_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Days of remaining validity that fail it. Default 7."
}
},
"description": "A TLS certificate's remaining validity.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"domain"
],
"properties": {
"type": {
"type": "string",
"const": "domain_expiry"
},
"domain": {
"type": "string"
},
"warn_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Default 30."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
},
"critical_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Default 7."
}
},
"description": "A domain registration's remaining validity.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"period_secs",
"grace_secs"
],
"properties": {
"type": {
"type": "string",
"const": "heartbeat"
},
"grace_secs": {
"type": "integer",
"format": "uint64",
"minimum": 0,
"description": "Lateness tolerated before the monitor fails."
},
"period_secs": {
"type": "integer",
"format": "uint64",
"minimum": 0,
"description": "How often the job is expected to report."
},
"max_runtime_secs": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0,
"description": "Fail a run that starts and does not finish within this."
}
},
"description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"const": "manual"
}
},
"description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
"additionalProperties": false
}
],
"description": "What a new monitor should check. Narrower than what the product supports on\npurpose: no request headers, body or credentials, since those are literal\nsecrets an operator types once and this tool would carry through a chat log;\nand no browser flow, which needs the fill values withheld everywhere else.\nAdd those in the Uptimepage app after the monitor exists."
},
"RegionPolicyArg": {
"type": "object",
"required": [
"mode"
],
"properties": {
"mode": {
"$ref": "#/$defs/RegionPolicyMode"
},
"count": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Required with `mode: \"count\"`, ignored otherwise. Must be between 1 and\nthe number of regions the fleet has; `list_regions` reports them."
}
},
"description": "How many regions must agree a monitor is down before an incident opens.\n`get_monitor` reads this back in the same shape, so the enum of legal modes\nis one definition rather than a written-out list that can drift.",
"additionalProperties": false
},
"RegionPolicyMode": {
"oneOf": [
{
"type": "string",
"const": "any",
"description": "One region down is enough."
},
{
"type": "string",
"const": "majority",
"description": "More than half of them."
},
{
"type": "string",
"const": "all",
"description": "Every region."
},
{
"type": "string",
"const": "count",
"description": "A fixed number."
}
],
"description": "How the quorum is expressed. `count` carries its number in `count`."
},
"CreateMonitorArgs": {
"type": "object",
"required": [
"name",
"check"
],
"properties": {
"name": {
"type": "string",
"description": "What the operator will see in lists and alerts."
},
"tags": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "At most 50, each at most 50 characters."
},
"check": {
"$ref": "#/$defs/NewCheck"
},
"regions": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Probe regions to run the check from, as ids from `list_regions`. Omit\nunless the user named the places they want covered: omitting takes the\nregions `list_regions` flags `default_selected`, which is the coverage\nthe operator chose, capped at the plan's region cap and falling back to\nthe control plane's own region when nothing is flagged. A vantage point\ncan be offered without being on by default, so the full catalog is not\nthe thorough answer. Rejected for a heartbeat, which is pinged rather\nthan probed, and a set larger than a `max_regions` `list_regions`\nreports is refused outright, not trimmed to fit."
},
"group_name": {
"type": [
"string",
"null"
],
"description": "Operator-side grouping label."
},
"channel_ids": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Channel ids from `list_notification_channels` to alert. Omitting them\ncreates a monitor that pages nobody, which is worth saying out loud\nrather than leaving for an outage to reveal. The channels themselves are\nset up in the app, since they hold the tokens and addresses."
},
"interval_secs": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0,
"description": "Seconds between checks, held to the plan's floor and the check kind's\nown floor. Omit it to get the cadence the app's own picker opens this\nkind at, which is well above the hard minimum for the slow-moving kinds:\na certificate is checked twice a day, a domain registration daily."
},
"region_policy": {
"anyOf": [
{
"$ref": "#/$defs/RegionPolicyArg"
},
{
"type": "null"
}
],
"description": "Detection quorum across probe regions."
},
"notify_recovery": {
"type": [
"boolean",
"null"
],
"description": "Whether recovery is announced. Defaults to true."
},
"alert_confirmations": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Consecutive failing checks before the monitor alerts. Minimum 1,\ndefaults to 2."
},
"recovery_period_secs": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Seconds a recovered monitor must stay healthy before its incident\ncloses; a failure confirmed inside the window keeps the incident open,\nso a flapping service reads as one outage. 0 to 1800; 0 closes on the\nconfirming checks alone. Defaults to 180 on an HTTP, TCP, ping, DNS or\nflow monitor and 0 on the rest. Not for a manual monitor."
},
"renotify_interval_secs": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Seconds before the first reminder while an outage stays unacknowledged;\neach further reminder waits twice as long, up to a day. 0 turns\nreminders off; otherwise at least 60. Defaults to 3600."
}
},
"description": "`create_monitor` arguments.",
"additionalProperties": false
}
},
"title": "CreateMonitorsArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"monitors"
],
"properties": {
"monitors": {
"type": "array",
"items": {
"$ref": "#/$defs/CreateMonitorArgs"
},
"description": "The monitors to create. Each is validated and probed before the single\nconfirmation covering the batch."
}
},
"description": "`create_monitors` argument."
}Create a status page. It is created unpublished unless you pass enabled, so its components can be curated before anyone can read it. The slug is the page's public address: it is first-come across the platform and moving it later breaks every existing link, so confirm it with the user rather than inventing one. Pass access with protected true to make it private: only the listed domains and addresses can open it, after signing in with a code sent to their email (Team plan). Add monitors to it with add_status_page_components. Not read-only.
| Argument | Type | Description |
|---|---|---|
| name* | string | Page display name, at most 80 characters. |
| slug* | string | URL slug, lowercase. This is the page's public address and cannot be guessed back later, so pick it deliberately. |
| access | any | Make it private from the start. Omit for a public page. |
| enabled | boolean | null | Defaults to false: a page is created dark so components can be curated before anyone can read it. |
{
"type": "object",
"$defs": {
"PageAccessArg": {
"type": "object",
"required": [
"protected"
],
"properties": {
"email": {
"$ref": "#/$defs/PageEmailAccessArg",
"default": {
"enabled": true,
"recheck_days": null,
"passkeys_enabled": true
}
},
"rules": {
"type": "array",
"items": {
"$ref": "#/$defs/PageAccessRuleArg"
},
"default": [],
"description": "Who can get an email code, up to 500 entries. Read back, these are\ncustomer data."
},
"password": {
"$ref": "#/$defs/PagePasswordAccessArg",
"default": {
"enabled": false
}
},
"protected": {
"type": "boolean",
"description": "Private when true: only people a way in lets through can open the\npage: the addresses and domains in `rules`, by a code sent to their\nemail, or anyone with the page password. False makes it public again\nand keeps the list and the password for next time."
},
"session_days": {
"type": [
"integer",
"null"
],
"format": "int32",
"default": null,
"description": "Keep a sign-in, by email or password, for 7, 30 or 90 days. Omit to\nkeep it until sign-out."
}
},
"description": "Who may open a status page; the same shape as the REST `access` field. As a\nwrite it replaces what is stored, whole.",
"additionalProperties": false
},
"PageAccessRuleArg": {
"type": "object",
"required": [
"kind",
"value"
],
"properties": {
"kind": {
"type": "string",
"description": "`domain` lets in every address at `value` (`example.com`); `address`\nlets in one person (`[email protected]`)."
},
"value": {
"type": "string"
}
},
"description": "One access list entry.",
"additionalProperties": false
},
"PageEmailAccessArg": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": true,
"description": "Defaults to true. A private page needs it or the password."
},
"recheck_days": {
"type": [
"integer",
"null"
],
"format": "int32",
"default": null,
"description": "Ask passkey viewers for an email code again after 30, 90 or 365 days.\nOmit to never ask."
},
"passkeys_enabled": {
"type": "boolean",
"default": true,
"description": "Let viewers save a passkey after an email sign-in. Defaults to true."
}
},
"description": "The emailed-code way in, and the passkeys that shortcut it.",
"additionalProperties": false
},
"PagePasswordAccessArg": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": false,
"description": "Anyone with the page password can open the page. Turning it on needs\none already set; turning it off keeps it and signs out everyone who\ncame in with it."
}
},
"description": "The page password way in. The password itself never passes through here:\nit is set in the app, the API or Terraform.",
"additionalProperties": false
}
},
"title": "CreateStatusPageArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Page display name, at most 80 characters."
},
"slug": {
"type": "string",
"description": "URL slug, lowercase. This is the page's public address and cannot be\nguessed back later, so pick it deliberately."
},
"access": {
"anyOf": [
{
"$ref": "#/$defs/PageAccessArg"
},
{
"type": "null"
}
],
"description": "Make it private from the start. Omit for a public page."
},
"enabled": {
"type": [
"boolean",
"null"
],
"description": "Defaults to false: a page is created dark so components can be curated\nbefore anyone can read it."
}
},
"description": "`create_status_page` argument.",
"additionalProperties": false
}A browser flow monitor's recent runs over a window (1h/24h/7d/30d): every declared step with its outcome and duration, the step a failure stopped on, and the page the browser saw. Use this to answer why a login check failed. Read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The monitor id (from `list_monitors`), of a `flow` monitor. |
| window* | string | Time window: `1h`, `24h`, `7d`, or `30d`. |
{
"type": "object",
"title": "FlowWindowArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"window"
],
"properties": {
"id": {
"type": "string",
"description": "The monitor id (from `list_monitors`), of a `flow` monitor."
},
"window": {
"type": "string",
"description": "Time window: `1h`, `24h`, `7d`, or `30d`."
}
},
"description": "`get_flow_runs` / `get_flow_step_trend` arguments."
}How long each step of a browser flow monitor takes over a window (1h/24h/7d/30d), and how far it has moved: per step the earliest and latest mean duration, their ratio, and how many runs passed or failed it. Use this to spot a step drifting toward failure while the monitor still reports up. Read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The monitor id (from `list_monitors`), of a `flow` monitor. |
| window* | string | Time window: `1h`, `24h`, `7d`, or `30d`. |
{
"type": "object",
"title": "FlowWindowArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"window"
],
"properties": {
"id": {
"type": "string",
"description": "The monitor id (from `list_monitors`), of a `flow` monitor."
},
"window": {
"type": "string",
"description": "Time window: `1h`, `24h`, `7d`, or `30d`."
}
},
"description": "`get_flow_runs` / `get_flow_step_trend` arguments."
}One incident: affected monitor, severity, open/resolved times, error sample, the full operator-update timeline, and the status pages an incident with no monitor is posted to. Read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The incident id (from `list_incidents` or `get_org_health`). |
{
"type": "object",
"title": "IncidentIdArg",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The incident id (from `list_incidents` or `get_org_health`)."
}
},
"description": "Argument of the incident tools that take only an id."
}Incident metrics over a trailing window (default 30 days): MTTA/MTTR in seconds, total incidents, counts by severity and state, auto- vs human-resolved, and the noisiest monitors. Read-only.
| Argument | Type | Description |
|---|---|---|
| window_days | integer | null | Trailing window in days (1..=365). Defaults to 30 when omitted. |
{
"type": "object",
"title": "GetIncidentMetricsArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"window_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Trailing window in days (1..=365). Defaults to 30 when omitted."
}
},
"description": "`get_incident_metrics` argument."
}One maintenance window: title, description, start and end, phase, the monitors it covers, and whether it holds their paging. Read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The window id (from `list_maintenance`). |
{
"type": "object",
"title": "MaintenanceIdArg",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The window id (from `list_maintenance`)."
}
},
"description": "Argument of the maintenance tools that take only an id.",
"additionalProperties": false
}One monitor's full configuration — everything the check asserts (expected status, body match, headers, timeout, redirect and TLS policy), the regions it probes from, and how it alerts (failing checks before it pages, whether recovery is announced, the reminder interval, the multi-region quorum, and the ids of the channels it notifies) — with its current state, last error, and 24h/30d uptime. Every field update_monitor can change is readable here, in the shape that tool takes. Read this before judging whether a response should have passed, or before changing a monitor. Credentials are withheld. Read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The monitor id (from `list_monitors`). |
{
"type": "object",
"title": "GetMonitorArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The monitor id (from `list_monitors`)."
}
},
"description": "`get_monitor` argument."
}One monitor's history over a window (1h/24h/7d/30d): uptime, latency series, a per-region split of the same window, failures with error text, and incident windows. Pass `region` to narrow it to one probe region and tell a partial outage from a total one. Read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The monitor id (from `list_monitors`). |
| region | string | null | Narrow uptime, the latency series, and the region breakdown to one probe region (an id the monitor is assigned to, from `get_monitor.regions`). Omit for every region together. |
| window* | string | Time window: `1h`, `24h`, `7d`, or `30d`. |
{
"type": "object",
"title": "GetMonitorHistoryArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"window"
],
"properties": {
"id": {
"type": "string",
"description": "The monitor id (from `list_monitors`)."
},
"region": {
"type": [
"string",
"null"
],
"description": "Narrow uptime, the latency series, and the region breakdown to one probe\nregion (an id the monitor is assigned to, from `get_monitor.regions`).\nOmit for every region together."
},
"window": {
"type": "string",
"description": "Time window: `1h`, `24h`, `7d`, or `30d`."
}
},
"description": "`get_monitor_history` arguments."
}Org health summary: per-state monitor totals and the worst currently-failing monitors. The one-shot answer to 'what is broken right now?'. Read-only.
No arguments.
{
"type": "object",
"properties": {}
}Which org this connector is bound to, and the account's resource usage against plan limits: monitors, status pages, members, components, and key policy values. Caps are pooled across every org the account owns, so the counts can exceed what this one org holds. Read-only.
No arguments.
{
"type": "object",
"properties": {}
}One status page: name, public URL, enabled, and its components with each linked monitor's current state. Read-only.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The page slug (from `list_status_pages`). |
{
"type": "object",
"title": "GetStatusPageArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The page slug (from `list_status_pages`)."
}
},
"description": "`get_status_page` argument.",
"additionalProperties": false
}List the org's incidents: incident id, affected monitor, severity, open/resolved times, and latest update phase. Defaults to currently-open ones; pass state="all" with an optional from/to window (default: last 30 days) for resolved history, and monitor_id to narrow to one monitor. Read-only.
| Argument | Type | Description |
|---|---|---|
| to | string | null | RFC 3339 end of the window. Defaults to now. Incidents that opened after it are excluded, running or not. |
| from | string | null | RFC 3339 start of the window. Defaults to 30 days ago. An incident that is still running is listed however long ago it opened. |
| state | string | null | Which incidents to return: `open` (default) for the ones still running, or `all` to include resolved ones inside the window. |
| cursor | string | null | Opaque pagination cursor from a previous call's `next_cursor`. It carries the whole query, so send it on its own: any other filter passed alongside it is ignored rather than silently changing the page. |
| monitor_id | string | null | Restrict to one monitor (id from `list_monitors`). |
{
"type": "object",
"title": "ListIncidentsArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"to": {
"type": [
"string",
"null"
],
"description": "RFC 3339 end of the window. Defaults to now. Incidents that opened after\nit are excluded, running or not."
},
"from": {
"type": [
"string",
"null"
],
"description": "RFC 3339 start of the window. Defaults to 30 days ago. An incident that\nis still running is listed however long ago it opened."
},
"state": {
"type": [
"string",
"null"
],
"description": "Which incidents to return: `open` (default) for the ones still running,\nor `all` to include resolved ones inside the window."
},
"cursor": {
"type": [
"string",
"null"
],
"description": "Opaque pagination cursor from a previous call's `next_cursor`. It\ncarries the whole query, so send it on its own: any other filter passed\nalongside it is ignored rather than silently changing the page."
},
"monitor_id": {
"type": [
"string",
"null"
],
"description": "Restrict to one monitor (id from `list_monitors`)."
}
},
"description": "`list_incidents` arguments. All filters are optional."
}List maintenance windows: title, start and end, phase (upcoming, active, completed or cancelled), the monitors each covers, and whether it holds their paging. status narrows to active, upcoming or past (ended or cancelled); the default is all, latest start first. Cursor-paginated. Read-only.
| Argument | Type | Description |
|---|---|---|
| cursor | string | null | Opaque pagination cursor from a previous call's `next_cursor`. It carries the whole query, so send it on its own. |
| status | any | Defaults to `all`. |
{
"type": "object",
"$defs": {
"MaintenanceStatus": {
"oneOf": [
{
"type": "string",
"const": "active",
"description": "Running now."
},
{
"type": "string",
"const": "upcoming",
"description": "Not started yet, soonest first."
},
{
"type": "string",
"const": "past",
"description": "Ended or cancelled, most recent first."
},
{
"type": "string",
"const": "all",
"description": "Every window, cancelled ones included, latest start first."
}
],
"description": "Which maintenance windows `list_maintenance` returns."
}
},
"title": "ListMaintenanceArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cursor": {
"type": [
"string",
"null"
],
"description": "Opaque pagination cursor from a previous call's `next_cursor`. It\ncarries the whole query, so send it on its own."
},
"status": {
"anyOf": [
{
"$ref": "#/$defs/MaintenanceStatus"
},
{
"type": "null"
}
],
"description": "Defaults to `all`."
}
},
"description": "`list_maintenance` arguments.",
"additionalProperties": false
}List monitors with optional state/type/tag filters and cursor pagination. Each item carries its current state and last-checked time. Read-only.
| Argument | Type | Description |
|---|---|---|
| tag | string | null | Filter to monitors carrying this exact tag. |
| type | string | null | Filter by check kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`, `dns`, `tls_cert`, `domain_expiry`, `flow`. |
| state | string | null | Filter by current state: `up`, `down`, `degraded`, `error`, `no_data`. |
| cursor | string | null | Opaque pagination cursor from a previous call's `next_cursor`. |
{
"type": "object",
"title": "ListMonitorsArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tag": {
"type": [
"string",
"null"
],
"description": "Filter to monitors carrying this exact tag."
},
"type": {
"type": [
"string",
"null"
],
"description": "Filter by check kind: `http`, `tcp`, `ping`, `heartbeat`, `manual`,\n`dns`, `tls_cert`, `domain_expiry`, `flow`."
},
"state": {
"type": [
"string",
"null"
],
"description": "Filter by current state: `up`, `down`, `degraded`, `error`, `no_data`."
},
"cursor": {
"type": [
"string",
"null"
],
"description": "Opaque pagination cursor from a previous call's `next_cursor`."
}
},
"description": "`list_monitors` arguments. All filters are optional; omit for everything."
}The org's notification channels: id, operator-set name, kind (email, slack, telegram, webhook, and so on), and whether the channel is enabled. Two flags say a channel is not working even where it reads as ready: awaiting_verification for an email address nobody confirmed, and not_delivering for an enabled channel whose recent alerts all failed to arrive. auto_bind_tags is the channel's tag rule: it also pages any monitor carrying one of those tags, so a monitor with no binding can still be covered. Channel settings are withheld, since they hold webhook URLs and bot tokens. Channels are created in the Uptimepage app, not here. Read-only.
No arguments.
{
"type": "object",
"properties": {}
}The fleet's probe regions: id, display name, city, country, continent, and whether each is on by default for a new monitor. Reports `max_regions` only when the plan reaches fewer regions than the catalog lists, so a set too large to be accepted is visible before it is sent. Use it to pass a valid `region` to get_monitor_history, and to read where a check would run from. This is a catalog, not a menu to fill: leave `create_monitor.regions` unset unless the user named the places they want covered. Read-only.
No arguments.
{
"type": "object",
"properties": {}
}List who signed in to a private status page: each viewer's address, first and last visit, saved passkeys, whether they subscribe by email, and whether they are blocked; and for the page password, which names nobody, the devices signed in with it, its last sign-in and the wrong tries in 24 hours. Addresses are customer data. Read-only.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The page slug (from `list_status_pages`). |
{
"type": "object",
"title": "GetStatusPageArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "The page slug (from `list_status_pages`)."
}
},
"description": "`get_status_page` argument.",
"additionalProperties": false
}List the org's status pages: slug, name, public URL, enabled. Cursor-paginated. Read-only.
| Argument | Type | Description |
|---|---|---|
| cursor | string | null | Opaque pagination cursor from a previous call's `next_cursor`. |
{
"type": "object",
"title": "ListStatusPagesArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cursor": {
"type": [
"string",
"null"
],
"description": "Opaque pagination cursor from a previous call's `next_cursor`."
}
},
"description": "`list_status_pages` arguments."
}Every tag in use across the org's monitors, most-used first, with how many monitors carry each. Pass one back as the `tag` filter to list_monitors. Read-only.
No arguments.
{
"type": "object",
"properties": {}
}The org's reusable variables: key, and whether it is a secret. Values are never returned, and a secret's value is never even read. Write a variable into a monitor's header or body as `{{ key }}`, which is resolved when the check runs: this is how an authenticated check is built here, since pasting the credential itself is refused. Variables are created and edited in the app, not here. Read-only.
No arguments.
{
"type": "object",
"properties": {}
}Pause a monitor (stop its checks until resumed). For planned work, create_maintenance holds paging instead while the checks keep running. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Argument | Type | Description |
|---|---|---|
| id* | string | The monitor id (from `list_monitors`). |
{
"type": "object",
"title": "MonitorIdArg",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The monitor id (from `list_monitors`)."
}
},
"description": "`run_check_now` / `pause_monitor` / `resume_monitor` argument."
}Post a public, customer-facing update to an incident's status-page timeline (phase + message). This is what your subscribers and status-page visitors see. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The incident id. |
| phase | string | null | Optional phase: `investigating`, `identified`, `monitoring`, `resolved`, `postmortem`. Defaults to `investigating`. |
| message* | string | Public message shown on the status page. |
{
"type": "object",
"title": "PostIncidentUpdateArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "The incident id."
},
"phase": {
"type": [
"string",
"null"
],
"description": "Optional phase: `investigating`, `identified`, `monitoring`,\n`resolved`, `postmortem`. Defaults to `investigating`."
},
"message": {
"type": "string",
"description": "Public message shown on the status page."
}
},
"description": "`post_incident_update` argument: appends a public, customer-facing entry to\nthe incident's status-page timeline."
}Post an update to a maintenance window: say the work is running late, that it finished, or what changed. Works on an upcoming, running or completed window (a completed window is read-only otherwise, so this is how to add a closing note), not on a cancelled one. The update shows on the status pages that show the window and goes to their email and webhook subscribers; it cannot be edited or removed. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The window id (from `list_maintenance`). |
| message* | string | What readers should know now, up to 2000 characters: the work runs late, it finished, or what changed. Write it for the people reading the status page, and give any time with its zone. |
{
"type": "object",
"title": "PostMaintenanceUpdateArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "The window id (from `list_maintenance`)."
},
"message": {
"type": "string",
"description": "What readers should know now, up to 2000 characters: the work runs\nlate, it finished, or what changed. Write it for the people reading\nthe status page, and give any time with its zone."
}
},
"description": "`post_maintenance_update` arguments.",
"additionalProperties": false
}Publish an incident so it appears on every status page carrying the affected monitor, optionally seeding the public title and description. An incident with no monitor needs `status_page_ids` naming the pages to show it on; the list replaces its pages, so start from `get_incident`'s `status_page_ids`. Status-page subscribers may be notified. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Argument | Type | Description |
|---|---|---|
| id* | string | The incident id. |
| public_title | string | null | Public headline shown on the status page. |
| status_page_ids | array | null | Status page ids (from `list_status_pages`) for an incident with no monitor; replaces its pages, so start from `get_incident`'s `status_page_ids` to add or drop one. Leave unset for a monitor's incident, which shows on the pages carrying that monitor. |
| public_description | string | null | Public summary shown under the headline. |
{
"type": "object",
"title": "PublishIncidentArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The incident id."
},
"public_title": {
"type": [
"string",
"null"
],
"description": "Public headline shown on the status page."
},
"status_page_ids": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Status page ids (from `list_status_pages`) for an incident with no\nmonitor; replaces its pages, so start from `get_incident`'s\n`status_page_ids` to add or drop one. Leave unset for a monitor's incident,\nwhich shows on the pages carrying that monitor."
},
"public_description": {
"type": [
"string",
"null"
],
"description": "Public summary shown under the headline."
}
},
"description": "`publish_incident` argument. The optional narration seeds what customers\nread on the status page; omitted fields keep whatever is stored."
}Resolve an incident (mark the operational state resolved). Internal only — does not post to the public status page. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The incident id. |
| note | string | null | Optional internal note recorded on the incident's activity timeline. This is operator-facing, not published to the public status page. |
{
"type": "object",
"title": "IncidentActionArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The incident id."
},
"note": {
"type": [
"string",
"null"
],
"description": "Optional internal note recorded on the incident's activity timeline.\nThis is operator-facing, not published to the public status page."
}
},
"description": "`acknowledge_incident` / `resolve_incident` argument."
}Resume a paused monitor (restart its checks). Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Argument | Type | Description |
|---|---|---|
| id* | string | The monitor id (from `list_monitors`). |
{
"type": "object",
"title": "MonitorIdArg",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The monitor id (from `list_monitors`)."
}
},
"description": "`run_check_now` / `pause_monitor` / `resume_monitor` argument."
}Run a check on a monitor immediately and record the result. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. A down result may fire the org's normal alerts. Heartbeat monitors cannot be probed (they wait for your systems to ping them). Not read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The monitor id (from `list_monitors`). |
{
"type": "object",
"title": "MonitorIdArg",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The monitor id (from `list_monitors`)."
}
},
"description": "`run_check_now` / `pause_monitor` / `resume_monitor` argument."
}Set the state of a manual monitor: up, degraded or down. A manual monitor has no probe; its state is whatever an operator last set, for a service only people can judge, such as a SIP trunk, a carrier link or a partner's back office. Down or degraded opens an incident within about 30 seconds, which pages the monitor's channels unless a maintenance window holds it, and shows on its status pages as a major outage or degraded performance; up closes the incident. A paused monitor, or one the plan no longer covers, keeps the state and acts on it once it runs again. The note becomes the incident's cause, so make it a reason a responder can act on. Refused for any other kind of monitor. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Argument | Type | Description |
|---|---|---|
| id* | string | The id of a `manual` monitor (from `list_monitors`). |
| note | string | null | Why, in one line of at most 200 characters. It becomes the incident's cause and reaches whoever is paged. Omit for none; it replaces the previous note. |
| state* | any |
{
"type": "object",
"$defs": {
"ManualStateArg": {
"oneOf": [
{
"type": "string",
"const": "up",
"description": "Working. Closes the open incident."
},
{
"type": "string",
"const": "degraded",
"description": "Working, but impaired. Shows as degraded performance on status pages."
},
{
"type": "string",
"const": "down",
"description": "Not working. Shows as a major outage on status pages."
}
],
"description": "What an operator says about a manual monitor."
}
},
"title": "SetMonitorStateArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"state"
],
"properties": {
"id": {
"type": "string",
"description": "The id of a `manual` monitor (from `list_monitors`)."
},
"note": {
"type": [
"string",
"null"
],
"description": "Why, in one line of at most 200 characters. It becomes the incident's\ncause and reaches whoever is paged. Omit for none; it replaces the\nprevious note."
},
"state": {
"$ref": "#/$defs/ManualStateArg"
}
},
"description": "`set_monitor_state` arguments.",
"additionalProperties": false
}Hide a published incident from the public status pages again. Its operator timeline is untouched. Asks for confirmation where the client can show a prompt; otherwise runs on the token's scope. Not read-only; idempotent.
| Argument | Type | Description |
|---|---|---|
| id* | string | The incident id (from `list_incidents` or `get_org_health`). |
{
"type": "object",
"title": "IncidentIdArg",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The incident id (from `list_incidents` or `get_org_health`)."
}
},
"description": "Argument of the incident tools that take only an id."
}Edit an upcoming or running maintenance window: its title, description, start, end, the monitors it covers (monitor_ids replaces the whole set) or whether it holds their paging. end_now ends a running window at once and keeps it as completed work. A completed or cancelled window is history and is refused. Shows the old and new value of every field before it runs, where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The window id (from `list_maintenance`). |
| title | string | null | At most 200 characters. |
| end_now | boolean | null | End a running window now. Cannot be combined with `starts_at` or `ends_at`. |
| ends_at | string | null | RFC 3339, in the future. To stop a running window now, send `end_now` instead. |
| starts_at | string | null | RFC 3339. |
| description | string | null | At most 5000 characters. An empty string clears it. |
| monitor_ids | array | null | Replaces the whole set, by id from `list_monitors`. Read the window first: a monitor left out stops being covered. |
Change how loudly a monitor is watched: check interval, alert confirmations, recovery notices, reminder interval, tags, group, the multi-region detection quorum, and which notification channels it alerts (channel_ids replaces the whole set, and needs the channels:read scope). It cannot change what the check watches — name, address, assertions, expected status, headers, body, probe regions and owner are refused. A monitor managed by Terraform is refused outright. Shows the old and new value of every field before it runs, where the client can show a prompt; otherwise runs on the token's scope. Not read-only.
| Argument | Type | Description |
|---|---|---|
| id* | string | The monitor id (from `list_monitors`). |
| tags | array | null | Replaces the whole tag list. Read the monitor first: a tag left out of this list is removed. At most 50 tags, each at most 50 characters. |
| group_name | string | null | Operator-side grouping label. Send `null` to clear it; omit to keep it. |
| channel_ids | array | null | Replaces the whole set of alerted channels, by id from `list_notification_channels`. Read the monitor first: a channel left out of this list stops being alerted. An empty list silences the monitor. |
| interval_secs | integer | null | Seconds between checks. Held to the plan's floor and the check kind's own floor, whichever is higher. |
| region_policy |
Rename a status page, move it to a new slug, publish and unpublish it, or change who may open it. An omitted field is left alone. Changing the slug moves the public URL and breaks existing links. access replaces the page's access settings and list whole: protected true makes it private to the listed domains and addresses (Team plan), and removes subscribers the list does not cover; protected false makes it public again and keeps the list. Not read-only; idempotent.
| Argument | Type | Description |
|---|---|---|
| name | string | null | New display name. |
| slug* | string | The page to change, by its current slug. |
| access | any | Replace who may open it: make it private, change its list, or make it public again. |
| enabled | boolean | null | Publish or unpublish the page. |
| new_slug | string | null | New slug. Changing it moves the public URL and breaks existing links. |
{
"type": "object",
"$defs": {
"PageAccessArg": {
"type": "object",
"required": [
"protected"
],
"properties": {
"email": {
"$ref": "#/$defs/PageEmailAccessArg",
"default": {
"enabled": true,
"recheck_days": null,
"passkeys_enabled": true
}
},
"rules": {
"type": "array",
"items": {
"$ref": "#/$defs/PageAccessRuleArg"
},
"default": [],
"description": "Who can get an email code, up to 500 entries. Read back, these are\ncustomer data."
},
"password": {
"$ref": "#/$defs/PagePasswordAccessArg",
"default": {
"enabled": false
}
},
"protected": {
"type": "boolean",
"description": "Private when true: only people a way in lets through can open the\npage: the addresses and domains in `rules`, by a code sent to their\nemail, or anyone with the page password. False makes it public again\nand keeps the list and the password for next time."
},
"session_days": {
"type": [
"integer",
"null"
],
"format": "int32",
"default": null,
"description": "Keep a sign-in, by email or password, for 7, 30 or 90 days. Omit to\nkeep it until sign-out."
}
},
"description": "Who may open a status page; the same shape as the REST `access` field. As a\nwrite it replaces what is stored, whole.",
"additionalProperties": false
},
"PageAccessRuleArg": {
"type": "object",
"required": [
"kind",
"value"
],
"properties": {
"kind": {
"type": "string",
"description": "`domain` lets in every address at `value` (`example.com`); `address`\nlets in one person (`[email protected]`)."
},
"value": {
"type": "string"
}
},
"description": "One access list entry.",
"additionalProperties": false
},
"PageEmailAccessArg": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": true,
"description": "Defaults to true. A private page needs it or the password."
},
"recheck_days": {
"type": [
"integer",
"null"
],
"format": "int32",
"default": null,
"description": "Ask passkey viewers for an email code again after 30, 90 or 365 days.\nOmit to never ask."
},
"passkeys_enabled": {
"type": "boolean",
"default": true,
"description": "Let viewers save a passkey after an email sign-in. Defaults to true."
}
},
"description": "The emailed-code way in, and the passkeys that shortcut it.",
"additionalProperties": false
},
"PagePasswordAccessArg": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean",
"default": false,
"description": "Anyone with the page password can open the page. Turning it on needs\none already set; turning it off keeps it and signs out everyone who\ncame in with it."
}
},
"description": "The page password way in. The password itself never passes through here:\nit is set in the app, the API or Terraform.",
"additionalProperties": false
}
},
"title": "UpdateStatusPageArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "New display name."
},
"slug": {
"type": "string",
"description": "The page to change, by its current slug."
},
"access": {
"anyOf": [
{
"$ref": "#/$defs/PageAccessArg"
},
{
"type": "null"
}
],
"description": "Replace who may open it: make it private, change its list, or make it\npublic again."
},
"enabled": {
"type": [
"boolean",
"null"
],
"description": "Publish or unpublish the page."
},
"new_slug": {
"type": [
"string",
"null"
],
"description": "New slug. Changing it moves the public URL and breaks existing links."
}
},
"description": "`update_status_page` argument. Every field but `slug` is optional; an\nomitted field is left as it is.",
"additionalProperties": false
}Change how one monitor is presented on a status page: its public name, description, group or position. An omitted field is left alone. Not read-only; idempotent.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The page slug (from `list_status_pages`). |
| monitor_id* | string | The monitor id whose curation is being changed. |
| sort_order | integer | null | |
| public_name | string | null | |
| public_group | string | null | |
| public_description | string | null |
{
"type": "object",
"title": "UpdateComponentArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug",
"monitor_id"
],
"properties": {
"slug": {
"type": "string",
"description": "The page slug (from `list_status_pages`)."
},
"monitor_id": {
"type": "string",
"description": "The monitor id whose curation is being changed."
},
"sort_order": {
"type": [
"integer",
"null"
],
"format": "int32"
},
"public_name": {
"type": [
"string",
"null"
]
},
"public_group": {
"type": [
"string",
"null"
]
},
"public_description": {
"type": [
"string",
"null"
]
}
},
"description": "`update_status_page_component` argument. An omitted field is left as it is."
}| Hold paging for these monitors while the window runs. Defaults to true. |
{
"type": "object",
"title": "CreateMaintenanceArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"title",
"starts_at",
"ends_at",
"monitor_ids"
],
"properties": {
"title": {
"type": "string",
"description": "Shown on the status page and in subscriber notices. At most 200 characters."
},
"ends_at": {
"type": "string",
"description": "RFC 3339 end: in the future, after the start, and at most 30 days after it."
},
"starts_at": {
"type": "string",
"description": "RFC 3339 start. A start already past opens the window at once."
},
"description": {
"type": [
"string",
"null"
],
"description": "Shown with the title. At most 5000 characters."
},
"monitor_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "The monitors the work touches, by id from `list_monitors`. At least one."
},
"suppress_alerts": {
"type": [
"boolean",
"null"
],
"description": "Hold paging for these monitors while the window runs. Defaults to true."
}
},
"description": "`create_maintenance` arguments.",
"additionalProperties": false
}| group_name | string | null | Operator-side grouping label. |
| channel_ids | array | null | Channel ids from `list_notification_channels` to alert. Omitting them creates a monitor that pages nobody, which is worth saying out loud rather than leaving for an outage to reveal. The channels themselves are set up in the app, since they hold the tokens and addresses. |
| interval_secs | integer | null | Seconds between checks, held to the plan's floor and the check kind's own floor. Omit it to get the cadence the app's own picker opens this kind at, which is well above the hard minimum for the slow-moving kinds: a certificate is checked twice a day, a domain registration daily. |
| region_policy | any | Detection quorum across probe regions. |
| notify_recovery | boolean | null | Whether recovery is announced. Defaults to true. |
| alert_confirmations | integer | null | Consecutive failing checks before the monitor alerts. Minimum 1, defaults to 2. |
| recovery_period_secs | integer | null | Seconds a recovered monitor must stay healthy before its incident closes; a failure confirmed inside the window keeps the incident open, so a flapping service reads as one outage. 0 to 1800; 0 closes on the confirming checks alone. Defaults to 180 on an HTTP, TCP, ping, DNS or flow monitor and 0 on the rest. Not for a manual monitor. |
| renotify_interval_secs | integer | null | Seconds before the first reminder while an outage stays unacknowledged; each further reminder waits twice as long, up to a day. 0 turns reminders off; otherwise at least 60. Defaults to 3600. |
{
"type": "object",
"$defs": {
"NewCheck": {
"oneOf": [
{
"type": "object",
"required": [
"type",
"url"
],
"properties": {
"url": {
"type": "string"
},
"body": {
"type": [
"string",
"null"
],
"description": "Request body, sent as given. `{{ key }}` references are resolved at\nprobe time, so a body may carry a secret by reference."
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"type": [
"string",
"null"
],
"description": "`get` (default), `head`, `post`, `put`, `patch`, `delete`, `options`."
},
"headers": {
"type": [
"object",
"null"
],
"description": "Request headers. A header that carries a credential\n(`authorization`, `x-api-key`, `api-key`, `cookie`,\n`proxy-authorization`) must reference an org variable rather than\nspell the secret out: `Bearer {{ my_key }}`. Use `list_variables`\nto find the key, and never paste the credential itself — this tool\nrefuses it, and a pasted one would live on in the chat log.",
"additionalProperties": {
"type": "string"
}
},
"ip_version": {
"type": [
"string",
"null"
],
"description": "`any` (default), `ipv4` or `ipv6`. See `ip_version` on `Tcp`."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0,
"description": "Defaults to 10000. A redirect counts as a pass only with\n`follow_redirects`."
},
"verify_tls": {
"type": [
"boolean",
"null"
],
"description": "Defaults to true. False accepts an invalid certificate, which a\n`tls_cert` monitor is the better way to watch."
},
"expected_status": {
"type": [
"string",
"null"
],
"description": "A single code like `200`, a range like `200-299`, or a list like\n`200,201,204`. Defaults to `200-299`."
},
"follow_redirects": {
"type": [
"boolean",
"null"
],
"description": "Defaults to true, following at most 5 hops."
},
"expected_body_contains": {
"type": [
"string",
"null"
],
"description": "Text the response body must contain for the check to pass."
}
},
"description": "An HTTP(S) endpoint.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"host",
"port"
],
"properties": {
"host": {
"type": "string"
},
"port": {
"type": "integer",
"format": "uint16",
"maximum": 65535,
"minimum": 0
},
"type": {
"type": "string",
"const": "tcp"
},
"ip_version": {
"type": [
"string",
"null"
],
"description": "`any` (default) dials whichever of IPv6 and IPv4 connects first,\nso a broken AAAA record or IPv6 firewall stays hidden. `ipv4` or\n`ipv6` checks only that family and fails when the host has no\naddress in it. To watch both, create one monitor per family."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
}
},
"description": "A TCP port accepting connections.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"host"
],
"properties": {
"host": {
"type": "string"
},
"type": {
"type": "string",
"const": "ping"
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
}
},
"description": "ICMP reachability.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"domain"
],
"properties": {
"type": {
"type": "string",
"const": "dns"
},
"domain": {
"type": "string",
"description": "Name to resolve. A `ptr` lookup also takes an IP address."
},
"resolver": {
"type": [
"string",
"null"
],
"description": "Resolver to ask. Defaults to the agent's own."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
},
"record_type": {
"type": [
"string",
"null"
],
"description": "`a` (default), `aaaa`, `cname`, `mx`, `ns`, `txt`, `soa`, `ptr`,\n`caa`, `srv`."
},
"expected_records": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Every record the answer must hold and nothing else, written as a\nresult's `answers` shows them (`10 mail.example.com.` for MX, or a\nbare `mail.example.com` to allow any preference). Any record\nadded, removed or changed fails the check. Not combined with\n`expected_contains`."
},
"expected_contains": {
"type": [
"string",
"null"
],
"description": "Text the answer must contain."
}
},
"description": "A DNS record resolving, optionally to an expected value.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"host"
],
"properties": {
"host": {
"type": "string"
},
"port": {
"type": [
"integer",
"null"
],
"format": "uint16",
"maximum": 65535,
"minimum": 0,
"description": "Defaults to 443."
},
"type": {
"type": "string",
"const": "tls_cert"
},
"warn_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Days of remaining validity that degrade the check. Default 30."
},
"ip_version": {
"type": [
"string",
"null"
],
"description": "`any` (default), `ipv4` or `ipv6`. See `ip_version` on `Tcp`."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
},
"critical_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Days of remaining validity that fail it. Default 7."
}
},
"description": "A TLS certificate's remaining validity.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"domain"
],
"properties": {
"type": {
"type": "string",
"const": "domain_expiry"
},
"domain": {
"type": "string"
},
"warn_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Default 30."
},
"timeout_ms": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0
},
"critical_days": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Default 7."
}
},
"description": "A domain registration's remaining validity.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type",
"period_secs",
"grace_secs"
],
"properties": {
"type": {
"type": "string",
"const": "heartbeat"
},
"grace_secs": {
"type": "integer",
"format": "uint64",
"minimum": 0,
"description": "Lateness tolerated before the monitor fails."
},
"period_secs": {
"type": "integer",
"format": "uint64",
"minimum": 0,
"description": "How often the job is expected to report."
},
"max_runtime_secs": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0,
"description": "Fail a run that starts and does not finish within this."
}
},
"description": "An inbound ping from a job that is expected to report in. Nothing is\nprobed; the monitor fails when the ping does not arrive. The ping URL\nand its token are shown in the app, never here.",
"additionalProperties": false
},
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string",
"const": "manual"
}
},
"description": "A service no probe can judge, such as a SIP trunk or a partner's back\noffice. Nothing is checked: it starts up, and `set_monitor_state` moves\nit, opening and closing incidents like any other monitor.",
"additionalProperties": false
}
],
"description": "What a new monitor should check. Narrower than what the product supports on\npurpose: no request headers, body or credentials, since those are literal\nsecrets an operator types once and this tool would carry through a chat log;\nand no browser flow, which needs the fill values withheld everywhere else.\nAdd those in the Uptimepage app after the monitor exists."
},
"RegionPolicyArg": {
"type": "object",
"required": [
"mode"
],
"properties": {
"mode": {
"$ref": "#/$defs/RegionPolicyMode"
},
"count": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Required with `mode: \"count\"`, ignored otherwise. Must be between 1 and\nthe number of regions the fleet has; `list_regions` reports them."
}
},
"description": "How many regions must agree a monitor is down before an incident opens.\n`get_monitor` reads this back in the same shape, so the enum of legal modes\nis one definition rather than a written-out list that can drift.",
"additionalProperties": false
},
"RegionPolicyMode": {
"oneOf": [
{
"type": "string",
"const": "any",
"description": "One region down is enough."
},
{
"type": "string",
"const": "majority",
"description": "More than half of them."
},
{
"type": "string",
"const": "all",
"description": "Every region."
},
{
"type": "string",
"const": "count",
"description": "A fixed number."
}
],
"description": "How the quorum is expressed. `count` carries its number in `count`."
}
},
"title": "CreateMonitorArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"check"
],
"properties": {
"name": {
"type": "string",
"description": "What the operator will see in lists and alerts."
},
"tags": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "At most 50, each at most 50 characters."
},
"check": {
"$ref": "#/$defs/NewCheck"
},
"regions": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Probe regions to run the check from, as ids from `list_regions`. Omit\nunless the user named the places they want covered: omitting takes the\nregions `list_regions` flags `default_selected`, which is the coverage\nthe operator chose, capped at the plan's region cap and falling back to\nthe control plane's own region when nothing is flagged. A vantage point\ncan be offered without being on by default, so the full catalog is not\nthe thorough answer. Rejected for a heartbeat, which is pinged rather\nthan probed, and a set larger than a `max_regions` `list_regions`\nreports is refused outright, not trimmed to fit."
},
"group_name": {
"type": [
"string",
"null"
],
"description": "Operator-side grouping label."
},
"channel_ids": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Channel ids from `list_notification_channels` to alert. Omitting them\ncreates a monitor that pages nobody, which is worth saying out loud\nrather than leaving for an outage to reveal. The channels themselves are\nset up in the app, since they hold the tokens and addresses."
},
"interval_secs": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0,
"description": "Seconds between checks, held to the plan's floor and the check kind's\nown floor. Omit it to get the cadence the app's own picker opens this\nkind at, which is well above the hard minimum for the slow-moving kinds:\na certificate is checked twice a day, a domain registration daily."
},
"region_policy": {
"anyOf": [
{
"$ref": "#/$defs/RegionPolicyArg"
},
{
"type": "null"
}
],
"description": "Detection quorum across probe regions."
},
"notify_recovery": {
"type": [
"boolean",
"null"
],
"description": "Whether recovery is announced. Defaults to true."
},
"alert_confirmations": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Consecutive failing checks before the monitor alerts. Minimum 1,\ndefaults to 2."
},
"recovery_period_secs": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Seconds a recovered monitor must stay healthy before its incident\ncloses; a failure confirmed inside the window keeps the incident open,\nso a flapping service reads as one outage. 0 to 1800; 0 closes on the\nconfirming checks alone. Defaults to 180 on an HTTP, TCP, ping, DNS or\nflow monitor and 0 on the rest. Not for a manual monitor."
},
"renotify_interval_secs": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Seconds before the first reminder while an outage stays unacknowledged;\neach further reminder waits twice as long, up to a day. 0 turns\nreminders off; otherwise at least 60. Defaults to 3600."
}
},
"description": "`create_monitor` arguments.",
"additionalProperties": false
}| suppress_alerts | boolean | null | Hold paging for its monitors while it runs. |
{
"type": "object",
"title": "UpdateMaintenanceArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The window id (from `list_maintenance`)."
},
"title": {
"type": [
"string",
"null"
],
"description": "At most 200 characters."
},
"end_now": {
"type": [
"boolean",
"null"
],
"description": "End a running window now. Cannot be combined with `starts_at` or `ends_at`."
},
"ends_at": {
"type": [
"string",
"null"
],
"description": "RFC 3339, in the future. To stop a running window now, send `end_now` instead."
},
"starts_at": {
"type": [
"string",
"null"
],
"description": "RFC 3339."
},
"description": {
"type": [
"string",
"null"
],
"description": "At most 5000 characters. An empty string clears it."
},
"monitor_ids": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Replaces the whole set, by id from `list_monitors`. Read the window\nfirst: a monitor left out stops being covered."
},
"suppress_alerts": {
"type": [
"boolean",
"null"
],
"description": "Hold paging for its monitors while it runs."
}
},
"description": "`update_maintenance` arguments. Every field except `id` is optional; omit\nwhat should stay as it is.",
"additionalProperties": false
}| any |
| Detection quorum across probe regions. |
| notify_recovery | boolean | null | Whether recovery is announced to the monitor's channels. |
| alert_confirmations | integer | null | Consecutive failing checks before the monitor alerts. Minimum 1. Raising it quietens a flapping monitor at the cost of alerting later. |
| recovery_period_secs | integer | null | Seconds a recovered monitor must stay healthy before its incident closes, 0 to 1800. Raising it folds a flapping monitor's short outages into one incident, at the cost of announcing recovery later. |
| renotify_interval_secs | integer | null | Seconds before the first reminder while an outage stays unacknowledged; each further reminder waits twice as long, up to a day. 0 turns reminders off; otherwise at least 60. |
{
"type": "object",
"$defs": {
"RegionPolicyArg": {
"type": "object",
"required": [
"mode"
],
"properties": {
"mode": {
"$ref": "#/$defs/RegionPolicyMode"
},
"count": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Required with `mode: \"count\"`, ignored otherwise. Must be between 1 and\nthe number of regions the fleet has; `list_regions` reports them."
}
},
"description": "How many regions must agree a monitor is down before an incident opens.\n`get_monitor` reads this back in the same shape, so the enum of legal modes\nis one definition rather than a written-out list that can drift.",
"additionalProperties": false
},
"RegionPolicyMode": {
"oneOf": [
{
"type": "string",
"const": "any",
"description": "One region down is enough."
},
{
"type": "string",
"const": "majority",
"description": "More than half of them."
},
{
"type": "string",
"const": "all",
"description": "Every region."
},
{
"type": "string",
"const": "count",
"description": "A fixed number."
}
],
"description": "How the quorum is expressed. `count` carries its number in `count`."
}
},
"title": "UpdateMonitorArgs",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The monitor id (from `list_monitors`)."
},
"tags": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Replaces the whole tag list. Read the monitor first: a tag left out of\nthis list is removed. At most 50 tags, each at most 50 characters."
},
"group_name": {
"type": [
"string",
"null"
],
"default": null,
"description": "Operator-side grouping label. Send `null` to clear it; omit to keep it."
},
"channel_ids": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
},
"description": "Replaces the whole set of alerted channels, by id from\n`list_notification_channels`. Read the monitor first: a channel left out\nof this list stops being alerted. An empty list silences the monitor."
},
"interval_secs": {
"type": [
"integer",
"null"
],
"format": "uint64",
"minimum": 0,
"description": "Seconds between checks. Held to the plan's floor and the check kind's\nown floor, whichever is higher."
},
"region_policy": {
"anyOf": [
{
"$ref": "#/$defs/RegionPolicyArg"
},
{
"type": "null"
}
],
"description": "Detection quorum across probe regions."
},
"notify_recovery": {
"type": [
"boolean",
"null"
],
"description": "Whether recovery is announced to the monitor's channels."
},
"alert_confirmations": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Consecutive failing checks before the monitor alerts. Minimum 1. Raising\nit quietens a flapping monitor at the cost of alerting later."
},
"recovery_period_secs": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Seconds a recovered monitor must stay healthy before its incident\ncloses, 0 to 1800. Raising it folds a flapping monitor's short outages\ninto one incident, at the cost of announcing recovery later."
},
"renotify_interval_secs": {
"type": [
"integer",
"null"
],
"format": "uint32",
"minimum": 0,
"description": "Seconds before the first reminder while an outage stays unacknowledged;\neach further reminder waits twice as long, up to a day. 0 turns\nreminders off; otherwise at least 60."
}
},
"description": "`update_monitor` arguments. Every field except `id` is optional; omit what\nshould stay as it is. Name, address or URL, assertions, expected status,\nheaders, body, probe regions and owner are not editable here, and passing\none is an error rather than a silent no-op.",
"additionalProperties": false
}