Update a Monitor by ID

PUT /api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/

⚠️ This endpoint is currently in beta and may be subject to change. It is supported by New Monitors and Alerts and may not be viewable in the UI today.

Update an existing monitor

Path Parameters

organization_id_or_slug (string)
REQUIRED

The ID or slug of the organization the resource belongs to.

detector_id (integer)
REQUIRED

The ID of the monitor you'd like to query.

Body Parameters

name (string)
REQUIRED

Name of the monitor.

type (string)
REQUIRED

The type of monitor - metric_issue.

data_sources (array(undefined))

The data sources for the monitor to use based on what you want to measure.

Number of Errors Metric Monitor

Copied
    [
        {
            "aggregate": "count()",
            "dataset" : "events",
            "environment": "prod",
            "eventTypes": ["default", "error"],
            "query": "is:unresolved",
            "queryType": 0,
            "timeWindow": 3600,
        },
    ],

Users Experiencing Errors Metric Monitor

Copied
    [
        {
            "aggregate": "count_unique(tags[sentry:user])",
            "dataset" : "events",
            "environment": "prod",
            "eventTypes": ["default", "error"],
            "query": "is:unresolved",
            "queryType": 0,
            "timeWindow": 3600,
        },
    ],

Throughput Metric Monitor

Copied
    [
        {
            "aggregate":"count(span.duration)",
            "dataset":"events_analytics_platform",
            "environment":"prod",
            "eventTypes":["trace_item_span"]
            "query":"",
            "queryType":1,
            "timeWindow":3600,
            "extrapolationMode":"unknown",
        },
    ],

Duration Metric Monitor

Copied
    [
        {
            "aggregate":"p95(span.duration)",
            "dataset":"events_analytics_platform",
            "environment":"prod",
            "eventTypes":["trace_item_span"]
            "query":"",
            "queryType":1,
            "timeWindow":3600,
            "extrapolationMode":"unknown",
        },
    ],

Failure Rate Metric Monitor

Copied
    [
        {
            "aggregate":"failure_rate()",
            "dataset":"events_analytics_platform",
            "environment":"prod",
            "eventTypes":["trace_item_span"]
            "query":"",
            "queryType":1,
            "timeWindow":3600,
            "extrapolationMode":"unknown",
        },
    ],

Largest Contentful Paint Metric Monitor

Copied
    [
        {
            "aggregate":"p95(measurements.lcp)",
            "dataset":"events_analytics_platform",
            "environment":"prod",
            "eventTypes":["trace_item_span"]
            "query":"",
            "queryType":1,
            "timeWindow":3600,
            "extrapolationMode":"unknown",
        },
    ],
config (object)

The issue detection type configuration.

  • detectionType
    • static: Threshold based monitor
    • percent: Change based monitor
    • dynamic: Dynamic monitor
  • comparisonDelta: If selecting a change detection type, the comparison delta is the time period at which to compare against in minutes. For example, a value of 3600 compares the metric tracked against data 1 hour ago.
    • 300: 5 minutes
    • 900: 15 minutes
    • 3600: 1 hour
    • 86400: 1 day
    • 604800: 1 week
    • 2592000: 1 month

Threshold

Copied
{
    "detectionType": "static",
}

Change

Copied
{
    "detectionType": "percent",
    "comparisonDelta": 3600,
}

Dynamic

Copied
{
    "detectionType": "dynamic",
}
condition_group

Issue detection configuration for when to create an issue and at what priority level.

  • logicType: any

  • type: Any of gt (greater than), lte (less than or equal), or anomaly_detection (dynamic)

  • comparison: Any positive integer. This is threshold that must be crossed for the monitor to create an issue, e.g. "Create a metric issue when there are more than 5 unresolved error events".

    • If creating a dynamic monitor, see the options below.
      • seasonality: auto
      • sensitivity: Level of responsiveness. Options are one of low, medium, or high
      • thresholdType: If you want to be alerted to anomalies that are moving above, below, or in both directions in relation to your threshold.
        • 0: Above
        • 1: Below
        • 2: Above and below
  • conditionResult: The issue state change when the threshold is crossed.

    • 75: High priority
    • 50: Low priority
    • 0: Resolved

Threshold and Change Monitor

Copied
    "logicType": "any",
    "conditions": [
        {
            "type": "gt",
            "comparison": 10,
            "conditionResult": 75
        },
        {
            "type": "lte",
            "comparison": 10,
            "conditionResult": 0
        }
    ],
    "actions": []

Threshold Monitor with Medium Priority

Copied
    "logicType": "any",
    "conditions": [
        {
            type: "gt",
            comparison: 5,
            conditionResult: 75
        },
        {
            type: "gt",
            comparison: 2,
            conditionResult: 50
        },
        {
            type: "lte",
            comparison: 2,
            conditionResult: 0
        }
    ],
    "actions": []

Dynamic Monitor

Copied
    "logicType": "any",
    "conditions": [
        {
            "type": "anomaly_detection",
            "comparison": {
                "seasonality": "auto",
                "sensitivity": "medium",
                "thresholdType": 2
            },
            "conditionResult": 75
        }
    ],
    "actions": []
owner (string)

The user or team who owns the monitor.

User

Copied
    "type": "user",
    "id": "12345",
    "name": "Jane Doe",
    "email": "jane.doe@sentry.io"

Team

Copied
    "type": "team",
    "id": "123456789",
    "name": "example-team"
description (string)

A description of the monitor. Will be used in the resulting issue.

enabled (boolean)

Set to False if you want to disable the monitor.

Scopes

<auth_token> requires one of the following scopes:
  • alerts:write
  • org:admin
  • org:read
  • org:write
Copied
curl https://sentry.io/api/0/organizations/{organization_id_or_slug}/detectors/{detector_id}/ \
 -H 'Authorization: Bearer <auth_token>' \
 -X PUT \
 -H 'Content-Type: application/json' \
 -d '{}'
RESPONSESCHEMA
Copied
{ "id": "12345", "projectId": "1", "name": "Updated monitor", "description": null, "type": "metric_issue", "workflowIds": [], "owner": { "type": "user", "id": "4567", "name": "Jane Doe", "email": "jane@example.io" }, "createdBy": "45678", "dateCreated": "2026-01-09T18:47:41.596427Z", "dateUpdated": "2026-01-12T21:30:07.354861Z", "dataSources": [ { "id": "2345", "organizationId": "1", "type": "snuba_query_subscription", "sourceId": "1234", "queryObj": { "id": "3456", "status": 0, "subscription": "55/abc123def456ghi789", "snubaQuery": { "id": "56789", "dataset": "events_analytics_platform", "query": "", "aggregate": "p95(measurements.lcp)", "timeWindow": 3600, "environment": null, "eventTypes": [ "trace_item_span" ], "extrapolationMode": "unknown" } } } ], "conditionGroup": { "id": "12345678", "organizationId": "1", "logicType": "any", "conditions": [ { "id": "234567", "type": "gt", "comparison": 5, "conditionResult": 75 }, { "id": "234568", "type": "lte", "comparison": 5, "conditionResult": 0 } ], "actions": [] }, "config": { "detectionType": "static" }, "enabled": true, "latestGroup": { "id": "123456789", "title": "Test monitor", "culprit": "", "shortId": "SENTRY-1A2B", "level": "error", "status": "resolved", "substatus": null, "platform": "python", "project": { "id": "1", "name": "Backend", "slug": "sentry", "platform": "python" }, "type": "generic", "issueType": "metric_issue", "issueCategory": "metric", "metadata": { "title": "Test monitor", "value": "Critical: Number of events in the last hour above 5", "initial_priority": 75 }, "numComments": 0, "firstSeen": "2026-01-09T18:48:15.250134Z", "lastSeen": "2026-01-09T18:48:15.250134Z" }, "openIssues": 0 }
Was this helpful?