{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/kinesis/json-schema/kinesis-create-channel-input-schema.json",
  "title": "CreateChannelInput",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/kinesis-channel-api-openapi.yml#/components/schemas/CreateChannelInput",
  "type": "object",
  "properties": {
    "ChannelName": {
      "type": "string",
      "description": "The name of the channel. The name is unique within your Amazon Web Services account and Amazon Web Services Region."
    },
    "ServiceExecutionRoleARN": {
      "type": "string",
      "description": "The Amazon Resource Name (ARN) of the IAM role that Amazon Kinesis Data Streams assumes to write records to the destination."
    },
    "StreamConfigurationList": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ChannelStreamConfiguration"
      },
      "description": "The source stream configuration for the channel. Currently, one stream is supported per channel."
    },
    "S3DestinationConfiguration": {
      "$ref": "#/$defs/S3DestinationConfiguration"
    },
    "S3TablesDestinationConfiguration": {
      "$ref": "#/$defs/S3TablesDestinationConfiguration"
    },
    "EncryptionConfiguration": {
      "$ref": "#/$defs/ChannelEncryptionConfiguration"
    },
    "Tags": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "A set of key-value pairs to assign to the channel. A tag consists of a required key and an optional value."
    },
    "LoggingConfiguration": {
      "$ref": "#/$defs/ChannelLoggingConfiguration"
    }
  },
  "required": [
    "ChannelName",
    "ServiceExecutionRoleARN",
    "StreamConfigurationList"
  ],
  "$defs": {
    "ChannelEncryptionConfiguration": {
      "type": "object",
      "properties": {
        "EncryptionType": {
          "type": "string",
          "enum": [
            "KMS"
          ],
          "description": "The encryption type. The only valid value is KMS."
        },
        "KeyId": {
          "type": "string",
          "description": "The identifier of the customer managed Amazon Web Services KMS key. You cannot use the Amazon Kinesis Data Streams service key (aws/kinesis)."
        }
      },
      "required": [
        "EncryptionType",
        "KeyId"
      ]
    },
    "ChannelLoggingConfiguration": {
      "type": "object",
      "properties": {
        "CloudWatchLogs": {
          "$ref": "#/$defs/CloudWatchLogs"
        }
      },
      "required": [
        "CloudWatchLogs"
      ]
    },
    "ChannelStreamConfiguration": {
      "type": "object",
      "properties": {
        "StreamARN": {
          "type": "string",
          "description": "The Amazon Resource Name (ARN) of the source Kinesis data stream."
        },
        "RecordConfiguration": {
          "$ref": "#/$defs/RecordConfiguration"
        }
      },
      "required": [
        "StreamARN",
        "RecordConfiguration"
      ]
    },
    "CloudWatchLogs": {
      "type": "object",
      "properties": {
        "Enabled": {
          "type": "boolean",
          "description": "Specifies whether logging to Amazon CloudWatch Logs is enabled."
        },
        "LogGroupName": {
          "type": "string",
          "description": "The name of the Amazon CloudWatch Logs log group. Defaults to /aws/kinesis/{channelName}/{channelId}."
        },
        "LogStreamName": {
          "type": "string",
          "description": "The name of the Amazon CloudWatch Logs log stream. Defaults to DestinationDelivery."
        }
      },
      "required": [
        "Enabled"
      ]
    },
    "DeadLetterQueueS3Configuration": {
      "type": "object",
      "properties": {
        "BucketARN": {
          "type": "string",
          "description": "The Amazon Resource Name (ARN) of the dead-letter queue Amazon S3 bucket."
        },
        "ExpectedBucketOwner": {
          "type": "string",
          "description": "The Amazon Web Services account ID of the expected owner of the dead-letter queue bucket."
        },
        "ErrorOutputPrefix": {
          "type": "string",
          "description": "The Amazon S3 key prefix for error records."
        }
      },
      "required": [
        "BucketARN",
        "ExpectedBucketOwner"
      ]
    },
    "PartitionField": {
      "type": "object",
      "properties": {
        "Transform": {
          "type": "string",
          "enum": [
            "TIME_HOUR"
          ],
          "description": "The partition transform to apply. The only valid value is TIME_HOUR."
        },
        "SourceName": {
          "type": "string",
          "description": "The name of the source column used for partitioning. This column must be of the timestamptz type."
        }
      },
      "required": [
        "Transform",
        "SourceName"
      ]
    },
    "PartitionSpec": {
      "type": "object",
      "properties": {
        "PartitionFields": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PartitionField"
          },
          "description": "The list of partition fields."
        }
      },
      "required": [
        "PartitionFields"
      ]
    },
    "RecordConfiguration": {
      "type": "object",
      "properties": {
        "RecordFormatType": {
          "type": "string",
          "enum": [
            "GSR_JSON",
            "JSON",
            "STRING",
            "BYTE_ARRAY"
          ],
          "description": "The format of records on the source stream. Valid values: GSR_JSON - Supported only for streaming table (Amazon S3 Tables) destinations. JSON - Supported for both general purpose Amazon S3 and streaming table destinations. STRING - Supported only for general purpose Amazon S3 destinations. BYTE_ARRAY - Supported only for general purpose Amazon S3 destinations."
        },
        "GSRSchemaARN": {
          "type": "string",
          "description": "The Amazon Resource Name (ARN) of the Amazon Web Services Glue Schema Registry schema used to validate records. Required when the channel destination is a streaming table."
        }
      },
      "required": [
        "RecordFormatType"
      ]
    },
    "S3DestinationConfiguration": {
      "type": "object",
      "properties": {
        "DataFreshnessInSeconds": {
          "type": "integer",
          "description": "The maximum age, in seconds, of undelivered data before the channel delivers it to the destination. The default value is 300 seconds."
        },
        "DeadLetterQueueS3Configuration": {
          "$ref": "#/$defs/DeadLetterQueueS3Configuration"
        },
        "StorageConfiguration": {
          "$ref": "#/$defs/S3StorageConfiguration"
        }
      },
      "required": [
        "StorageConfiguration"
      ]
    },
    "S3StorageConfiguration": {
      "type": "object",
      "properties": {
        "BucketARN": {
          "type": "string",
          "description": "The Amazon Resource Name (ARN) of the destination Amazon S3 bucket."
        },
        "ExpectedBucketOwner": {
          "type": "string",
          "description": "The Amazon Web Services account ID of the expected owner of the destination bucket. This value helps prevent delivery to an unintended bucket if ownership changes."
        },
        "OutputKeyTemplate": {
          "type": "string",
          "description": "The template used to construct the Amazon S3 object key for delivered objects. If not specified, a default template is used."
        },
        "StorageClass": {
          "type": "string",
          "enum": [
            "STANDARD",
            "INTELLIGENT_TIERING",
            "GLACIER_IR"
          ],
          "description": "The Amazon S3 storage class for delivered objects. Valid values: STANDARD - The default storage class, for frequently accessed data. INTELLIGENT_TIERING - Automatically moves objects to the most cost-effective access tier based on usage patterns. GLACIER_IR - Low-cost storage for rarely accessed data that requires millisecond retrieval."
        },
        "CompressionType": {
          "type": "string",
          "enum": [
            "NONE",
            "GZIP",
            "ZSTD"
          ],
          "description": "The compression applied to delivered objects. Valid values: NONE - No compression. GZIP - gzip compression. ZSTD - Zstandard compression."
        }
      },
      "required": [
        "BucketARN",
        "ExpectedBucketOwner",
        "CompressionType"
      ]
    },
    "S3TablesConfiguration": {
      "type": "object",
      "properties": {
        "TableBucketARN": {
          "type": "string",
          "description": "The Amazon Resource Name (ARN) of the Amazon S3 table bucket."
        },
        "Namespace": {
          "type": "string",
          "description": "The namespace (database) of the destination table."
        },
        "TableName": {
          "type": "string",
          "description": "The name of the destination table. Amazon Kinesis Data Streams creates this table in the specified table bucket."
        },
        "CompressionType": {
          "type": "string",
          "enum": [
            "NONE",
            "ZSTD",
            "SNAPPY"
          ],
          "description": "The compression applied to Parquet data files. Valid values: NONE - No compression. ZSTD - Zstandard compression. SNAPPY - Snappy compression."
        },
        "PartitionSpec": {
          "$ref": "#/$defs/PartitionSpec"
        }
      },
      "required": [
        "TableBucketARN",
        "Namespace",
        "TableName",
        "CompressionType"
      ]
    },
    "S3TablesDestinationConfiguration": {
      "type": "object",
      "properties": {
        "DataFreshnessInSeconds": {
          "type": "integer",
          "description": "The maximum age, in seconds, of undelivered data before the channel delivers it to the destination. The default value is 300 seconds."
        },
        "DeadLetterQueueS3Configuration": {
          "$ref": "#/$defs/DeadLetterQueueS3Configuration"
        },
        "S3TablesConfigurationList": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/S3TablesConfiguration"
          },
          "description": "The list of streaming table configurations. Currently, one table is supported per channel."
        }
      },
      "required": [
        "DeadLetterQueueS3Configuration",
        "S3TablesConfigurationList"
      ]
    }
  }
}