UptimeDay
One day's uptime entry returned by `GET /api/v1/monitors/{monitorID}/uptime`. `pct` is nullable: `null` means the day had no scheduled checks (render grey). A numeric `pct` is the share of the day NOT covered by `down`-incident overlap, clamped to `[0, 100]`, then floored to `0` when the day's counters show zero successful checks AND the monitor is corroborated down by either signal below (both netted against overlapping flapping-incident windows, so a flapping monitor's masked-downtime treatment is never overridden): an unresolved down incident whose net overlap with the day is greater than zero (any day), or the monitor's current resolved status being `down`, only when enabled, not flapping, and the current status began before the day ended — i.e. the day falls inside the monitor's current continuous down-period, not merely "today". Never floored when the monitor's resolved status is `up`. `latency` is nullable and independent of `pct`'s null condition: `pct` null keys off `scheduled = 0`, while `latency` null keys off there being zero successful checks to sample from that day (including days predating this feature). A day can carry a non-null `pct` and a null `latency` at the same time.
Uptime MonitoringAPI-FirstDeveloper ToolsObservabilitySoftware-as-a-Service
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/uptimemonitoring-com/json-schema/uptimemonitoring-com-uptime-day-schema.json",
"title": "UptimeDay",
"description": "One day's uptime entry returned by `GET /api/v1/monitors/{monitorID}/uptime`.\n\n`pct` is nullable: `null` means the day had no scheduled checks\n(render grey). A numeric `pct` is the share of the day NOT\ncovered by `down`-incident overlap, clamped to `[0, 100]`, then\nfloored to `0` when the day's counters show zero successful\nchecks AND the monitor is corroborated down by either signal\nbelow (both netted against overlapping flapping-incident\nwindows, so a flapping monitor's masked-downtime treatment is\nnever overridden): an unresolved down incident whose net\noverlap with the day is greater than zero (any day), or the\nmonitor's current resolved status being `down`, only when\nenabled, not flapping, and the current status began before the\nday ended — i.e. the day falls inside the monitor's current\ncontinuous down-period, not merely \"today\". Never floored when\nthe monitor's resolved status is `up`.\n\n`latency` is nullable and independent of `pct`'s null condition:\n`pct` null keys off `scheduled = 0`, while `latency` null keys\noff there being zero successful checks to sample from that day\n(including days predating this feature). A day can carry a\nnon-null `pct` and a null `latency` at the same time.\n",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/uptimemonitoring-com-openapi.yaml#/components/schemas/UptimeDay",
"type": "object",
"required": [
"day",
"scheduled",
"pct",
"latency"
],
"properties": {
"day": {
"type": "string",
"format": "date",
"description": "UTC calendar day (YYYY-MM-DD)."
},
"scheduled": {
"type": "integer",
"description": "Number of checks scheduled for this monitor on this day,\nsourced from `monitor_uptime_day.scheduled`. `0` means the\ndispatcher never tried to check this monitor (suspended,\ndisabled, kill switch, dispatcher outage, freshly created).\n"
},
"pct": {
"type": [
"number",
"null"
],
"format": "float",
"minimum": 0,
"maximum": 100,
"description": "Uptime percentage for the day, derived from down-incident\noverlap. `null` when `scheduled = 0`. Floored to `0` when\nthe day had zero successful checks and the monitor is\ncorroborated down by either signal, both netted against\noverlapping flapping-incident windows so a flapping\nmonitor's masked-downtime treatment is never overridden:\nan unresolved down incident whose net (post flap-mask)\noverlap with the day is greater than zero (any day), or the\nmonitor's current resolved status being `down` — only when\nthe monitor is enabled, not currently flapping, AND the\ncurrent status began before the day ended, i.e. the day\nfalls inside the monitor's current continuous down-period.\nThis reconciliation catches days where a runtime incident\nwrite was dropped and no `incidents` row covers the outage\n— including every day of a multi-week outage, not just the\nmost recent one. A day that predates the current down-period\n(status flipped down after that day already ended) is never\nfloored by current status alone. Never applied when the\nmonitor's resolved status is `up`. Always present in the\nJSON object — never omitted.\n"
},
"latency": {
"type": [
"object",
"null"
],
"description": "The day's latency candle: open/high/low/close/avg total\nresponse time in whole milliseconds (wopher `total_ms`: the\nfull request round-trip, DNS through last byte of\ndownload), built only from\nsuccessful checks against the monitor's sticky primary\nregion. All five values are rounded to the nearest whole\nmillisecond server-side (half away from zero).\n\n`null` when the day has no successful samples to build a\ncandle from — this includes days predating the feature.\nThis is a distinct null condition from `pct`: a fully\nscheduled, all-down day has a non-null `pct` but a null\n`latency`. Always present in the JSON object — never\nomitted.\n",
"required": [
"open",
"high",
"low",
"close",
"avg"
],
"properties": {
"open": {
"type": "number",
"format": "float",
"description": "First successful check's total response time of the day, in whole ms."
},
"high": {
"type": "number",
"format": "float",
"description": "Highest total response time among the day's successful checks, in whole ms."
},
"low": {
"type": "number",
"format": "float",
"description": "Lowest total response time among the day's successful checks, in whole ms."
},
"close": {
"type": "number",
"format": "float",
"description": "Most recent successful check's total response time of the day, in whole ms."
},
"avg": {
"type": "number",
"format": "float",
"description": "Arithmetic mean of the day's successful-check total\nresponse times (`latency_sum_ms / latency_count`,\ncomputed server-side; the underlying sum/count are not\nexposed on the wire), in whole ms.\n"
}
}
}
}
}
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.