| Field |
Type |
Required |
Constraints |
id |
string (uuid) |
yes |
|
name |
string |
yes |
|
type |
string |
yes |
|
interval_seconds |
integer or null |
yes |
|
timeout_ms |
integer or null |
yes |
|
locations |
array of string |
yes |
|
tags |
array of string |
yes |
|
status |
"active", "paused" |
yes |
|
service_id |
string (uuid) or null |
yes |
|
created_at |
string (date-time) |
yes |
|
updated_at |
string (date-time) |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
limit |
integer |
yes |
|
offset |
integer |
yes |
|
total |
integer |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
data |
array of V1Monitor |
yes |
|
page |
V1Page |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
org_id |
string or null |
yes |
|
role |
string |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
location |
string |
yes |
|
status |
"up", "down", "no_data", "stale", "uncollectable" |
yes |
|
errorClass |
string |
yes |
|
nodeTs |
string (date-time) or null |
yes |
|
ingestTs |
string (date-time) or null |
yes |
|
No other field is ever present.
No other field is ever present.
| Field |
Type |
Required |
Constraints |
bucket |
string (date-time) |
yes |
|
monitorId |
string (uuid) |
yes |
|
location |
string |
yes |
|
upCount |
integer |
yes |
|
downCount |
integer |
yes |
|
totalCount |
integer |
yes |
|
sumLatencyMs |
number or null |
yes |
|
minLatencyMs |
number or null |
yes |
|
maxLatencyMs |
number or null |
yes |
|
uptimePct |
number |
yes |
|
avgLatencyMs |
number or null |
yes |
|
No other field is ever present.
No other field is ever present.
| Field |
Type |
Required |
Constraints |
error |
"api key unauthenticated" |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
error |
"quota_exceeded" |
yes |
|
metric |
string |
yes |
|
upgrade |
true |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
error |
"forbidden" |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
error |
"feature_gated" |
yes |
|
feature |
string |
yes |
|
upgrade |
true |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
error |
string |
yes |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
error |
"rate_limited" |
yes |
|
retryAfter |
integer |
yes |
|
No other field is ever present.
type picks the variant, and each variant carries that type’s own config and assertions.
Six of the seven accept no assertions at all: [] is the only value their assertions takes.
These rules are enforced on every create and CANNOT be expressed in JSON Schema, so they are
not in the shapes below:
timeout_ms must be strictly less than interval_seconds * 1000.
config.url (http) must be an absolute http(s) URL, and every multistep
config.steps[].request.url must start with http:// or https://.
config.grace_seconds (heartbeat) must be less than or equal to config.period_seconds.
- an http
status_code assertion takes a number array with op in, and a single number with
eq, ne, lt or gt.
- a target resolving to a private, loopback, link-local or cloud-metadata address is refused
unless every entry in
locations is one of the org’s own agents.
service_id must name a live service in the calling key’s org.
One of V1MonitorCreateHttp or V1MonitorCreateTcp or V1MonitorCreateTls or V1MonitorCreateDns or V1MonitorCreatePing or V1MonitorCreateHeartbeat or V1MonitorCreateMultistep.
Which one is decided by type.
| Field |
Type |
Required |
Constraints |
name |
string |
yes |
|
type |
"http" |
yes |
|
interval_seconds |
30, 60, 300 |
yes |
|
timeout_ms |
integer |
yes |
min 1000, max 60000 |
locations |
array of string |
yes |
default [], min items 1, max items 50 |
tags |
array of string |
no |
default [], max items 50 |
service_id |
string (uuid) |
no |
|
config |
V1MonitorConfigHttp |
yes |
|
assertions |
array of object or object or object or object |
no |
max items 50 |
| Field |
Type |
Required |
Constraints |
name |
string |
yes |
|
type |
"tcp" |
yes |
|
interval_seconds |
30, 60, 300 |
yes |
|
timeout_ms |
integer |
yes |
min 1000, max 60000 |
locations |
array of string |
yes |
default [], min items 1, max items 50 |
tags |
array of string |
no |
default [], max items 50 |
service_id |
string (uuid) |
no |
|
config |
V1MonitorConfigTcp |
yes |
|
assertions |
empty array ([] is the only value) |
no |
default [] |
| Field |
Type |
Required |
Constraints |
name |
string |
yes |
|
type |
"tls" |
yes |
|
interval_seconds |
30, 60, 300, 3600, 86400 |
yes |
|
timeout_ms |
integer |
yes |
min 1000, max 60000 |
locations |
array of string |
yes |
default [], min items 1, max items 50 |
tags |
array of string |
no |
default [], max items 50 |
service_id |
string (uuid) |
no |
|
config |
V1MonitorConfigTls |
yes |
|
assertions |
empty array ([] is the only value) |
no |
default [] |
| Field |
Type |
Required |
Constraints |
name |
string |
yes |
|
type |
"dns" |
yes |
|
interval_seconds |
30, 60, 300 |
yes |
|
timeout_ms |
integer |
yes |
min 1000, max 60000 |
locations |
array of string |
yes |
default [], min items 1, max items 50 |
tags |
array of string |
no |
default [], max items 50 |
service_id |
string (uuid) |
no |
|
config |
V1MonitorConfigDns |
yes |
|
assertions |
empty array ([] is the only value) |
no |
default [] |
| Field |
Type |
Required |
Constraints |
name |
string |
yes |
|
type |
"ping" |
yes |
|
interval_seconds |
30, 60, 300 |
yes |
|
timeout_ms |
integer |
yes |
min 1000, max 60000 |
locations |
array of string |
yes |
default [], min items 1, max items 50 |
tags |
array of string |
no |
default [], max items 50 |
service_id |
string (uuid) |
no |
|
config |
V1MonitorConfigPing |
yes |
|
assertions |
empty array ([] is the only value) |
no |
default [] |
| Field |
Type |
Required |
Constraints |
name |
string |
yes |
|
type |
"heartbeat" |
yes |
|
interval_seconds |
30, 60, 300 or null |
no |
|
timeout_ms |
integer or null |
no |
|
locations |
array of string |
no |
default [], max items 0 |
tags |
array of string |
no |
default [], max items 50 |
service_id |
string (uuid) |
no |
|
config |
V1MonitorConfigHeartbeat |
yes |
|
assertions |
empty array ([] is the only value) |
no |
default [] |
| Field |
Type |
Required |
Constraints |
name |
string |
yes |
|
type |
"multistep" |
yes |
|
interval_seconds |
60, 300 |
yes |
|
timeout_ms |
integer |
yes |
min 1000, max 60000 |
locations |
array of string |
yes |
default [], min items 1, max items 50 |
tags |
array of string |
no |
default [], max items 50 |
service_id |
string (uuid) |
no |
|
config |
V1MonitorConfigMultistep |
yes |
|
assertions |
empty array ([] is the only value) |
no |
default [] |
Every field is optional, but what is validated is the MERGED record — this body applied over the monitor’s current row — against the same constraints as a create of the merged type. A body that is valid on its own can therefore still be rejected: {"type": "tcp"} on an http monitor keeps the http config, which is not a valid tcp config, so the write is refused with a 400 and nothing is persisted. Which tier set interval_seconds must fall in, and which config shape applies, are both decided by the merged type. An absent field is left unchanged, and so is an explicit null — except service_id, where null ungroups the monitor from its service.
| Field |
Type |
Required |
Constraints |
name |
string |
no |
|
type |
"http", "tcp", "tls", "dns", "ping", "heartbeat", "multistep" |
no |
|
interval_seconds |
30, 60, 300, 3600, 86400 or null |
no |
|
timeout_ms |
integer or null |
no |
|
locations |
array of string |
no |
max items 50 |
tags |
array of string |
no |
max items 50 |
service_id |
string (uuid) or null |
no |
|
config |
V1MonitorConfigHttp or V1MonitorConfigTcp or V1MonitorConfigTls or V1MonitorConfigDns or V1MonitorConfigPing or V1MonitorConfigHeartbeat or V1MonitorConfigMultistep |
no |
|
assertions |
array of object or object or object or object or empty array ([] is the only value) |
no |
|
| Field |
Type |
Required |
Constraints |
method |
"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD" |
yes |
|
url |
string |
yes |
|
headers |
object |
no |
|
body |
string |
no |
|
followRedirects |
boolean |
no |
default true |
No other field is ever present.
| Field |
Type |
Required |
Constraints |
host |
string |
yes |
|
port |
integer |
yes |
min 1, max 65535 |
No other field is ever present.
| Field |
Type |
Required |
Constraints |
host |
string |
yes |
|
port |
integer |
no |
default 443, min 1, max 65535 |
warn_days |
integer |
yes |
min 1, max 365 |
No other field is ever present.
| Field |
Type |
Required |
Constraints |
hostname |
string |
yes |
|
record_type |
"A", "AAAA", "CNAME", "MX", "TXT", "NS" |
yes |
|
expected |
string |
no |
|
nameserver |
string |
no |
|
No other field is ever present.
| Field |
Type |
Required |
Constraints |
host |
string |
yes |
|
count |
integer |
no |
default 3, min 1, max 10 |
loss_threshold_pct |
integer |
no |
default 100, min 0, max 100 |
No other field is ever present.
| Field |
Type |
Required |
Constraints |
period_seconds |
integer |
yes |
min 30, max 604800 |
grace_seconds |
integer |
yes |
min 0 |
No other field is ever present.
| Field |
Type |
Required |
Constraints |
steps |
array of object |
yes |
min items 1, max items 10 |
step_timeout_ms |
integer |
no |
min 1000, max 60000 |
total_timeout_ms |
integer |
no |
min 1000, max 600000 |
No other field is ever present.