Observe · Schema
MonitorResource
One monitor in full: the fields `GET /v1/monitors` returns for it, plus the query and rules that define it. Every field is required; one that can be absent comes back as an explicit null.
CompanyObservabilityMonitoringLogsMetricsTracesAPMSnowflake
Properties
| Name | Type | Description |
|---|---|---|
| id | object | |
| name | string | Name of the monitor, unique within its workspace. |
| description | stringnull | Monitor description. Null when no description is configured. |
| disabled | boolean | Whether the monitor is currently disabled, either by a user or automatically by the system on exceeding its alert rate or cost limit. |
| ruleKind | object | |
| monitorVersion | string | Version of the monitor's current definition, as a Unix nanosecond timestamp — currently identical to `updatedAt`, and so it advances on every save. Alerts record the version they were evaluated agains |
| createdBy | object | |
| createdAt | object | |
| updatedBy | object | |
| updatedAt | object | |
| disabledDetail | object | Why the monitor is disabled. Null when it is enabled. |
| scheduled | boolean | Whether the monitor runs on a cron, i.e. `scheduling.cron` is set. |
| rollupStatus | object | |
| health | object | |
| governorState | object | Cost-governor state. Null when no spend limit is configured for the monitor, which is the common case. `health` already folds this in; read it directly only to distinguish "no limit" from `Normal`. |
| alertState | object | |
| aiTriagingMode | object | Whether AI auto-investigation runs when this monitor alerts. Null when the stored mode is not one this API declares. Not reported as `None`, because the filter compares the stored value and `aiTriagin |
| muteState | object | |
| mutedUntil | object | When the mute covering this monitor expires. Null when the monitor is not muted, or is muted indefinitely — use `muteState` to tell those apart. |
| muteCount | integer | Number of mute rules currently covering this monitor. |
| lastErrorTime | object | When the monitor last logged a fatal error. Null if it never has. |
| lastAlarmTime | object | When the monitor last raised an alert. Null if it never has. |
| lastWarnTime | object | When the monitor last logged a non-fatal warning. Null if it never has. |
| managedBy | object | App that manages this monitor, or null when it is user-managed. Returned id-only; request the app separately for its metadata. |
| lookbackSeconds | number | Window of data each evaluation considers, in seconds. |
| dataStabilizationDelaySeconds | numbernull | How long evaluation waits for late data before judging a window, in seconds. Null when the monitor takes the server default. |
| maxAlertsPerHour | integernull | Alerts per hour after which the monitor disables itself. Null when the monitor takes the server default. |
| scheduling | object | |
| inputQuery | object | |
| valueColumn | stringnull | Column of the query output the monitor watches. Null for `Count`, `Promote` and `Composite`. |
| aggregation | object | How `valueColumn` is reduced over each window before the rules compare it. Null unless `ruleKind` is `Threshold`. |
| baseline | object | What an anomaly monitor compares `valueColumn` against. Null unless `ruleKind` is `Anomaly`. A composite's constituents and condition are read from `GET /v1/composite-monitors/{id}`. |
| rules | array | When the monitor alerts, one rule per severity, including a `NoData` rule when the monitor alerts on missing data. Empty for `Composite` monitors, whose condition and level are read from `GET /v1/comp |
| groupBy | array | Dimensions the rules are evaluated per; each distinct combination of values alerts independently. Empty for a single global alert. |
| serviceBindings | array | The service the monitor's alerts are attributed to. At most one entry; empty when the monitor is not bound to a service. |
| actions | array | The actions this monitor notifies through, and when each fires. Empty when it notifies nothing. |
| customVariables | objectnull | Free-form values the monitor author defined for substitution into action templates. Null when there are none. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/observeinc/main/json-schema/observeinc-monitor-resource-schema.json",
"title": "MonitorResource",
"description": "One monitor in full: the fields `GET /v1/monitors` returns for it, plus the query and rules that define it. Every field is required; one that can be absent comes back as an explicit null.\n",
"x-generated": "2026-10-13",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/observeinc-openapi.yml#/components/schemas/Monitor-Resource",
"type": "object",
"required": [
"id",
"name",
"description",
"disabled",
"ruleKind",
"monitorVersion",
"createdBy",
"createdAt",
"updatedBy",
"updatedAt",
"disabledDetail",
"scheduled",
"rollupStatus",
"health",
"governorState",
"alertState",
"aiTriagingMode",
"muteState",
"mutedUntil",
"muteCount",
"lastErrorTime",
"lastAlarmTime",
"lastWarnTime",
"managedBy",
"lookbackSeconds",
"dataStabilizationDelaySeconds",
"maxAlertsPerHour",
"scheduling",
"inputQuery",
"valueColumn",
"aggregation",
"baseline",
"rules",
"groupBy",
"serviceBindings",
"actions",
"customVariables"
],
"properties": {
"id": {
"$ref": "#/$defs/ObjectId"
},
"name": {
"type": "string",
"description": "Name of the monitor, unique within its workspace."
},
"description": {
"type": [
"string",
"null"
],
"description": "Monitor description. Null when no description is configured."
},
"disabled": {
"type": "boolean",
"description": "Whether the monitor is currently disabled, either by a user or automatically by the system on exceeding its alert rate or cost limit.\n"
},
"ruleKind": {
"$ref": "#/$defs/Monitor-RuleKind"
},
"monitorVersion": {
"type": "string",
"format": "int64",
"description": "Version of the monitor's current definition, as a Unix nanosecond timestamp — currently identical to `updatedAt`, and so it advances on every save. Alerts record the version they were evaluated against, so this identifies which definition produced a given alert. Carried as a string because it exceeds the JSON safe-integer range.\n"
},
"createdBy": {
"$ref": "#/$defs/User"
},
"createdAt": {
"$ref": "#/$defs/Time"
},
"updatedBy": {
"$ref": "#/$defs/User"
},
"updatedAt": {
"$ref": "#/$defs/Time"
},
"disabledDetail": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-DisabledDetail"
},
{
"type": "null"
}
],
"description": "Why the monitor is disabled. Null when it is enabled.\n"
},
"scheduled": {
"type": "boolean",
"description": "Whether the monitor runs on a cron, i.e. `scheduling.cron` is set.\n"
},
"rollupStatus": {
"$ref": "#/$defs/Monitor-RollupStatus"
},
"health": {
"$ref": "#/$defs/Monitor-Health"
},
"governorState": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-GovernorState"
},
{
"type": "null"
}
],
"description": "Cost-governor state. Null when no spend limit is configured for the monitor, which is the common case. `health` already folds this in; read it directly only to distinguish \"no limit\" from `Normal`.\n"
},
"alertState": {
"$ref": "#/$defs/Monitor-AlertState"
},
"aiTriagingMode": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-AiTriagingMode"
},
{
"type": "null"
}
],
"description": "Whether AI auto-investigation runs when this monitor alerts. Null when the stored mode is not one this API declares. Not reported as `None`, because the filter compares the stored value and `aiTriagingMode == \"None\"` would not select these rows.\n"
},
"muteState": {
"$ref": "#/$defs/Monitor-MuteState"
},
"mutedUntil": {
"$ref": "#/$defs/NullableTime",
"description": "When the mute covering this monitor expires. Null when the monitor is not muted, or is muted indefinitely — use `muteState` to tell those apart.\n"
},
"muteCount": {
"type": "integer",
"format": "int64",
"description": "Number of mute rules currently covering this monitor."
},
"lastErrorTime": {
"$ref": "#/$defs/NullableTime",
"description": "When the monitor last logged a fatal error. Null if it never has.\n"
},
"lastAlarmTime": {
"$ref": "#/$defs/NullableTime",
"description": "When the monitor last raised an alert. Null if it never has."
},
"lastWarnTime": {
"$ref": "#/$defs/NullableTime",
"description": "When the monitor last logged a non-fatal warning. Null if it never has.\n"
},
"managedBy": {
"anyOf": [
{
"$ref": "#/$defs/ObjectRef"
},
{
"type": "null"
}
],
"description": "App that manages this monitor, or null when it is user-managed. Returned id-only; request the app separately for its metadata.\n"
},
"lookbackSeconds": {
"type": "number",
"format": "double",
"description": "Window of data each evaluation considers, in seconds."
},
"dataStabilizationDelaySeconds": {
"type": [
"number",
"null"
],
"format": "double",
"description": "How long evaluation waits for late data before judging a window, in seconds. Null when the monitor takes the server default.\n"
},
"maxAlertsPerHour": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Alerts per hour after which the monitor disables itself. Null when the monitor takes the server default.\n"
},
"scheduling": {
"$ref": "#/$defs/Monitor-Scheduling"
},
"inputQuery": {
"$ref": "#/$defs/Monitor-MultiStageQuery"
},
"valueColumn": {
"type": [
"string",
"null"
],
"description": "Column of the query output the monitor watches. Null for `Count`, `Promote` and `Composite`.\n"
},
"aggregation": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-ValueAggregation"
},
{
"type": "null"
}
],
"description": "How `valueColumn` is reduced over each window before the rules compare it. Null unless `ruleKind` is `Threshold`.\n"
},
"baseline": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-Baseline"
},
{
"type": "null"
}
],
"description": "What an anomaly monitor compares `valueColumn` against. Null unless `ruleKind` is `Anomaly`. A composite's constituents and condition are read from `GET /v1/composite-monitors/{id}`.\n"
},
"rules": {
"type": "array",
"description": "When the monitor alerts, one rule per severity, including a `NoData` rule when the monitor alerts on missing data. Empty for `Composite` monitors, whose condition and level are read from `GET /v1/composite-monitors/{id}`.\n",
"items": {
"$ref": "#/$defs/Monitor-Rule"
}
},
"groupBy": {
"type": "array",
"description": "Dimensions the rules are evaluated per; each distinct combination of values alerts independently. Empty for a single global alert.\n",
"items": {
"$ref": "#/$defs/Monitor-Grouping"
}
},
"serviceBindings": {
"type": "array",
"description": "The service the monitor's alerts are attributed to. At most one entry; empty when the monitor is not bound to a service.\n",
"items": {
"$ref": "#/$defs/Monitor-ServiceBinding"
}
},
"actions": {
"type": "array",
"description": "The actions this monitor notifies through, and when each fires. Empty when it notifies nothing.\n",
"items": {
"$ref": "#/$defs/Monitor-ActionRule"
}
},
"customVariables": {
"type": [
"object",
"null"
],
"additionalProperties": true,
"description": "Free-form values the monitor author defined for substitution into action templates. Null when there are none.\n"
}
},
"$defs": {
"DatasetBrief": {
"title": "DatasetBrief",
"type": "object",
"description": "Brief record fields for a DatasetRef (label, description, iconUrl, contentType). Field naming mirrors ObjectBrief in this same file (iconUrl, not icon) for consistency across reference-brief pairs.\n",
"required": [
"label",
"description",
"iconUrl",
"contentType"
],
"properties": {
"label": {
"type": "string"
},
"description": {
"type": "string"
},
"iconUrl": {
"type": "string"
},
"contentType": {
"$ref": "#/$defs/DatasetContentType",
"description": "The type of data the referenced dataset contains — Resource, Log,\nMetric, OTelSpan, OTelTrace, or Unknown. Derived from the dataset's\nkind and interface bindings.\n"
}
}
},
"DatasetContentType": {
"title": "DatasetContentType",
"type": "string",
"description": "The type of data a dataset contains. For Resource datasets, this is\ndetermined by the dataset kind. For other kinds, it is derived from the\ndataset's interface bindings. Returns Unknown if no recognized interface\nis found.\n",
"enum": [
"Unknown",
"Resource",
"Log",
"Metric",
"OTelSpan",
"OTelTrace"
]
},
"DatasetRef": {
"title": "DatasetRef",
"type": "object",
"description": "A reference to a dataset. Always carries the id; the optional `record` field carries the brief metadata, populated when expand=true. Mirrors ObjectRef (see ObjectRef / ObjectBrief in this file).\n",
"required": [
"id"
],
"properties": {
"id": {
"$ref": "#/$defs/ObjectId"
},
"record": {
"$ref": "#/$defs/DatasetBrief"
}
}
},
"Monitor-ActionRule": {
"title": "MonitorActionRule",
"type": "object",
"description": "Binds one action to the monitor, and says when it fires.",
"required": [
"action",
"levels",
"conditions",
"sendEndNotifications",
"sendRemindersIntervalSeconds"
],
"properties": {
"action": {
"$ref": "#/$defs/MonitorAction-Ref"
},
"levels": {
"type": "array",
"description": "Severities that fire this action. Empty means every severity.",
"items": {
"$ref": "#/$defs/Monitor-AlarmLevel"
}
},
"conditions": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-ComparisonExpression"
},
{
"type": "null"
}
],
"description": "Condition on the alert's values, so one monitor can route different groups to different actions. Null to fire for every alert at `levels`.\n"
},
"sendEndNotifications": {
"type": "boolean",
"description": "Whether the action also fires when an alert resolves."
},
"sendRemindersIntervalSeconds": {
"type": [
"number",
"null"
],
"format": "double",
"description": "How often to re-notify while an alert stays open, in seconds. Null to notify once.\n"
}
}
},
"Monitor-AiTriagingMode": {
"title": "MonitorAiTriagingMode",
"type": "string",
"description": "Whether AI auto-investigation runs when this monitor alerts. `None` disables it; `Triage` runs it.\n",
"enum": [
"None",
"Triage"
]
},
"Monitor-AlarmLevel": {
"title": "MonitorAlarmLevel",
"type": "string",
"description": "Severity of an alert. `NoData` comes from a no-data rule rather than a comparison.\n",
"enum": [
"Critical",
"Error",
"Informational",
"NoData",
"None",
"Warning"
]
},
"Monitor-AlarmMode": {
"title": "MonitorAlarmMode",
"type": "string",
"description": "How alerts span consecutive cron runs. `PerRun` raises a separate alert per firing run. `Ongoing` extends one alert across consecutive runs that fire for the same group and severity.\n",
"enum": [
"Ongoing",
"PerRun"
]
},
"Monitor-AlertState": {
"title": "MonitorAlertState",
"type": "string",
"description": "Whether the monitor is alerting now, has alerted before, or never has. `Triggering` means an alarm is open, or one was raised since the last evaluation; a monitor that is turned off is never `Triggering` because it cannot evaluate. `Previous` means it has alerted at some point but is not now — the same set as `lastAlarmTime != null` minus the triggering ones.\n",
"enum": [
"Never",
"Previous",
"Triggering"
]
},
"Monitor-Baseline": {
"title": "MonitorBaseline",
"type": "object",
"description": "The baseline an anomaly monitor compares `valueColumn` against, and how far a value must stray from it. Exactly one of `basicAlgorithm` and `seasonalAlgorithm` is set.\n",
"required": [
"compareFn",
"computationWindowSeconds",
"frequencySeconds",
"basicAlgorithm",
"seasonalAlgorithm"
],
"properties": {
"compareFn": {
"$ref": "#/$defs/Monitor-BoundComparisonFunction"
},
"computationWindowSeconds": {
"type": [
"number",
"null"
],
"format": "double",
"description": "How much history the baseline is computed over, in seconds. Null when the monitor takes the server default.\n"
},
"frequencySeconds": {
"type": [
"number",
"null"
],
"format": "double",
"description": "How often the baseline is recomputed, in seconds. Null when the monitor takes the server default.\n"
},
"basicAlgorithm": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-BasicAlgorithm"
},
{
"type": "null"
}
],
"description": "Set when the monitor uses the standard-deviation algorithm."
},
"seasonalAlgorithm": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-SeasonalAlgorithm"
},
{
"type": "null"
}
],
"description": "Set when the monitor uses the seasonal algorithm."
}
}
},
"Monitor-BasicAlgorithm": {
"title": "MonitorBasicAlgorithm",
"type": "object",
"description": "Baseline as a mean, with anomalies a number of standard deviations away.",
"required": [
"numStandardDeviations"
],
"properties": {
"numStandardDeviations": {
"type": "integer",
"format": "int64",
"description": "How many standard deviations from the mean count as anomalous."
}
}
},
"Monitor-BooleanOperator": {
"title": "MonitorBooleanOperator",
"type": "string",
"description": "How a set of conditions combine.",
"enum": [
"And",
"Or"
]
},
"Monitor-BoundComparisonFunction": {
"title": "MonitorBoundComparisonFunction",
"type": "string",
"description": "Which side of the baseline counts as anomalous.",
"enum": [
"Above",
"AboveOrBelow",
"Below"
]
},
"Monitor-ColumnFilter": {
"title": "MonitorColumnFilter",
"type": "object",
"description": "A test on one column: its `columnComparisons`, combined by `operator`. The column is named as in `groupBy`: exactly one of `column`, `link` and `tag`.\n",
"required": [
"column",
"path",
"link",
"tag",
"operator",
"columnComparisons"
],
"properties": {
"column": {
"type": [
"string",
"null"
],
"description": "A column of the query output. Null for a link or tag."
},
"path": {
"type": [
"string",
"null"
],
"description": "Dotted path into `column`. Null for the whole column."
},
"link": {
"type": [
"string",
"null"
],
"description": "A link column. Null unless comparing on a link."
},
"tag": {
"type": [
"string",
"null"
],
"description": "Correlation tag, without the `#`. Null unless comparing on a tag."
},
"operator": {
"$ref": "#/$defs/Monitor-BooleanOperator",
"description": "How `columnComparisons` combine: `Or` matches when any holds, `And` when all do. Always returned. A monitor saved without one gets `And` when any comparison is `NotEqual`, `NotContains`, `NotStartsWith` or `IsNotNull`, and `Or` otherwise.\n"
},
"columnComparisons": {
"type": "array",
"description": "Comparisons applied to the column's value.",
"items": {
"$ref": "#/$defs/Monitor-Comparison"
}
}
}
},
"Monitor-ColumnPath": {
"title": "MonitorColumnPath",
"type": "object",
"description": "A column, optionally a field within it.",
"required": [
"name",
"path"
],
"properties": {
"name": {
"type": "string",
"description": "The column's name within its dataset."
},
"path": {
"type": [
"string",
"null"
],
"description": "Dotted path into the column. Null for the whole column."
}
}
},
"Monitor-Comparison": {
"title": "MonitorComparison",
"type": "object",
"description": "One comparison applied to a value.",
"required": [
"compareFn",
"compareValue",
"valueType"
],
"properties": {
"compareFn": {
"$ref": "#/$defs/Monitor-ComparisonFunction"
},
"compareValue": {
"type": [
"string",
"null"
],
"description": "The right-hand side as a string, in the form `valueType` names. Null\nfor `IsNull` and `IsNotNull`, and for a stored null.\n\nNumbers are base-10, booleans `true`/`false`, timestamps RFC 3339 in\nUTC, and **durations a count of nanoseconds** -- the one place in this\nschema a duration is not in seconds.\n"
},
"valueType": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-ValueType"
},
{
"type": "null"
}
],
"description": "Type of `compareValue`. Null when the comparison has no operand (`IsNull`, `IsNotNull`).\n"
}
}
},
"Monitor-ComparisonExpression": {
"title": "MonitorComparisonExpression",
"type": "object",
"description": "Boolean tree over column comparisons: `operator` combines this node's `compareTerms` and `subExpressions`.\n",
"required": [
"operator",
"compareTerms",
"subExpressions"
],
"properties": {
"operator": {
"$ref": "#/$defs/Monitor-BooleanOperator"
},
"compareTerms": {
"type": "array",
"description": "This node's own comparisons.",
"items": {
"$ref": "#/$defs/Monitor-ComparisonTerm"
}
},
"subExpressions": {
"type": "array",
"description": "Nested expressions. Empty at a leaf.",
"items": {
"$ref": "#/$defs/Monitor-ComparisonExpression"
}
}
}
},
"Monitor-ComparisonFunction": {
"title": "MonitorComparisonFunction",
"type": "string",
"description": "How a value is compared. `IsNull` and `IsNotNull` take no right-hand side; the rest require one.\n",
"enum": [
"Contains",
"Equal",
"Greater",
"GreaterOrEqual",
"IsNotNull",
"IsNull",
"Less",
"LessOrEqual",
"NotContains",
"NotEqual",
"NotStartsWith",
"StartsWith"
]
},
"Monitor-ComparisonTerm": {
"title": "MonitorComparisonTerm",
"type": "object",
"description": "One comparison against one column, named as in `groupBy`: exactly one of `column`, `link` and `tag`.\n",
"required": [
"column",
"path",
"link",
"tag",
"comparison"
],
"properties": {
"column": {
"type": [
"string",
"null"
],
"description": "A column of the query output. Null for a link or tag."
},
"path": {
"type": [
"string",
"null"
],
"description": "Dotted path into `column`. Null for the whole column."
},
"link": {
"type": [
"string",
"null"
],
"description": "A link column. Null unless comparing on a link."
},
"tag": {
"type": [
"string",
"null"
],
"description": "Correlation tag, without the `#`. Null unless comparing on a tag."
},
"comparison": {
"$ref": "#/$defs/Monitor-Comparison"
}
}
},
"Monitor-CronSchedule": {
"title": "MonitorCronSchedule",
"type": "object",
"description": "Evaluation on a wall-clock cron.",
"required": [
"rawCron",
"timezone",
"alarmMode"
],
"properties": {
"rawCron": {
"type": "string",
"description": "Crontab expression for when to evaluate."
},
"timezone": {
"type": "string",
"description": "IANA timezone the cron is interpreted in."
},
"alarmMode": {
"$ref": "#/$defs/Monitor-AlarmMode"
}
}
},
"Monitor-DisabledByAlertRateLimit": {
"title": "MonitorDisabledByAlertRateLimit",
"type": "object",
"description": "Detail for a monitor disabled for exceeding its alert rate limit.",
"required": [
"alertRateLimit",
"alertsGenerated",
"lookbackSeconds"
],
"properties": {
"alertRateLimit": {
"type": "integer",
"format": "int64",
"description": "The monitor's configured maximum alerts per hour."
},
"alertsGenerated": {
"type": "integer",
"format": "int64",
"description": "Alerts generated within the lookback window, which exceeded `alertRateLimit` and triggered the disable.\n"
},
"lookbackSeconds": {
"type": "number",
"description": "Length of the window over which alerts were counted."
}
}
},
"Monitor-DisabledByCost": {
"title": "MonitorDisabledByCost",
"type": "object",
"description": "Detail for a monitor the cost governor disabled.",
"required": [
"creditLimitPerDay"
],
"properties": {
"creditLimitPerDay": {
"type": "number",
"description": "The daily credit limit the monitor exceeded."
}
}
},
"Monitor-DisabledByResultTooBig": {
"title": "MonitorDisabledByResultTooBig",
"type": "object",
"description": "Detail for a monitor disabled because a run result was too large. Either the bytes pair or the rows pair is set; the other is null.\n",
"required": [
"bytesRead",
"bytesLimit",
"rowsRead",
"rowsLimit"
],
"properties": {
"bytesRead": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Bytes read. Null for a row-limit disable."
},
"bytesLimit": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Byte limit exceeded. Null for a row-limit disable."
},
"rowsRead": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Rows read. Null for a byte-limit disable."
},
"rowsLimit": {
"type": [
"integer",
"null"
],
"format": "int64",
"description": "Row limit exceeded. Null for a byte-limit disable."
}
}
},
"Monitor-DisabledByUser": {
"title": "MonitorDisabledByUser",
"type": "object",
"description": "Detail for a monitor a user explicitly disabled.",
"required": [
"disabledBy"
],
"properties": {
"disabledBy": {
"$ref": "#/$defs/User"
}
}
},
"Monitor-DisabledCause": {
"title": "MonitorDisabledCause",
"type": "string",
"description": "Why a monitor was disabled.",
"enum": [
"AlertRateLimit",
"Cost",
"ResultTooBig",
"User"
]
},
"Monitor-DisabledDetail": {
"title": "MonitorDisabledDetail",
"type": "object",
"description": "Why the monitor is disabled. Exactly one of the cause-specific fields is populated, matching `cause`; the others are null.\n",
"required": [
"cause",
"cost",
"alertRateLimit",
"user",
"resultTooBig"
],
"properties": {
"cause": {
"$ref": "#/$defs/Monitor-DisabledCause"
},
"cost": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-DisabledByCost"
},
{
"type": "null"
}
]
},
"alertRateLimit": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-DisabledByAlertRateLimit"
},
{
"type": "null"
}
]
},
"user": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-DisabledByUser"
},
{
"type": "null"
}
]
},
"resultTooBig": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-DisabledByResultTooBig"
},
{
"type": "null"
}
]
}
}
},
"Monitor-GovernorState": {
"title": "MonitorGovernorState",
"type": "string",
"description": "Where the monitor sits against its configured spend limit. `Normal` is within budget, `GracePeriod` is over it but still evaluating, and `CostDisabled` means the limit has turned it off.\n",
"enum": [
"CostDisabled",
"GracePeriod",
"Normal"
]
},
"Monitor-Grouping": {
"title": "MonitorGrouping",
"type": "object",
"description": "One dimension the rules are evaluated per. Exactly one of `column`, `link` and `tag` is set; `path` only accompanies `column`.\n",
"required": [
"column",
"path",
"link",
"tag",
"meta"
],
"properties": {
"column": {
"type": [
"string",
"null"
],
"description": "A column of the query output. Null for a link or tag."
},
"path": {
"type": [
"string",
"null"
],
"description": "Dotted path into `column`. Null for the whole column."
},
"link": {
"type": [
"string",
"null"
],
"description": "A link column, grouping by the linked resource. Null otherwise."
},
"tag": {
"type": [
"string",
"null"
],
"description": "Correlation tag, without the `#`. Null otherwise."
},
"meta": {
"anyOf": [
{
"$ref": "#/$defs/Monitor-GroupingMeta"
},
{
"type": "null"
}
],
"description": "What `link` or `tag` resolved to when the monitor was saved. Read-only. Null for a plain `column`.\n"
}
}
},
"Monitor-GroupingMeta": {
"title": "MonitorGroupingMeta",
"type": "object",
"description": "The physical columns a link or correlation tag resolves to.",
"required": [
"srcFields",
"dstFields",
"targetDataset"
],
"properties": {
"srcFields": {
"type": "array",
"description": "Columns of this dataset the link or tag reads.",
"items": {
"$ref": "#/$defs/Monitor-ColumnPath"
}
},
"dstFields": {
"type": "array",
"description": "Columns of the target dataset a link resolves to. Empty for a tag.",
"items": {
"type": "string"
}
},
"targetDataset": {
"anyOf": [
{
"$ref": "#/$defs/DatasetRef"
},
{
"type": "null"
}
],
"description": "Dataset a link points at. Null for a tag."
}
}
},
"Monitor-Health": {
"title": "MonitorHealth",
"type": "string",
"description": "The monitor's operating state as one value, which is what the monitors\nlist shows in its Health column and facets on.\n\n`rollupStatus` answers a narrower question — how the last evaluation\nwent — so it reports `Running` for a monitor that is turned off, over its\nspend limit, or on a passive cluster. `health` ranks those causes above\nthe run outcome, highest first:\n\n| Value | Meaning |\n|---|---|\n| `CostDisabled` | Turned off after exceeding its spend limit. |\n| `AlertRateLimitDisabled` | Turned off after exceeding its alert rate. |\n| `Disabled` | Turned off by a user. |\n| `ClusterPassive` | Its customer's monitoring is not active on this cluster, so nothing evaluates. Set for every monitor of that customer at once. |\n| `AtRisk` | Inside the grace period before its spend limit disables it. |\n| `Failed` | An error was logged since the last run, less than a week ago. |\n| `Warnings` | Likewise a warning. |\n| `Initializing` | An anomaly monitor that has not yet produced its output dataset, so it cannot evaluate. |\n| `Running` | None of the above. |\n\nA monitor can satisfy several; only the highest is reported, and the\nranking may change. `Initializing` is only partially reachable — see the\nnote under the list operation's `filter` for the warm-up tail this\nendpoint cannot see.\n",
"enum": [
"AlertRateLimitDisabled",
"AtRisk",
"ClusterPassive",
"CostDisabled",
"Disabled",
"Failed",
"Initializing",
"Running",
"Warnings"
]
},
"Monitor-InputRole": {
"title": "MonitorInputRole",
"type": "string",
"description": "How a stage uses an input: `Data` is queried, `Reference` is only joined against.\n",
"enum": [
"Data",
"Reference"
]
},
"Monitor-IntervalSchedule": {
"title": "MonitorIntervalSchedule",
"type": "object",
"description": "Evaluation on a fixed interval.",
"required": [
"intervalSeconds"
],
"properties": {
"intervalSeconds": {
"type": "number",
"format": "double",
"description": "How often the monitor evaluates, in seconds."
}
}
},
"Monitor-MultiStageQuery": {
"title": "MonitorMultiStageQuery",
"type": "object",
"description": "The OPAL query the rules are evaluated over, as a pipeline of stages.",
"required": [
"outputStage",
"stages"
],
"properties": {
"outputStage": {
# --- truncated at 32 KB (53 KB total) ---
# Full source: https://artifacts.apis.io/observeinc/json-schema/observeinc-monitor-resource-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/observeinc-monitor-resource"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.