Skip to main content
Monitors track a model or project’s drift, performance, and data quality metrics over time in Arize AX and alert you when something changes. The Configure Monitors guide covers monitor concepts (evaluation windows, baselines, thresholds) in the UI. Everything in that guide can also be done through the GraphQL API, which is the better path once you manage more than a handful of monitors: bulk threshold tuning, templated monitor creation across many features or models, and scheduled downtime. This guide assumes you already know how to form a GraphQL call with an x-api-key header against https://app.arize.com/graphql.

Find the IDs you need

Every monitor mutation takes a monitor ID, and every create mutation takes a model ID (or a space ID plus model name). Start from viewer to find your space, then the space’s models connection to find the model. See Using global node IDs for how these opaque IDs work.
Once you have a model’s or space’s ID, fetch any object directly with the node root field, for example node(id: "<MONITOR_ID>") { ... on Monitor { name } }.

List monitors for a model, filtered by status

Monitors live on both Model and Space through the same monitors connection, with filters for category and current status. This is the fastest way to find every triggered monitor on a model.
latestComputedValue is the monitor’s most recent computed metric value. It replaces the old currentMetricValue field, which no longer exists on Monitor.

Create a drift monitor on a feature with a custom baseline

Drift monitors compare a primary window against a baseline. By default a monitor uses the model’s primary baseline, but you can give it its own moving-window baseline instead, as shown here.
Reference: createDriftMonitor.

Create a performance monitor with contacts and a webhook

Performance monitors watch a metric like accuracy or recall and alert when it crosses a threshold. Pair an email contact with a webhook subscription so the same trigger reaches both a person and an external system. Webhooks must already exist as webhook destinations in your account; webhookId is that destination’s ID.
Reference: createPerformanceMonitor.

Create a data quality monitor

Data quality monitors watch a dimension-level metric, such as the percentage of empty values on a feature.
Reference: createDataQualityMonitor.

Raise the threshold on every drift monitor in a space

This is the most common bulk operation: pull every drift monitor in a space, then patch each one’s threshold. List first, mutate second, since patchDriftMonitor takes one monitor ID at a time.
Setting dynamicAutoThresholdEnabled: false alongside the new threshold matters: if a monitor already has dynamic auto-thresholds on, a manual threshold write is otherwise overwritten the next time the monitor recalculates. Reference: patchDriftMonitor.

Switch a monitor to dynamic auto-thresholds

Instead of a fixed threshold, a monitor can recompute its threshold on a schedule as mean +/- stdDevMultiplier * stdDev. This works on any monitor type through the generic patchMonitor mutation.
Reference: patchMonitor.

Schedule recurring downtime for a monitor

Downtime suppresses evaluation for a window that repeats on a cadence, useful for known maintenance windows or batch jobs that temporarily skew a metric.
downtimeDurationHrs must be between 1 and 1344 hours (56 days), and downtimeFrequencyDays between 1 and 56 days. Reference: patchMonitor.

Trigger a monitor manually, then delete it

triggerMonitor forces an off-schedule evaluation, which is useful after you change a threshold and want to confirm the new condition immediately rather than waiting for the next evaluation interval. deleteMonitor removes a monitor permanently; there is no undo.
Reference: triggerMonitor, deleteMonitor.

Gotchas and behavior notes

  1. currentMetricValue and a patched autoThresholdEnabled are not real. Older examples query currentMetricValue on Monitor, which does not exist; use latestComputedValue instead. Older examples also patch autoThresholdEnabled inside a set input, but the patch inputs (DriftMonitorPatchInput, PerformanceMonitorPatchInput, DataQualityMonitorPatchInput, MonitorPatchInput) only accept dynamicAutoThresholdEnabled. Monitor exposes both autoThresholdEnabled and dynamicAutoThresholdEnabled as read fields, which is easy to confuse with the patch-only name.
  2. Patched filters and modelVersions fully replace, not merge. On every patch input, supplying either array replaces the monitor’s existing list entirely. There is no append or partial update.
  3. You cannot change a monitor’s metric type or dimension with a patch. driftMetric, performanceMetric, dataQualityMetric, dimensionName, and dimensionCategory are set only at creation; no patch input exposes them. Delete and recreate the monitor to change what it measures.
  4. Range thresholds need the second set of fields. thresholdMode defaults to single. Set it to range and also supply threshold2, operator2, and optionally stdDevMultiplier2 to alert on both a lower and an upper bound.
  5. Evaluation window and delay are in seconds, not hours. evaluationWindowLengthSeconds and delaySeconds are both seconds despite their schema descriptions mentioning hours. The default evaluation window is 259200 seconds (3 days).
  6. Account-level monitor usage limits are deprecated. Account.monitorUsage is marked deprecated in the schema: monitors are no longer capped per pricing tier, so limit is always null and limitReached is always false.
  7. Integration contacts need an integration key, not an email. MonitorContactInput.notificationChannelType defaults to email. For a paging or chat integration, set it to integration and pass integrationKeyId instead of emailAddress. Integration keys are created separately and are not part of the monitors mutations covered here.

Monitor mutations reference

Full argument and field listing for all nine monitor mutations.

All GraphQL mutations

Browse mutations for every other domain.

API explorer

Try queries and mutations interactively with autocomplete.