Skip to content

Update a monitor

PATCH
/monitors/{monitor_id}
curl --request PATCH \
--url https://api.perstat.io/monitors/example \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "alarm_gate": { "grace_seconds": 1, "origins": [ "example" ] }, "config": "example", "enabled": true, "interval_seconds": 1, "name": "example", "policy": { "alarm_consecutive": 1, "alarm_min_duration_seconds": 1, "alarm_quorum_mode": "example", "alarm_quorum_value": 1, "alert_profile_id": "example", "effective_alarm": { "alarm_consecutive": 1, "alarm_min_duration_seconds": 1, "alarm_quorum_mode": "example", "alarm_quorum_value": 1, "source": "example" }, "failed_interval_seconds": 1, "recovery_consecutive": 1, "recovery_quorum_mode": "example", "recovery_quorum_value": 1 }, "regions": [ "example" ], "type": "example" }'

Partially updates a monitor: name, type, configuration, check interval, probe regions, confirmation policy, and the enabled flag. Omitted fields keep their current value; the same interval and region rules as on create apply. Disabling a monitor also resolves its open incidents and ends running escalations, since a paused monitor can no longer confirm recovery. An archived monitor is not changed: the update returns 409 with the error code monitor_archived; restore it first with POST /monitors/{monitor_id}/restore. Refused fields return 400 (402 for too many regions) with the same error body as on create. Requires project management rights. Accepts API keys with the monitors:write scope, subject to current role and resource grants.

monitor_id
required
string
Media typeapplication/json
object
alarm_gate
One of:
null
config
enabled
boolean | null
interval_seconds
integer | null format: int32
name
string | null
policy
One of:
null
regions
Array<string> | null
type
string | null
Examplegenerated
{
"alarm_gate": {
"grace_seconds": 1,
"origins": [
"example"
]
},
"config": "example",
"enabled": true,
"interval_seconds": 1,
"name": "example",
"policy": {
"alarm_consecutive": 1,
"alarm_min_duration_seconds": 1,
"alarm_quorum_mode": "example",
"alarm_quorum_value": 1,
"alert_profile_id": "example",
"effective_alarm": {
"alarm_consecutive": 1,
"alarm_min_duration_seconds": 1,
"alarm_quorum_mode": "example",
"alarm_quorum_value": 1,
"source": "example"
},
"failed_interval_seconds": 1,
"recovery_consecutive": 1,
"recovery_quorum_mode": "example",
"recovery_quorum_value": 1
},
"regions": [
"example"
],
"type": "example"
}

Request succeeded. The response body contains the result.

Media typeapplication/json
object
alarm_gate
One of:
null
archived

true while the monitor is archived: it runs no checks, appears in no list and does not count against the plan, but keeps its incidents and availability history. Set on the single-monitor read and in the answers of archive and restore; omitted elsewhere, since lists only ever hold active monitors.

boolean | null
config
required
enabled
required
boolean
id
required
string
interval_seconds
required
integer format: int32
last_severity

Severity des rohen jüngsten Checks (informativ; nicht für die Tönung).

string | null
last_status

Bestätigter Anzeige-Status für den Gesundheits-Punkt je Dienst: failed (rot) = offener Incident/Quorum-Ausfall, degraded (gelb) = unbestätigtes Problem (z. B. einzelner Vantage-Point), passed (grün). None = noch kein Check. Folgt damit derselben Logik wie Alarm/Push.

string | null
name
required
string
policy
One of:
null
project_id
required
string
regions
required
Array<string>
slug
required
string
type
required
string
Examplegenerated
{
"alarm_gate": {
"grace_seconds": 1,
"origins": [
"example"
]
},
"archived": true,
"config": "example",
"enabled": true,
"id": "example",
"interval_seconds": 1,
"last_severity": "example",
"last_status": "example",
"name": "example",
"policy": {
"alarm_consecutive": 1,
"alarm_min_duration_seconds": 1,
"alarm_quorum_mode": "example",
"alarm_quorum_value": 1,
"alert_profile_id": "example",
"effective_alarm": {
"alarm_consecutive": 1,
"alarm_min_duration_seconds": 1,
"alarm_quorum_mode": "example",
"alarm_quorum_value": 1,
"source": "example"
},
"failed_interval_seconds": 1,
"recovery_consecutive": 1,
"recovery_quorum_mode": "example",
"recovery_quorum_value": 1
},
"project_id": "example",
"regions": [
"example"
],
"slug": "example",
"type": "example"
}

A field was refused; error and field name it

Media typeapplication/json

Body of a refused monitor write. Branch on error, which is stable; message explains the refusal in English.

object
error
required

Stable code: quota_reached, name_taken, invalid_request, unknown_type, empty_name, unknown_region, internal_region, too_many_regions, alarm_standard_unreachable, invalid_target, unknown_agent_metric, invalid_service_name, foreign_agent or monitor_archived.

string
field

The refused field as a path into the monitor, such as config.url or regions. Absent when no single field is at fault.

string | null
limit

With too_many_regions: the most regions the plan checks a monitor from. With alarm_standard_unreachable: the distinct regions the organization’s alarm standard needs.

integer | null format: int64
message
required

The reason as an English sentence that names the field.

string
reason

With invalid_target: what is wrong with the target. One of missing, whitespace, scheme_in_host, path_in_host, malformed_label, too_long, unsupported_scheme, no_host, needs_two_labels or port_range.

string | null
Example
{
"error": "invalid_target",
"field": "config.url",
"reason": "unsupported_scheme"
}

Authentication is missing or invalid.

Plan limit: too_many_regions

Media typeapplication/json

Body of a refused monitor write. Branch on error, which is stable; message explains the refusal in English.

object
error
required

Stable code: quota_reached, name_taken, invalid_request, unknown_type, empty_name, unknown_region, internal_region, too_many_regions, alarm_standard_unreachable, invalid_target, unknown_agent_metric, invalid_service_name, foreign_agent or monitor_archived.

string
field

The refused field as a path into the monitor, such as config.url or regions. Absent when no single field is at fault.

string | null
limit

With too_many_regions: the most regions the plan checks a monitor from. With alarm_standard_unreachable: the distinct regions the organization’s alarm standard needs.

integer | null format: int64
message
required

The reason as an English sentence that names the field.

string
reason

With invalid_target: what is wrong with the target. One of missing, whitespace, scheme_in_host, path_in_host, malformed_label, too_long, unsupported_scheme, no_host, needs_two_labels or port_range.

string | null
Example
{
"error": "invalid_target",
"field": "config.url",
"reason": "unsupported_scheme"
}

The authenticated caller does not have permission to perform this operation.

No accessible resource matches the supplied identifier.

The monitor is archived. The body carries the error code monitor_archived; restore the monitor first.

Media typeapplication/json

Body of a refused monitor write. Branch on error, which is stable; message explains the refusal in English.

object
error
required

Stable code: quota_reached, name_taken, invalid_request, unknown_type, empty_name, unknown_region, internal_region, too_many_regions, alarm_standard_unreachable, invalid_target, unknown_agent_metric, invalid_service_name, foreign_agent or monitor_archived.

string
field

The refused field as a path into the monitor, such as config.url or regions. Absent when no single field is at fault.

string | null
limit

With too_many_regions: the most regions the plan checks a monitor from. With alarm_standard_unreachable: the distinct regions the organization’s alarm standard needs.

integer | null format: int64
message
required

The reason as an English sentence that names the field.

string
reason

With invalid_target: what is wrong with the target. One of missing, whitespace, scheme_in_host, path_in_host, malformed_label, too_long, unsupported_scheme, no_host, needs_two_labels or port_range.

string | null
Example
{
"error": "invalid_target",
"field": "config.url",
"reason": "unsupported_scheme"
}