{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/amazon-cloudwatch/json-schema/amazon-cloudwatch-put-metric-alarm-input-schema.json",
  "title": "PutMetricAlarmInput",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/amazon-cloudwatch-amazon-cloudwatch-api-api-openapi.yml#/components/schemas/PutMetricAlarmInput",
  "type": "object",
  "properties": {
    "AlarmName": {
      "type": "string",
      "description": "The name for the alarm. This name must be unique within the Region. The name must contain only UTF-8 characters, and can't contain ASCII control characters"
    },
    "AlarmDescription": {
      "type": "string",
      "description": "The description for the alarm."
    },
    "ActionsEnabled": {
      "type": "boolean",
      "description": "Indicates whether actions should be executed during any changes to the alarm state. The default is TRUE."
    },
    "OKActions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The actions to execute when this alarm transitions to an OK state from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid values: EC2 actions: arn:aws:automate:region:ec2:stop arn:aws:automate:region:ec2:terminate arn:aws:automate:region:ec2:reboot arn:aws:automate:region:ec2:recover arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Stop/1.0 arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Terminate/1.0 arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Reboot/1.0 arn:aws:swf:region:account-id:action/actions/AWS_EC2.Insta"
    },
    "AlarmActions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The actions to execute when this alarm transitions to the ALARM state from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid values: EC2 actions: arn:aws:automate:region:ec2:stop arn:aws:automate:region:ec2:terminate arn:aws:automate:region:ec2:reboot arn:aws:automate:region:ec2:recover arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Stop/1.0 arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Terminate/1.0 arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Reboot/1.0 arn:aws:swf:region:account-id:action/actions/AWS_EC2.I"
    },
    "InsufficientDataActions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The actions to execute when this alarm transitions to the INSUFFICIENT_DATA state from any other state. Each action is specified as an Amazon Resource Name (ARN). Valid values: EC2 actions: arn:aws:automate:region:ec2:stop arn:aws:automate:region:ec2:terminate arn:aws:automate:region:ec2:reboot arn:aws:automate:region:ec2:recover arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Stop/1.0 arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Terminate/1.0 arn:aws:swf:region:account-id:action/actions/AWS_EC2.InstanceId.Reboot/1.0 arn:aws:swf:region:account-id:action/actio"
    },
    "MetricName": {
      "type": "string",
      "description": "The name for the metric associated with the alarm. For each PutMetricAlarm operation, you must specify either MetricName, a Metrics array, or an EvaluationCriteria. If you are creating an alarm based on a math expression, you cannot specify this parameter, or any of the Namespace, Dimensions, Period, Unit, Statistic, or ExtendedStatistic parameters. Instead, you specify all this information in the Metrics array."
    },
    "Namespace": {
      "type": "string",
      "description": "The namespace for the metric associated specified in MetricName."
    },
    "Statistic": {
      "type": "string",
      "enum": [
        "SampleCount",
        "Average",
        "Sum",
        "Minimum",
        "Maximum"
      ],
      "description": "The statistic for the metric specified in MetricName, other than percentile. For percentile statistics, use ExtendedStatistic. When you call PutMetricAlarm and specify a MetricName, you must specify either Statistic or ExtendedStatistic, but not both."
    },
    "ExtendedStatistic": {
      "type": "string",
      "description": "The extended statistic for the metric specified in MetricName. When you call PutMetricAlarm and specify a MetricName, you must specify either Statistic or ExtendedStatistic but not both. If you specify ExtendedStatistic, the following are valid values: p90 tm90 tc90 ts90 wm90 IQM PR(n:m) where n and m are values of the metric TC(X%:X%) where X is between 10 and 90 inclusive. TM(X%:X%) where X is between 10 and 90 inclusive. TS(X%:X%) where X is between 10 and 90 inclusive. WM(X%:X%) where X is between 10 and 90 inclusive. For more information about these extended statistics, see CloudWatch sta"
    },
    "Dimensions": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Dimension"
      },
      "description": "The dimensions for the metric specified in MetricName."
    },
    "Period": {
      "type": "integer",
      "description": "The length, in seconds, used each time the metric specified in MetricName is evaluated. Valid values are 10, 20, 30, and any multiple of 60. Period is required for alarms based on static thresholds. If you are creating an alarm based on a metric math expression, you specify the period for each metric within the objects in the Metrics array. Be sure to specify 10, 20, or 30 only for metrics that are stored by a PutMetricData call with a StorageResolution of 1. If you specify a period of 10, 20, or 30 for a metric that does not have sub-minute resolution, the alarm still attempts to gather data "
    },
    "Unit": {
      "type": "string",
      "enum": [
        "Seconds",
        "Microseconds",
        "Milliseconds",
        "Bytes",
        "Kilobytes",
        "Megabytes",
        "Gigabytes",
        "Terabytes",
        "Bits",
        "Kilobits",
        "Megabits",
        "Gigabits",
        "Terabits",
        "Percent",
        "Count",
        "Bytes/Second",
        "Kilobytes/Second",
        "Megabytes/Second",
        "Gigabytes/Second",
        "Terabytes/Second",
        "Bits/Second",
        "Kilobits/Second",
        "Megabits/Second",
        "Gigabits/Second",
        "Terabits/Second",
        "Count/Second",
        "None"
      ],
      "description": "The unit of measure for the statistic. For example, the units for the Amazon EC2 NetworkIn metric are Bytes because NetworkIn tracks the number of bytes that an instance receives on all network interfaces. You can also specify a unit when you create a custom metric. Units help provide conceptual meaning to your data. Metric data points that specify a unit of measure, such as Percent, are aggregated separately. If you are creating an alarm based on a metric math expression, you can specify the unit for each metric (if needed) within the objects in the Metrics array. If you don't specify Unit, C"
    },
    "EvaluationPeriods": {
      "type": "integer",
      "description": "The number of periods over which data is compared to the specified threshold. If you are setting an alarm that requires that a number of consecutive data points be breaching to trigger the alarm, this value specifies that number. If you are setting an \"M out of N\" alarm, this value is the N."
    },
    "DatapointsToAlarm": {
      "type": "integer",
      "description": "The number of data points that must be breaching to trigger the alarm. This is used only if you are setting an \"M out of N\" alarm. In that case, this value is the M. For more information, see Evaluating an Alarm in the Amazon CloudWatch User Guide."
    },
    "Threshold": {
      "type": "number",
      "description": "The value against which the specified statistic is compared. This parameter is required for alarms based on static thresholds, but should not be used for alarms based on anomaly detection models."
    },
    "ComparisonOperator": {
      "type": "string",
      "enum": [
        "GreaterThanOrEqualToThreshold",
        "GreaterThanThreshold",
        "LessThanThreshold",
        "LessThanOrEqualToThreshold",
        "LessThanLowerOrGreaterThanUpperThreshold",
        "LessThanLowerThreshold",
        "GreaterThanUpperThreshold"
      ],
      "description": "The arithmetic operation to use when comparing the specified statistic and threshold. The specified statistic value is used as the first operand. The values LessThanLowerOrGreaterThanUpperThreshold, LessThanLowerThreshold, and GreaterThanUpperThreshold are used only for alarms based on anomaly detection models."
    },
    "TreatMissingData": {
      "type": "string",
      "description": "Sets how this alarm is to handle missing data points. If TreatMissingData is omitted, the default behavior of missing is used. For more information, see Configuring How CloudWatch Alarms Treats Missing Data. Valid Values: breaching | notBreaching | ignore | missing Alarms that evaluate metrics in the AWS/DynamoDB namespace always ignore missing data even if you choose a different option for TreatMissingData. When an AWS/DynamoDB metric has missing data, alarms that evaluate that metric remain in their current state. This parameter is not applicable to PromQL alarms."
    },
    "EvaluateLowSampleCountPercentile": {
      "type": "string",
      "description": "Used only for alarms based on percentiles. If you specify ignore, the alarm state does not change during periods with too few data points to be statistically significant. If you specify evaluate or omit this parameter, the alarm is always evaluated and possibly changes state no matter how many data points are available. For more information, see Percentile-Based CloudWatch Alarms and Low Data Samples. Valid Values: evaluate | ignore"
    },
    "Metrics": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/MetricDataQuery"
      },
      "description": "An array of MetricDataQuery structures that enable you to create an alarm based on the result of a metric math expression. For each PutMetricAlarm operation, you must specify either MetricName, a Metrics array, or an EvaluationCriteria. Each item in the Metrics array either retrieves a metric or performs a math expression. One item in the Metrics array is the expression that the alarm watches. You designate this expression by setting ReturnData to true for this object in the array. For more information, see MetricDataQuery. If you use the Metrics parameter, you cannot include the Namespace, Me"
    },
    "Tags": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Tag"
      },
      "description": "A list of key-value pairs to associate with the alarm. You can associate as many as 50 tags with an alarm. To be able to associate tags with the alarm when you create the alarm, you must have the cloudwatch:TagResource permission. Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values. If you are using this operation to update an existing alarm, any tags you specify in this parameter are ignored. To change the tags of an existing alarm, use TagResource or "
    },
    "ThresholdMetricId": {
      "type": "string",
      "description": "If this is an alarm based on an anomaly detection model, make this value match the ID of the ANOMALY_DETECTION_BAND function. For an example of how to use this parameter, see the Anomaly Detection Model Alarm example on this page. If your alarm uses this parameter, it cannot have Auto Scaling actions."
    },
    "EvaluationWindow": {
      "$ref": "#/$defs/EvaluationWindow"
    },
    "WarmUpConfiguration": {
      "$ref": "#/$defs/WarmUpConfiguration"
    },
    "EvaluationCriteria": {
      "$ref": "#/$defs/EvaluationCriteria"
    },
    "EvaluationInterval": {
      "type": "integer",
      "description": "The frequency, in seconds, at which the alarm is evaluated. Valid values are 10, 20, 30, and any multiple of 60. This parameter is required for alarms that use EvaluationCriteria, and cannot be specified for alarms configured with MetricName or Metrics."
    },
    "ActionConfiguration": {
      "$ref": "#/$defs/ActionConfiguration"
    }
  },
  "required": [
    "AlarmName"
  ],
  "$defs": {
    "ActionConfiguration": {
      "type": "object",
      "properties": {
        "AlarmTagsPropagation": {
          "$ref": "#/$defs/AlarmTagsPropagation"
        }
      }
    },
    "AlarmPromQLCriteria": {
      "type": "object",
      "properties": {
        "Query": {
          "type": "string",
          "description": "The PromQL query that the alarm evaluates. The query must return a result of vector type. Each entry in the vector result represents an alarm contributor."
        },
        "PendingPeriod": {
          "type": "integer",
          "description": "The duration, in seconds, that a contributor must be continuously breaching before it transitions to the ALARM state."
        },
        "RecoveryPeriod": {
          "type": "integer",
          "description": "The duration, in seconds, that a contributor must continuously not be breaching before it transitions back to the OK state."
        }
      },
      "required": [
        "Query"
      ]
    },
    "AlarmTagsPropagation": {
      "type": "object",
      "properties": {
        "Enabled": {
          "type": "boolean",
          "description": "Set to true to include the alarm's tags. Set to false to stop including them. When this is true, you must have the cloudwatch:ListTagsForResource permission on the alarm to create or update it."
        },
        "IncludedTagKeys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The tag keys to include. Only the alarm's tags with these keys are included. You can specify 1 to 50 tag keys. Each tag key must be 1 to 128 characters long. You can't specify both IncludedTagKeys and ExcludedTagKeys."
        },
        "ExcludedTagKeys": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The tag keys to exclude. All of the alarm's tags except those with these keys are included. You can specify 1 to 50 tag keys. Each tag key must be 1 to 128 characters long. You can't specify both IncludedTagKeys and ExcludedTagKeys."
        }
      },
      "required": [
        "Enabled"
      ]
    },
    "Dimension": {
      "type": "object",
      "properties": {
        "Name": {
          "type": "string",
          "description": "The name of the dimension. Dimension names must contain only ASCII characters, must include at least one non-whitespace character, and cannot start with a colon (:). ASCII control characters are not supported as part of dimension names."
        },
        "Value": {
          "type": "string",
          "description": "The value of the dimension. Dimension values must contain only ASCII characters and must include at least one non-whitespace character. ASCII control characters are not supported as part of dimension values."
        }
      },
      "required": [
        "Name",
        "Value"
      ]
    },
    "EvaluationCriteria": {
      "type": "object",
      "properties": {
        "PromQLCriteria": {
          "$ref": "#/$defs/AlarmPromQLCriteria"
        }
      },
      "description": "Exactly one member is set."
    },
    "EvaluationWindow": {
      "type": "object",
      "properties": {
        "WallClockWindow": {
          "$ref": "#/$defs/WallClockWindow"
        },
        "SlidingWindow": {
          "$ref": "#/$defs/SlidingWindow"
        }
      },
      "description": "Exactly one member is set."
    },
    "Metric": {
      "type": "object",
      "properties": {
        "Namespace": {
          "type": "string",
          "description": "The namespace of the metric."
        },
        "MetricName": {
          "type": "string",
          "description": "The name of the metric. This is a required field."
        },
        "Dimensions": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Dimension"
          },
          "description": "The dimensions for the metric."
        }
      }
    },
    "MetricDataQuery": {
      "type": "object",
      "properties": {
        "Id": {
          "type": "string",
          "description": "A short name used to tie this object to the results in the response. This name must be unique within a single call to GetMetricData. If you are performing math expressions on this set of data, this name represents that data and can serve as a variable in the mathematical expression. The valid characters are letters, numbers, and underscore. The first character must be a lowercase letter."
        },
        "MetricStat": {
          "$ref": "#/$defs/MetricStat"
        },
        "Expression": {
          "type": "string",
          "description": "This field can contain either a Metrics Insights query, or a metric math expression to be performed on the returned data. For more information about Metrics Insights queries, see Metrics Insights query components and syntax in the Amazon CloudWatch User Guide. A math expression can use the Id of the other metrics or queries to refer to those metrics, and can also use the Id of other expressions to use the result of those expressions. For more information about metric math expressions, see Metric Math Syntax and Functions in the Amazon CloudWatch User Guide. Within each MetricDataQuery object, "
        },
        "Label": {
          "type": "string",
          "description": "A human-readable label for this metric or expression. This is especially useful if this is an expression, so that you know what the value represents. If the metric or expression is shown in a CloudWatch dashboard widget, the label is shown. If Label is omitted, CloudWatch generates a default. You can put dynamic expressions into a label, so that it is more descriptive. For more information, see Using Dynamic Labels."
        },
        "ReturnData": {
          "type": "boolean",
          "description": "When used in GetMetricData, this option indicates whether to return the timestamps and raw data values of this metric. If you are performing this call just to do math expressions and do not also need the raw data returned, you can specify false. If you omit this, the default of true is used. When used in PutMetricAlarm, specify true for the one expression result to use as the alarm. For all other metrics and expressions in the same PutMetricAlarm operation, specify ReturnData as False."
        },
        "Period": {
          "type": "integer",
          "description": "The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 20, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a PutMetricData operation that includes a StorageResolution of 1 second."
        },
        "AccountId": {
          "type": "string",
          "description": "The ID of the account where the metrics are located. If you are performing a GetMetricData operation in a monitoring account, use this to specify which account to retrieve this metric from. If you are performing a PutMetricAlarm operation, use this to specify which account contains the metric that the alarm is watching."
        }
      },
      "required": [
        "Id"
      ]
    },
    "MetricStat": {
      "type": "object",
      "properties": {
        "Metric": {
          "$ref": "#/$defs/Metric"
        },
        "Period": {
          "type": "integer",
          "description": "The granularity, in seconds, of the returned data points. For metrics with regular resolution, a period can be as short as one minute (60 seconds) and must be a multiple of 60. For high-resolution metrics that are collected at intervals of less than one minute, the period can be 1, 5, 10, 20, 30, 60, or any multiple of 60. High-resolution metrics are those metrics stored by a PutMetricData call that includes a StorageResolution of 1 second. If the StartTime parameter specifies a time stamp that is greater than 3 hours ago, you must specify the period as follows or no data points in that time r"
        },
        "Stat": {
          "type": "string",
          "description": "The statistic to return. It can include any CloudWatch statistic or extended statistic."
        },
        "Unit": {
          "type": "string",
          "enum": [
            "Seconds",
            "Microseconds",
            "Milliseconds",
            "Bytes",
            "Kilobytes",
            "Megabytes",
            "Gigabytes",
            "Terabytes",
            "Bits",
            "Kilobits",
            "Megabits",
            "Gigabits",
            "Terabits",
            "Percent",
            "Count",
            "Bytes/Second",
            "Kilobytes/Second",
            "Megabytes/Second",
            "Gigabytes/Second",
            "Terabytes/Second",
            "Bits/Second",
            "Kilobits/Second",
            "Megabits/Second",
            "Gigabits/Second",
            "Terabits/Second",
            "Count/Second",
            "None"
          ],
          "description": "When you are using a Put operation, this defines what unit you want to use when storing the metric. In a Get operation, if you omit Unit then all data that was collected with any unit is returned, along with the corresponding units that were specified when the data was reported to CloudWatch. If you specify a unit, the operation returns only data that was collected with that unit specified. If you specify a unit that does not match the data collected, the results of the operation are null. CloudWatch does not perform unit conversions."
        }
      },
      "required": [
        "Metric",
        "Period",
        "Stat"
      ]
    },
    "SlidingWindow": {
      "type": "object",
      "properties": {}
    },
    "Tag": {
      "type": "object",
      "properties": {
        "Key": {
          "type": "string",
          "description": "A string that you can use to assign a value. The combination of tag keys and values can help you organize and categorize your resources."
        },
        "Value": {
          "type": "string",
          "description": "The value for the specified tag key."
        }
      },
      "required": [
        "Key",
        "Value"
      ]
    },
    "WallClockWindow": {
      "type": "object",
      "properties": {
        "Timezone": {
          "type": "string",
          "description": "The time zone to use when the alarm aligns the evaluation window to clock boundaries. You can specify an IANA time zone name (for example, America/New_York), a fixed UTC offset (for example, +05:30), or an offset-prefixed identifier (for example, UTC+05:30). The offset must be aligned to a multiple of 5 minutes. If you don't specify a time zone, CloudWatch uses UTC. The time zone affects window alignment for all periods, including periods of one hour or shorter."
        }
      }
    },
    "WarmUpConfiguration": {
      "type": "object",
      "properties": {
        "WarmUpPeriodDurationInMinutes": {
          "type": "integer",
          "description": "The length of the warm-up period, in minutes. After you create or update the alarm, the alarm stays in INSUFFICIENT_DATA for this duration. During this time, the alarm does not perform alarm actions. You can change this value at any time, including after the warm-up period ends. If you change it after the warm-up period ends, the new value does not restart the warm-up period."
        },
        "OnlyStartEvaluatingAfterWarmUpPeriodEnds": {
          "type": "boolean",
          "description": "Specifies whether the alarm waits for the full warm-up period before it starts to evaluate. The default is false. If true, the alarm waits the entire WarmUpPeriodDurationInMinutes before it starts to evaluate, even if metric data arrives earlier. If false, the alarm ends the warm-up period early. Evaluation begins as soon as the alarm has enough metric data to fill its evaluation window."
        }
      },
      "required": [
        "WarmUpPeriodDurationInMinutes"
      ]
    }
  }
}