{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/amazon-cloudwatch/json-schema/amazon-cloudwatch-put-composite-alarm-input-schema.json",
  "title": "PutCompositeAlarmInput",
  "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/PutCompositeAlarmInput",
  "type": "object",
  "properties": {
    "ActionsEnabled": {
      "type": "boolean",
      "description": "Indicates whether actions should be executed during any changes to the alarm state of the composite alarm. The default is TRUE."
    },
    "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: ] Amazon SNS actions: arn:aws:sns:region:account-id:sns-topic-name Lambda actions: Invoke the latest version of a Lambda function: arn:aws:lambda:region:account-id:function:function-name Invoke a specific version of a Lambda function: arn:aws:lambda:region:account-id:function:function-name:version-number Invoke a function by using an alias Lambda function: arn:aws:lambda:region:account-id:function:function-name:alias-name Systems M"
    },
    "AlarmDescription": {
      "type": "string",
      "description": "The description for the composite alarm."
    },
    "AlarmName": {
      "type": "string",
      "description": "The name for the composite alarm. This name must be unique within the Region."
    },
    "AlarmRule": {
      "type": "string",
      "description": "An expression that specifies which other alarms are to be evaluated to determine this composite alarm's state. For each alarm that you reference, you designate a function that specifies whether that alarm needs to be in ALARM state, OK state, or INSUFFICIENT_DATA state. You can use operators (AND, OR and NOT) to combine multiple functions in a single expression. You can use parenthesis to logically group the functions in your expression. You can use either alarm names or ARNs to reference the other alarms that are to be evaluated. Functions can include the following: ALARM(\"alarm-name or alarm"
    },
    "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: ] Amazon SNS actions: arn:aws:sns:region:account-id:sns-topic-name Lambda actions: Invoke the latest version of a Lambda function: arn:aws:lambda:region:account-id:function:function-name Invoke a specific version of a Lambda function: arn:aws:lambda:region:account-id:function:function-name:version-number Invoke a function by using an alias Lambda function: arn:aws:lambda:region:account-id:function:function-name:alias-na"
    },
    "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: ] Amazon SNS actions: arn:aws:sns:region:account-id:sns-topic-name Lambda actions: Invoke the latest version of a Lambda function: arn:aws:lambda:region:account-id:function:function-name Invoke a specific version of a Lambda function: arn:aws:lambda:region:account-id:function:function-name:version-number Invoke a function by using an alias Lambda function: arn:aws:lambda:region:account-id:function:function-name:alias-name"
    },
    "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 "
    },
    "ActionsSuppressor": {
      "type": "string",
      "description": "Actions will be suppressed if the suppressor alarm is in the ALARM state. ActionsSuppressor can be an AlarmName or an Amazon Resource Name (ARN) from an existing alarm."
    },
    "ActionsSuppressorWaitPeriod": {
      "type": "integer",
      "description": "The maximum time in seconds that the composite alarm waits for the suppressor alarm to go into the ALARM state. After this time, the composite alarm performs its actions. WaitPeriod is required only when ActionsSuppressor is specified."
    },
    "ActionsSuppressorExtensionPeriod": {
      "type": "integer",
      "description": "The maximum time in seconds that the composite alarm waits after suppressor alarm goes out of the ALARM state. After this time, the composite alarm performs its actions. ExtensionPeriod is required only when ActionsSuppressor is specified."
    },
    "ActionConfiguration": {
      "$ref": "#/$defs/ActionConfiguration"
    }
  },
  "required": [
    "AlarmName",
    "AlarmRule"
  ],
  "$defs": {
    "ActionConfiguration": {
      "type": "object",
      "properties": {
        "AlarmTagsPropagation": {
          "$ref": "#/$defs/AlarmTagsPropagation"
        }
      }
    },
    "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"
      ]
    },
    "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"
      ]
    }
  }
}