{
  "version":"2.0",
  "metadata":{
    "apiVersion":"2020-07-14",
    "endpointPrefix":"ivsrealtime",
    "jsonVersion":"1.1",
    "protocol":"rest-json",
    "serviceAbbreviation":"ivsrealtime",
    "serviceFullName":"Amazon Interactive Video Service RealTime",
    "serviceId":"IVS RealTime",
    "signatureVersion":"v4",
    "signingName":"ivs",
    "uid":"ivs-realtime-2020-07-14"
  },
  "operations":{
    "CreateEncoderConfiguration":{
      "name":"CreateEncoderConfiguration",
      "http":{
        "method":"POST",
        "requestUri":"/CreateEncoderConfiguration",
        "responseCode":200
      },
      "input":{"shape":"CreateEncoderConfigurationRequest"},
      "output":{"shape":"CreateEncoderConfigurationResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"},
        {"shape":"PendingVerification"}
      ],
      "documentation":"<p>Creates an EncoderConfiguration object.</p>"
    },
    "CreateParticipantToken":{
      "name":"CreateParticipantToken",
      "http":{
        "method":"POST",
        "requestUri":"/CreateParticipantToken",
        "responseCode":200
      },
      "input":{"shape":"CreateParticipantTokenRequest"},
      "output":{"shape":"CreateParticipantTokenResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"PendingVerification"}
      ],
      "documentation":"<p>Creates an additional token for a specified stage. This can be done after stage creation or when tokens expire. Tokens always are scoped to the stage for which they are created.</p> <p>Encryption keys are owned by Amazon IVS and never used directly by your application.</p>"
    },
    "CreateStage":{
      "name":"CreateStage",
      "http":{
        "method":"POST",
        "requestUri":"/CreateStage",
        "responseCode":200
      },
      "input":{"shape":"CreateStageRequest"},
      "output":{"shape":"CreateStageResponse"},
      "errors":[
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"PendingVerification"}
      ],
      "documentation":"<p>Creates a new stage (and optionally participant tokens).</p>"
    },
    "CreateStorageConfiguration":{
      "name":"CreateStorageConfiguration",
      "http":{
        "method":"POST",
        "requestUri":"/CreateStorageConfiguration",
        "responseCode":200
      },
      "input":{"shape":"CreateStorageConfigurationRequest"},
      "output":{"shape":"CreateStorageConfigurationResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"},
        {"shape":"PendingVerification"}
      ],
      "documentation":"<p>Creates a new storage configuration, used to enable recording to Amazon S3. When a StorageConfiguration is created, IVS will modify the S3 bucketPolicy of the provided bucket. This will ensure that IVS has sufficient permissions to write content to the provided bucket.</p>"
    },
    "DeleteEncoderConfiguration":{
      "name":"DeleteEncoderConfiguration",
      "http":{
        "method":"POST",
        "requestUri":"/DeleteEncoderConfiguration",
        "responseCode":200
      },
      "input":{"shape":"DeleteEncoderConfigurationRequest"},
      "output":{"shape":"DeleteEncoderConfigurationResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Deletes an EncoderConfiguration resource. Ensures that no Compositions are using this template; otherwise, returns an error.</p>"
    },
    "DeleteStage":{
      "name":"DeleteStage",
      "http":{
        "method":"POST",
        "requestUri":"/DeleteStage",
        "responseCode":200
      },
      "input":{"shape":"DeleteStageRequest"},
      "output":{"shape":"DeleteStageResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"ConflictException"},
        {"shape":"PendingVerification"}
      ],
      "documentation":"<p>Shuts down and deletes the specified stage (disconnecting all participants).</p>"
    },
    "DeleteStorageConfiguration":{
      "name":"DeleteStorageConfiguration",
      "http":{
        "method":"POST",
        "requestUri":"/DeleteStorageConfiguration",
        "responseCode":200
      },
      "input":{"shape":"DeleteStorageConfigurationRequest"},
      "output":{"shape":"DeleteStorageConfigurationResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Deletes the storage configuration for the specified ARN.</p> <p>If you try to delete a storage configuration that is used by a Composition, you will get an error (409 ConflictException). To avoid this, for all Compositions that reference the storage configuration, first use <a>StopComposition</a> and wait for it to complete, then use DeleteStorageConfiguration.</p>"
    },
    "DisconnectParticipant":{
      "name":"DisconnectParticipant",
      "http":{
        "method":"POST",
        "requestUri":"/DisconnectParticipant",
        "responseCode":200
      },
      "input":{"shape":"DisconnectParticipantRequest"},
      "output":{"shape":"DisconnectParticipantResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"PendingVerification"}
      ],
      "documentation":"<p>Disconnects a specified participant and revokes the participant permanently from a specified stage.</p>"
    },
    "GetComposition":{
      "name":"GetComposition",
      "http":{
        "method":"POST",
        "requestUri":"/GetComposition",
        "responseCode":200
      },
      "input":{"shape":"GetCompositionRequest"},
      "output":{"shape":"GetCompositionResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Get information about the specified Composition resource.</p>"
    },
    "GetEncoderConfiguration":{
      "name":"GetEncoderConfiguration",
      "http":{
        "method":"POST",
        "requestUri":"/GetEncoderConfiguration",
        "responseCode":200
      },
      "input":{"shape":"GetEncoderConfigurationRequest"},
      "output":{"shape":"GetEncoderConfigurationResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Gets information about the specified EncoderConfiguration resource. </p>"
    },
    "GetParticipant":{
      "name":"GetParticipant",
      "http":{
        "method":"POST",
        "requestUri":"/GetParticipant",
        "responseCode":200
      },
      "input":{"shape":"GetParticipantRequest"},
      "output":{"shape":"GetParticipantResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Gets information about the specified participant token.</p>"
    },
    "GetStage":{
      "name":"GetStage",
      "http":{
        "method":"POST",
        "requestUri":"/GetStage",
        "responseCode":200
      },
      "input":{"shape":"GetStageRequest"},
      "output":{"shape":"GetStageResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Gets information for the specified stage.</p>"
    },
    "GetStageSession":{
      "name":"GetStageSession",
      "http":{
        "method":"POST",
        "requestUri":"/GetStageSession",
        "responseCode":200
      },
      "input":{"shape":"GetStageSessionRequest"},
      "output":{"shape":"GetStageSessionResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Gets information for the specified stage session.</p>"
    },
    "GetStorageConfiguration":{
      "name":"GetStorageConfiguration",
      "http":{
        "method":"POST",
        "requestUri":"/GetStorageConfiguration",
        "responseCode":200
      },
      "input":{"shape":"GetStorageConfigurationRequest"},
      "output":{"shape":"GetStorageConfigurationResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Gets the storage configuration for the specified ARN.</p>"
    },
    "ListCompositions":{
      "name":"ListCompositions",
      "http":{
        "method":"POST",
        "requestUri":"/ListCompositions",
        "responseCode":200
      },
      "input":{"shape":"ListCompositionsRequest"},
      "output":{"shape":"ListCompositionsResponse"},
      "errors":[
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Gets summary information about all Compositions in your account, in the AWS region where the API request is processed. </p>"
    },
    "ListEncoderConfigurations":{
      "name":"ListEncoderConfigurations",
      "http":{
        "method":"POST",
        "requestUri":"/ListEncoderConfigurations",
        "responseCode":200
      },
      "input":{"shape":"ListEncoderConfigurationsRequest"},
      "output":{"shape":"ListEncoderConfigurationsResponse"},
      "errors":[
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Gets summary information about all EncoderConfigurations in your account, in the AWS region where the API request is processed.</p>"
    },
    "ListParticipantEvents":{
      "name":"ListParticipantEvents",
      "http":{
        "method":"POST",
        "requestUri":"/ListParticipantEvents",
        "responseCode":200
      },
      "input":{"shape":"ListParticipantEventsRequest"},
      "output":{"shape":"ListParticipantEventsResponse"},
      "errors":[
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Lists events for a specified participant that occurred during a specified stage session.</p>"
    },
    "ListParticipants":{
      "name":"ListParticipants",
      "http":{
        "method":"POST",
        "requestUri":"/ListParticipants",
        "responseCode":200
      },
      "input":{"shape":"ListParticipantsRequest"},
      "output":{"shape":"ListParticipantsResponse"},
      "errors":[
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Lists all participants in a specified stage session.</p>"
    },
    "ListStageSessions":{
      "name":"ListStageSessions",
      "http":{
        "method":"POST",
        "requestUri":"/ListStageSessions",
        "responseCode":200
      },
      "input":{"shape":"ListStageSessionsRequest"},
      "output":{"shape":"ListStageSessionsResponse"},
      "errors":[
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Gets all sessions for a specified stage.</p>"
    },
    "ListStages":{
      "name":"ListStages",
      "http":{
        "method":"POST",
        "requestUri":"/ListStages",
        "responseCode":200
      },
      "input":{"shape":"ListStagesRequest"},
      "output":{"shape":"ListStagesResponse"},
      "errors":[
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Gets summary information about all stages in your account, in the AWS region where the API request is processed.</p>"
    },
    "ListStorageConfigurations":{
      "name":"ListStorageConfigurations",
      "http":{
        "method":"POST",
        "requestUri":"/ListStorageConfigurations",
        "responseCode":200
      },
      "input":{"shape":"ListStorageConfigurationsRequest"},
      "output":{"shape":"ListStorageConfigurationsResponse"},
      "errors":[
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Gets summary information about all storage configurations in your account, in the AWS region where the API request is processed.</p>"
    },
    "ListTagsForResource":{
      "name":"ListTagsForResource",
      "http":{
        "method":"GET",
        "requestUri":"/tags/{resourceArn}",
        "responseCode":200
      },
      "input":{"shape":"ListTagsForResourceRequest"},
      "output":{"shape":"ListTagsForResourceResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"InternalServerException"}
      ],
      "documentation":"<p>Gets information about AWS tags for the specified ARN.</p>"
    },
    "StartComposition":{
      "name":"StartComposition",
      "http":{
        "method":"POST",
        "requestUri":"/StartComposition",
        "responseCode":200
      },
      "input":{"shape":"StartCompositionRequest"},
      "output":{"shape":"StartCompositionResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"},
        {"shape":"PendingVerification"}
      ],
      "documentation":"<p>Starts a Composition from a stage based on the configuration provided in the request.</p> <p>A Composition is an ephemeral resource that exists after this endpoint returns successfully. Composition stops and the resource is deleted:</p> <ul> <li> <p>When <a>StopComposition</a> is called.</p> </li> <li> <p>After a 1-minute timeout, when all participants are disconnected from the stage.</p> </li> <li> <p>After a 1-minute timeout, if there are no participants in the stage when StartComposition is called.</p> </li> <li> <p>When broadcasting to the IVS channel fails and all retries are exhausted.</p> </li> <li> <p>When broadcasting is disconnected and all attempts to reconnect are exhausted.</p> </li> </ul>"
    },
    "StopComposition":{
      "name":"StopComposition",
      "http":{
        "method":"POST",
        "requestUri":"/StopComposition",
        "responseCode":200
      },
      "input":{"shape":"StopCompositionRequest"},
      "output":{"shape":"StopCompositionResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"InternalServerException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"}
      ],
      "documentation":"<p>Stops and deletes a Composition resource. Any broadcast from the Composition resource is stopped.</p>"
    },
    "TagResource":{
      "name":"TagResource",
      "http":{
        "method":"POST",
        "requestUri":"/tags/{resourceArn}",
        "responseCode":200
      },
      "input":{"shape":"TagResourceRequest"},
      "output":{"shape":"TagResourceResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"InternalServerException"}
      ],
      "documentation":"<p>Adds or updates tags for the AWS resource with the specified ARN.</p>"
    },
    "UntagResource":{
      "name":"UntagResource",
      "http":{
        "method":"DELETE",
        "requestUri":"/tags/{resourceArn}",
        "responseCode":200
      },
      "input":{"shape":"UntagResourceRequest"},
      "output":{"shape":"UntagResourceResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"InternalServerException"}
      ],
      "documentation":"<p>Removes tags from the resource with the specified ARN.</p>",
      "idempotent":true
    },
    "UpdateStage":{
      "name":"UpdateStage",
      "http":{
        "method":"POST",
        "requestUri":"/UpdateStage",
        "responseCode":200
      },
      "input":{"shape":"UpdateStageRequest"},
      "output":{"shape":"UpdateStageResponse"},
      "errors":[
        {"shape":"ResourceNotFoundException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"},
        {"shape":"ServiceQuotaExceededException"},
        {"shape":"ConflictException"},
        {"shape":"PendingVerification"}
      ],
      "documentation":"<p>Updates a stage’s configuration.</p>"
    }
  },
  "shapes":{
    "AccessDeniedException":{
      "type":"structure",
      "members":{
        "exceptionMessage":{
          "shape":"errorMessage",
          "documentation":"<p>User does not have sufficient access to perform this action.</p>"
        }
      },
      "documentation":"<p/>",
      "error":{
        "httpStatusCode":403,
        "senderFault":true
      },
      "exception":true
    },
    "AttributeKey":{
      "type":"string",
      "max":128,
      "min":0,
      "pattern":"[a-zA-Z0-9-_]*"
    },
    "AutoParticipantRecordingConfiguration":{
      "type":"structure",
      "required":["storageConfigurationArn"],
      "members":{
        "storageConfigurationArn":{
          "shape":"AutoParticipantRecordingStorageConfigurationArn",
          "documentation":"<p>ARN of the <a>StorageConfiguration</a> resource to use for auto participant recording. Default: \"\" (empty string, no storage configuration is specified). Individual participant recording cannot be started unless a storage configuration is specified, when a <a>Stage</a> is created or updated.</p>"
        },
        "mediaTypes":{
          "shape":"ParticipantRecordingMediaTypeList",
          "documentation":"<p>Types of media to be recorded. Default: <code>AUDIO_VIDEO</code>.</p>"
        }
      },
      "documentation":"<p>Object specifying an auto-participant-recording configuration.</p>"
    },
    "AutoParticipantRecordingStorageConfigurationArn":{
      "type":"string",
      "max":128,
      "min":0,
      "pattern":"^$|^arn:aws:ivs:[a-z0-9-]+:[0-9]+:storage-configuration/[a-zA-Z0-9-]+$"
    },
    "Bitrate":{
      "type":"integer",
      "box":true,
      "max":8500000,
      "min":1
    },
    "ChannelArn":{
      "type":"string",
      "max":128,
      "min":1,
      "pattern":"arn:aws:ivs:[a-z0-9-]+:[0-9]+:channel/[a-zA-Z0-9-]+"
    },
    "ChannelDestinationConfiguration":{
      "type":"structure",
      "required":["channelArn"],
      "members":{
        "channelArn":{
          "shape":"ChannelArn",
          "documentation":"<p>ARN of the channel to use for broadcasting. The channel and stage resources must be in the same AWS account and region. The channel must be offline (not broadcasting).</p>"
        },
        "encoderConfigurationArn":{
          "shape":"EncoderConfigurationArn",
          "documentation":"<p>ARN of the <a>EncoderConfiguration</a> resource. The encoder configuration and stage resources must be in the same AWS account and region.</p>"
        }
      },
      "documentation":"<p>Object specifying a channel as a destination.</p>"
    },
    "Composition":{
      "type":"structure",
      "required":[
        "arn",
        "stageArn",
        "state",
        "layout",
        "destinations"
      ],
      "members":{
        "arn":{
          "shape":"CompositionArn",
          "documentation":"<p>ARN of the Composition resource.</p>"
        },
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the stage used as input</p>"
        },
        "state":{
          "shape":"CompositionState",
          "documentation":"<p>State of the Composition.</p>"
        },
        "layout":{
          "shape":"LayoutConfiguration",
          "documentation":"<p>Layout object to configure composition parameters.</p>"
        },
        "destinations":{
          "shape":"DestinationList",
          "documentation":"<p>Array of Destination objects. A Composition can contain either one destination (<code>channel</code> or <code>s3</code>) or two (one <code>channel</code> and one <code>s3</code>).</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        },
        "startTime":{
          "shape":"Time",
          "documentation":"<p>UTC time of the Composition start. This is an ISO 8601 timestamp; <i>note that this is returned as a string</i>.</p>"
        },
        "endTime":{
          "shape":"Time",
          "documentation":"<p>UTC time of the Composition end. This is an ISO 8601 timestamp; <i>note that this is returned as a string</i>.</p>"
        }
      },
      "documentation":"<p>Object specifying a Composition resource.</p>"
    },
    "CompositionArn":{
      "type":"string",
      "max":128,
      "min":1,
      "pattern":"arn:aws:ivs:[a-z0-9-]+:[0-9]+:composition/[a-zA-Z0-9-]+"
    },
    "CompositionClientToken":{
      "type":"string",
      "max":64,
      "min":1,
      "pattern":"[a-zA-Z0-9-_]*"
    },
    "CompositionState":{
      "type":"string",
      "enum":[
        "STARTING",
        "ACTIVE",
        "STOPPING",
        "FAILED",
        "STOPPED"
      ]
    },
    "CompositionSummary":{
      "type":"structure",
      "required":[
        "arn",
        "stageArn",
        "destinations",
        "state"
      ],
      "members":{
        "arn":{
          "shape":"CompositionArn",
          "documentation":"<p>ARN of the Composition resource.</p>"
        },
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the attached stage.</p>"
        },
        "destinations":{
          "shape":"DestinationSummaryList",
          "documentation":"<p>Array of Destination objects.</p>"
        },
        "state":{
          "shape":"CompositionState",
          "documentation":"<p>State of the Composition resource.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        },
        "startTime":{
          "shape":"Time",
          "documentation":"<p>UTC time of the Composition start. This is an ISO 8601 timestamp; <i>note that this is returned as a string</i>.</p>"
        },
        "endTime":{
          "shape":"Time",
          "documentation":"<p>UTC time of the Composition end. This is an ISO 8601 timestamp; <i>note that this is returned as a string</i>.</p>"
        }
      },
      "documentation":"<p>Summary information about a Composition.</p>"
    },
    "CompositionSummaryList":{
      "type":"list",
      "member":{"shape":"CompositionSummary"}
    },
    "ConflictException":{
      "type":"structure",
      "members":{
        "exceptionMessage":{
          "shape":"errorMessage",
          "documentation":"<p>Updating or deleting a resource can cause an inconsistent state.</p>"
        }
      },
      "documentation":"<p/>",
      "error":{
        "httpStatusCode":409,
        "senderFault":true
      },
      "exception":true
    },
    "CreateEncoderConfigurationRequest":{
      "type":"structure",
      "members":{
        "name":{
          "shape":"EncoderConfigurationName",
          "documentation":"<p>Optional name to identify the resource.</p>"
        },
        "video":{
          "shape":"Video",
          "documentation":"<p>Video configuration. Default: video resolution 1280x720, bitrate 2500 kbps, 30 fps.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        }
      }
    },
    "CreateEncoderConfigurationResponse":{
      "type":"structure",
      "members":{
        "encoderConfiguration":{
          "shape":"EncoderConfiguration",
          "documentation":"<p>The EncoderConfiguration that was created.</p>"
        }
      }
    },
    "CreateParticipantTokenRequest":{
      "type":"structure",
      "required":["stageArn"],
      "members":{
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the stage to which this token is scoped.</p>"
        },
        "duration":{
          "shape":"ParticipantTokenDurationMinutes",
          "documentation":"<p>Duration (in minutes), after which the token expires. Default: 720 (12 hours).</p>"
        },
        "userId":{
          "shape":"ParticipantTokenUserId",
          "documentation":"<p>Name that can be specified to help identify the token. This can be any UTF-8 encoded text. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information.</i> </p>"
        },
        "attributes":{
          "shape":"ParticipantTokenAttributes",
          "documentation":"<p>Application-provided attributes to encode into the token and attach to a stage. Map keys and values can contain UTF-8 encoded text. The maximum length of this field is 1 KB total. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information.</i> </p>"
        },
        "capabilities":{
          "shape":"ParticipantTokenCapabilities",
          "documentation":"<p>Set of capabilities that the user is allowed to perform in the stage. Default: <code>PUBLISH, SUBSCRIBE</code>.</p>"
        }
      }
    },
    "CreateParticipantTokenResponse":{
      "type":"structure",
      "members":{
        "participantToken":{
          "shape":"ParticipantToken",
          "documentation":"<p>The participant token that was created.</p>"
        }
      }
    },
    "CreateStageRequest":{
      "type":"structure",
      "members":{
        "name":{
          "shape":"StageName",
          "documentation":"<p>Optional name that can be specified for the stage being created.</p>"
        },
        "participantTokenConfigurations":{
          "shape":"ParticipantTokenConfigurations",
          "documentation":"<p>Array of participant token configuration objects to attach to the new stage.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there. </p>"
        },
        "autoParticipantRecordingConfiguration":{
          "shape":"AutoParticipantRecordingConfiguration",
          "documentation":"<p>Auto participant recording configuration object attached to the stage.</p>"
        }
      }
    },
    "CreateStageResponse":{
      "type":"structure",
      "members":{
        "stage":{
          "shape":"Stage",
          "documentation":"<p>The stage that was created.</p>"
        },
        "participantTokens":{
          "shape":"ParticipantTokenList",
          "documentation":"<p>Participant tokens attached to the stage. These correspond to the <code>participants</code> in the request.</p>"
        }
      }
    },
    "CreateStorageConfigurationRequest":{
      "type":"structure",
      "required":["s3"],
      "members":{
        "name":{
          "shape":"StorageConfigurationName",
          "documentation":"<p>Storage configuration name. The value does not need to be unique.</p>"
        },
        "s3":{
          "shape":"S3StorageConfiguration",
          "documentation":"<p>A complex type that contains a storage configuration for where recorded video will be stored.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        }
      }
    },
    "CreateStorageConfigurationResponse":{
      "type":"structure",
      "members":{
        "storageConfiguration":{
          "shape":"StorageConfiguration",
          "documentation":"<p>The StorageConfiguration that was created.</p>"
        }
      }
    },
    "DeleteEncoderConfigurationRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"EncoderConfigurationArn",
          "documentation":"<p>ARN of the EncoderConfiguration.</p>"
        }
      }
    },
    "DeleteEncoderConfigurationResponse":{
      "type":"structure",
      "members":{
      }
    },
    "DeleteStageRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the stage to be deleted.</p>"
        }
      }
    },
    "DeleteStageResponse":{
      "type":"structure",
      "members":{
      }
    },
    "DeleteStorageConfigurationRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StorageConfigurationArn",
          "documentation":"<p>ARN of the storage configuration to be deleted.</p>"
        }
      }
    },
    "DeleteStorageConfigurationResponse":{
      "type":"structure",
      "members":{
      }
    },
    "Destination":{
      "type":"structure",
      "required":[
        "id",
        "state",
        "configuration"
      ],
      "members":{
        "id":{
          "shape":"String",
          "documentation":"<p>Unique identifier for this destination, assigned by IVS.</p>"
        },
        "state":{
          "shape":"DestinationState",
          "documentation":"<p>State of the Composition Destination.</p>"
        },
        "startTime":{
          "shape":"Time",
          "documentation":"<p>UTC time of the destination start. This is an ISO 8601 timestamp; <i>note that this is returned as a string</i>.</p>"
        },
        "endTime":{
          "shape":"Time",
          "documentation":"<p>UTC time of the destination end. This is an ISO 8601 timestamp; <i>note that this is returned as a string</i>.</p>"
        },
        "configuration":{
          "shape":"DestinationConfiguration",
          "documentation":"<p>Configuration used to create this destination.</p>"
        },
        "detail":{
          "shape":"DestinationDetail",
          "documentation":"<p>Optional details regarding the status of the destination.</p>"
        }
      },
      "documentation":"<p>Object specifying the status of a Destination.</p>"
    },
    "DestinationConfiguration":{
      "type":"structure",
      "members":{
        "name":{
          "shape":"DestinationConfigurationName",
          "documentation":"<p>Name that can be specified to help identify the destination.</p>"
        },
        "channel":{
          "shape":"ChannelDestinationConfiguration",
          "documentation":"<p>An IVS channel to be used for broadcasting, for server-side composition. Either a <code>channel</code> or an <code>s3</code> must be specified. </p>"
        },
        "s3":{
          "shape":"S3DestinationConfiguration",
          "documentation":"<p>An S3 storage configuration to be used for recording video data. Either a <code>channel</code> or an <code>s3</code> must be specified.</p>"
        }
      },
      "documentation":"<p>Complex data type that defines destination-configuration objects.</p>"
    },
    "DestinationConfigurationList":{
      "type":"list",
      "member":{"shape":"DestinationConfiguration"},
      "max":2,
      "min":1
    },
    "DestinationConfigurationName":{
      "type":"string",
      "max":128,
      "min":0,
      "pattern":"[a-zA-Z0-9-_]*"
    },
    "DestinationDetail":{
      "type":"structure",
      "members":{
        "s3":{
          "shape":"S3Detail",
          "documentation":"<p>An S3 detail object to return information about the S3 destination.</p>"
        }
      },
      "documentation":"<p>Complex data type that defines destination-detail objects.</p>"
    },
    "DestinationList":{
      "type":"list",
      "member":{"shape":"Destination"},
      "max":2,
      "min":1
    },
    "DestinationState":{
      "type":"string",
      "enum":[
        "STARTING",
        "ACTIVE",
        "STOPPING",
        "RECONNECTING",
        "FAILED",
        "STOPPED"
      ]
    },
    "DestinationSummary":{
      "type":"structure",
      "required":[
        "id",
        "state"
      ],
      "members":{
        "id":{
          "shape":"String",
          "documentation":"<p>Unique identifier for this destination, assigned by IVS.</p>"
        },
        "state":{
          "shape":"DestinationState",
          "documentation":"<p>State of the Composition Destination.</p>"
        },
        "startTime":{
          "shape":"Time",
          "documentation":"<p>UTC time of the destination start. This is an ISO 8601 timestamp; <i>note that this is returned as a string</i>.</p>"
        },
        "endTime":{
          "shape":"Time",
          "documentation":"<p>UTC time of the destination end. This is an ISO 8601 timestamp; <i>note that this is returned as a string</i>.</p>"
        }
      },
      "documentation":"<p>Summary information about a Destination.</p>"
    },
    "DestinationSummaryList":{
      "type":"list",
      "member":{"shape":"DestinationSummary"},
      "max":2,
      "min":1
    },
    "DisconnectParticipantReason":{
      "type":"string",
      "max":128,
      "min":0
    },
    "DisconnectParticipantRequest":{
      "type":"structure",
      "required":[
        "stageArn",
        "participantId"
      ],
      "members":{
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the stage to which the participant is attached.</p>"
        },
        "participantId":{
          "shape":"ParticipantTokenId",
          "documentation":"<p>Identifier of the participant to be disconnected. This is assigned by IVS and returned by <a>CreateParticipantToken</a>.</p>"
        },
        "reason":{
          "shape":"DisconnectParticipantReason",
          "documentation":"<p>Description of why this participant is being disconnected.</p>"
        }
      }
    },
    "DisconnectParticipantResponse":{
      "type":"structure",
      "members":{
      }
    },
    "EncoderConfiguration":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"EncoderConfigurationArn",
          "documentation":"<p>ARN of the EncoderConfiguration resource.</p>"
        },
        "name":{
          "shape":"EncoderConfigurationName",
          "documentation":"<p>Optional name to identify the resource.</p>"
        },
        "video":{
          "shape":"Video",
          "documentation":"<p>Video configuration. Default: video resolution 1280x720, bitrate 2500 kbps, 30 fps</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        }
      },
      "documentation":"<p>Settings for transcoding.</p>"
    },
    "EncoderConfigurationArn":{
      "type":"string",
      "max":128,
      "min":1,
      "pattern":"arn:aws:ivs:[a-z0-9-]+:[0-9]+:encoder-configuration/[a-zA-Z0-9-]+"
    },
    "EncoderConfigurationArnList":{
      "type":"list",
      "member":{"shape":"EncoderConfigurationArn"},
      "max":1,
      "min":1
    },
    "EncoderConfigurationName":{
      "type":"string",
      "max":128,
      "min":0,
      "pattern":"[a-zA-Z0-9-_]*"
    },
    "EncoderConfigurationSummary":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"EncoderConfigurationArn",
          "documentation":"<p>ARN of the EncoderConfiguration resource.</p>"
        },
        "name":{
          "shape":"EncoderConfigurationName",
          "documentation":"<p>Optional name to identify the resource.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        }
      },
      "documentation":"<p>Summary information about an EncoderConfiguration.</p>"
    },
    "EncoderConfigurationSummaryList":{
      "type":"list",
      "member":{"shape":"EncoderConfigurationSummary"}
    },
    "Event":{
      "type":"structure",
      "members":{
        "name":{
          "shape":"EventName",
          "documentation":"<p>The name of the event.</p>"
        },
        "participantId":{
          "shape":"ParticipantId",
          "documentation":"<p>Unique identifier for the participant who triggered the event. This is assigned by IVS.</p>"
        },
        "eventTime":{
          "shape":"Time",
          "documentation":"<p>ISO 8601 timestamp (returned as a string) for when the event occurred.</p>"
        },
        "remoteParticipantId":{
          "shape":"ParticipantId",
          "documentation":"<p>Unique identifier for the remote participant. For a subscribe event, this is the publisher. For a publish or join event, this is null. This is assigned by IVS.</p>"
        },
        "errorCode":{
          "shape":"EventErrorCode",
          "documentation":"<p>If the event is an error event, the error code is provided to give insight into the specific error that occurred. If the event is not an error event, this field is null. <code>INSUFFICIENT_CAPABILITIES</code> indicates that the participant tried to take an action that the participant’s token is not allowed to do. For more information about participant capabilities, see the <code>capabilities</code> field in <a>CreateParticipantToken</a>. <code>QUOTA_EXCEEDED</code> indicates that the number of participants who want to publish/subscribe to a stage exceeds the quota; for more information, see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/service-quotas.html\">Service Quotas</a>. <code>PUBLISHER_NOT_FOUND</code> indicates that the participant tried to subscribe to a publisher that doesn’t exist. </p>"
        }
      },
      "documentation":"<p>An occurrence during a stage session.</p>"
    },
    "EventErrorCode":{
      "type":"string",
      "enum":[
        "INSUFFICIENT_CAPABILITIES",
        "QUOTA_EXCEEDED",
        "PUBLISHER_NOT_FOUND"
      ]
    },
    "EventList":{
      "type":"list",
      "member":{"shape":"Event"}
    },
    "EventName":{
      "type":"string",
      "enum":[
        "JOINED",
        "LEFT",
        "PUBLISH_STARTED",
        "PUBLISH_STOPPED",
        "SUBSCRIBE_STARTED",
        "SUBSCRIBE_STOPPED",
        "PUBLISH_ERROR",
        "SUBSCRIBE_ERROR",
        "JOIN_ERROR"
      ]
    },
    "Framerate":{
      "type":"float",
      "box":true,
      "max":60,
      "min":1
    },
    "GetCompositionRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"CompositionArn",
          "documentation":"<p>ARN of the Composition resource.</p>"
        }
      }
    },
    "GetCompositionResponse":{
      "type":"structure",
      "members":{
        "composition":{
          "shape":"Composition",
          "documentation":"<p>The Composition that was returned.</p>"
        }
      }
    },
    "GetEncoderConfigurationRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"EncoderConfigurationArn",
          "documentation":"<p>ARN of the EncoderConfiguration resource.</p>"
        }
      }
    },
    "GetEncoderConfigurationResponse":{
      "type":"structure",
      "members":{
        "encoderConfiguration":{
          "shape":"EncoderConfiguration",
          "documentation":"<p>The EncoderConfiguration that was returned.</p>"
        }
      }
    },
    "GetParticipantRequest":{
      "type":"structure",
      "required":[
        "stageArn",
        "sessionId",
        "participantId"
      ],
      "members":{
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>Stage ARN.</p>"
        },
        "sessionId":{
          "shape":"StageSessionId",
          "documentation":"<p>ID of a session within the stage.</p>"
        },
        "participantId":{
          "shape":"ParticipantId",
          "documentation":"<p>Unique identifier for the participant. This is assigned by IVS and returned by <a>CreateParticipantToken</a>.</p>"
        }
      }
    },
    "GetParticipantResponse":{
      "type":"structure",
      "members":{
        "participant":{
          "shape":"Participant",
          "documentation":"<p>The participant that is returned.</p>"
        }
      }
    },
    "GetStageRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the stage for which the information is to be retrieved.</p>"
        }
      }
    },
    "GetStageResponse":{
      "type":"structure",
      "members":{
        "stage":{
          "shape":"Stage",
          "documentation":"<p>The stage that is returned.</p>"
        }
      }
    },
    "GetStageSessionRequest":{
      "type":"structure",
      "required":[
        "stageArn",
        "sessionId"
      ],
      "members":{
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the stage for which the information is to be retrieved.</p>"
        },
        "sessionId":{
          "shape":"StageSessionId",
          "documentation":"<p>ID of a session within the stage.</p>"
        }
      }
    },
    "GetStageSessionResponse":{
      "type":"structure",
      "members":{
        "stageSession":{
          "shape":"StageSession",
          "documentation":"<p>The stage session that is returned.</p>"
        }
      }
    },
    "GetStorageConfigurationRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StorageConfigurationArn",
          "documentation":"<p>ARN of the storage configuration to be retrieved.</p>"
        }
      }
    },
    "GetStorageConfigurationResponse":{
      "type":"structure",
      "members":{
        "storageConfiguration":{
          "shape":"StorageConfiguration",
          "documentation":"<p>The StorageConfiguration that was returned.</p>"
        }
      }
    },
    "GridConfiguration":{
      "type":"structure",
      "members":{
        "featuredParticipantAttribute":{
          "shape":"AttributeKey",
          "documentation":"<p>This attribute name identifies the featured slot. A participant with this attribute set to <code>\"true\"</code> (as a string value) in <a>ParticipantTokenConfiguration</a> is placed in the featured slot.</p>"
        },
        "omitStoppedVideo":{
          "shape":"OmitStoppedVideo",
          "documentation":"<p>Determines whether to omit participants with stopped video in the composition. Default: <code>false</code>.</p>"
        },
        "videoAspectRatio":{
          "shape":"VideoAspectRatio",
          "documentation":"<p>Sets the non-featured participant display mode. Default: <code>VIDEO</code>.</p>"
        },
        "videoFillMode":{
          "shape":"VideoFillMode",
          "documentation":"<p>Defines how video fits within the participant tile. When not set, <code>videoFillMode</code> defaults to <code>COVER</code> fill mode for participants in the grid and to <code>CONTAIN</code> fill mode for featured participants.</p>"
        },
        "gridGap":{
          "shape":"GridGap",
          "documentation":"<p>Specifies the spacing between participant tiles in pixels. Default: <code>2</code>.</p>"
        }
      },
      "documentation":"<p>Configuration information specific to Grid layout, for server-side composition. See \"Layouts\" in <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/server-side-composition.html\">Server-Side Composition</a>.</p>"
    },
    "GridGap":{
      "type":"integer",
      "min":0
    },
    "Height":{
      "type":"integer",
      "box":true,
      "max":1920,
      "min":1
    },
    "InternalServerException":{
      "type":"structure",
      "members":{
        "exceptionMessage":{
          "shape":"errorMessage",
          "documentation":"<p>Unexpected error during processing of request.</p>"
        }
      },
      "documentation":"<p/>",
      "error":{"httpStatusCode":500},
      "exception":true,
      "fault":true
    },
    "LayoutConfiguration":{
      "type":"structure",
      "members":{
        "grid":{
          "shape":"GridConfiguration",
          "documentation":"<p>Configuration related to grid layout. Default: Grid layout.</p>"
        },
        "pip":{
          "shape":"PipConfiguration",
          "documentation":"<p>Configuration related to PiP layout.</p>"
        }
      },
      "documentation":"<p>Configuration information of supported layouts for server-side composition.</p>"
    },
    "ListCompositionsRequest":{
      "type":"structure",
      "members":{
        "filterByStageArn":{
          "shape":"StageArn",
          "documentation":"<p>Filters the Composition list to match the specified Stage ARN.</p>"
        },
        "filterByEncoderConfigurationArn":{
          "shape":"EncoderConfigurationArn",
          "documentation":"<p>Filters the Composition list to match the specified EncoderConfiguration attached to at least one of its output.</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>The first Composition to retrieve. This is used for pagination; see the <code>nextToken</code> response field.</p>"
        },
        "maxResults":{
          "shape":"MaxCompositionResults",
          "documentation":"<p>Maximum number of results to return. Default: 100.</p>"
        }
      }
    },
    "ListCompositionsResponse":{
      "type":"structure",
      "required":["compositions"],
      "members":{
        "compositions":{
          "shape":"CompositionSummaryList",
          "documentation":"<p>List of the matching Compositions (summary information only).</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>If there are more compositions than <code>maxResults</code>, use <code>nextToken</code> in the request to get the next set.</p>"
        }
      }
    },
    "ListEncoderConfigurationsRequest":{
      "type":"structure",
      "members":{
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>The first encoder configuration to retrieve. This is used for pagination; see the <code>nextToken</code> response field.</p>"
        },
        "maxResults":{
          "shape":"MaxEncoderConfigurationResults",
          "documentation":"<p>Maximum number of results to return. Default: 100.</p>"
        }
      }
    },
    "ListEncoderConfigurationsResponse":{
      "type":"structure",
      "required":["encoderConfigurations"],
      "members":{
        "encoderConfigurations":{
          "shape":"EncoderConfigurationSummaryList",
          "documentation":"<p>List of the matching EncoderConfigurations (summary information only).</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>If there are more encoder configurations than <code>maxResults</code>, use <code>nextToken</code> in the request to get the next set.</p>"
        }
      }
    },
    "ListParticipantEventsRequest":{
      "type":"structure",
      "required":[
        "stageArn",
        "sessionId",
        "participantId"
      ],
      "members":{
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>Stage ARN.</p>"
        },
        "sessionId":{
          "shape":"StageSessionId",
          "documentation":"<p>ID of a session within the stage.</p>"
        },
        "participantId":{
          "shape":"ParticipantId",
          "documentation":"<p>Unique identifier for this participant. This is assigned by IVS and returned by <a>CreateParticipantToken</a>.</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>The first participant event to retrieve. This is used for pagination; see the <code>nextToken</code> response field.</p>"
        },
        "maxResults":{
          "shape":"MaxParticipantEventResults",
          "documentation":"<p>Maximum number of results to return. Default: 50.</p>"
        }
      }
    },
    "ListParticipantEventsResponse":{
      "type":"structure",
      "required":["events"],
      "members":{
        "events":{
          "shape":"EventList",
          "documentation":"<p>List of the matching events.</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>If there are more events than <code>maxResults</code>, use <code>nextToken</code> in the request to get the next set. </p>"
        }
      }
    },
    "ListParticipantsRequest":{
      "type":"structure",
      "required":[
        "stageArn",
        "sessionId"
      ],
      "members":{
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>Stage ARN.</p>"
        },
        "sessionId":{
          "shape":"StageSessionId",
          "documentation":"<p>ID of the session within the stage.</p>"
        },
        "filterByUserId":{
          "shape":"UserId",
          "documentation":"<p>Filters the response list to match the specified user ID. Only one of <code>filterByUserId</code>, <code>filterByPublished</code>, <code>filterByState</code>, or <code>filterByRecordingState</code> can be provided per request. A <code>userId</code> is a customer-assigned name to help identify the token; this can be used to link a participant to a user in the customer’s own systems.</p>"
        },
        "filterByPublished":{
          "shape":"Published",
          "documentation":"<p>Filters the response list to only show participants who published during the stage session. Only one of <code>filterByUserId</code>, <code>filterByPublished</code>, <code>filterByState</code>, or <code>filterByRecordingState</code> can be provided per request.</p>"
        },
        "filterByState":{
          "shape":"ParticipantState",
          "documentation":"<p>Filters the response list to only show participants in the specified state. Only one of <code>filterByUserId</code>, <code>filterByPublished</code>, <code>filterByState</code>, or <code>filterByRecordingState</code> can be provided per request.</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>The first participant to retrieve. This is used for pagination; see the <code>nextToken</code> response field.</p>"
        },
        "maxResults":{
          "shape":"MaxParticipantResults",
          "documentation":"<p>Maximum number of results to return. Default: 50.</p>"
        },
        "filterByRecordingState":{
          "shape":"ParticipantRecordingFilterByRecordingState",
          "documentation":"<p>Filters the response list to only show participants with the specified recording state. Only one of <code>filterByUserId</code>, <code>filterByPublished</code>, <code>filterByState</code>, or <code>filterByRecordingState</code> can be provided per request.</p>"
        }
      }
    },
    "ListParticipantsResponse":{
      "type":"structure",
      "required":["participants"],
      "members":{
        "participants":{
          "shape":"ParticipantList",
          "documentation":"<p>List of the matching participants (summary information only).</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>If there are more participants than <code>maxResults</code>, use <code>nextToken</code> in the request to get the next set.</p>"
        }
      }
    },
    "ListStageSessionsRequest":{
      "type":"structure",
      "required":["stageArn"],
      "members":{
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>Stage ARN.</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>The first stage session to retrieve. This is used for pagination; see the <code>nextToken</code> response field.</p>"
        },
        "maxResults":{
          "shape":"MaxStageSessionResults",
          "documentation":"<p>Maximum number of results to return. Default: 50.</p>"
        }
      }
    },
    "ListStageSessionsResponse":{
      "type":"structure",
      "required":["stageSessions"],
      "members":{
        "stageSessions":{
          "shape":"StageSessionList",
          "documentation":"<p>List of matching stage sessions.</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>If there are more stage sessions than <code>maxResults</code>, use <code>nextToken</code> in the request to get the next set.</p>"
        }
      }
    },
    "ListStagesRequest":{
      "type":"structure",
      "members":{
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>The first stage to retrieve. This is used for pagination; see the <code>nextToken</code> response field.</p>"
        },
        "maxResults":{
          "shape":"MaxStageResults",
          "documentation":"<p>Maximum number of results to return. Default: 50.</p>"
        }
      }
    },
    "ListStagesResponse":{
      "type":"structure",
      "required":["stages"],
      "members":{
        "stages":{
          "shape":"StageSummaryList",
          "documentation":"<p>List of the matching stages (summary information only).</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>If there are more stages than <code>maxResults</code>, use <code>nextToken</code> in the request to get the next set.</p>"
        }
      }
    },
    "ListStorageConfigurationsRequest":{
      "type":"structure",
      "members":{
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>The first storage configuration to retrieve. This is used for pagination; see the <code>nextToken</code> response field.</p>"
        },
        "maxResults":{
          "shape":"MaxStorageConfigurationResults",
          "documentation":"<p>Maximum number of storage configurations to return. Default: your service quota or 100, whichever is smaller.</p>"
        }
      }
    },
    "ListStorageConfigurationsResponse":{
      "type":"structure",
      "required":["storageConfigurations"],
      "members":{
        "storageConfigurations":{
          "shape":"StorageConfigurationSummaryList",
          "documentation":"<p>List of the matching storage configurations.</p>"
        },
        "nextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>If there are more storage configurations than <code>maxResults</code>, use <code>nextToken</code> in the request to get the next set.</p>"
        }
      }
    },
    "ListTagsForResourceRequest":{
      "type":"structure",
      "required":["resourceArn"],
      "members":{
        "resourceArn":{
          "shape":"ResourceArn",
          "documentation":"<p>The ARN of the resource to be retrieved. The ARN must be URL-encoded.</p>",
          "location":"uri",
          "locationName":"resourceArn"
        }
      }
    },
    "ListTagsForResourceResponse":{
      "type":"structure",
      "required":["tags"],
      "members":{
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>.</p>"
        }
      }
    },
    "MaxCompositionResults":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "MaxEncoderConfigurationResults":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "MaxParticipantEventResults":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "MaxParticipantResults":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "MaxStageResults":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "MaxStageSessionResults":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "MaxStorageConfigurationResults":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "OmitStoppedVideo":{"type":"boolean"},
    "PaginationToken":{
      "type":"string",
      "max":1024,
      "min":0,
      "pattern":"[a-zA-Z0-9+/=_-]*"
    },
    "Participant":{
      "type":"structure",
      "members":{
        "participantId":{
          "shape":"ParticipantId",
          "documentation":"<p>Unique identifier for this participant, assigned by IVS.</p>"
        },
        "userId":{
          "shape":"UserId",
          "documentation":"<p>Customer-assigned name to help identify the token; this can be used to link a participant to a user in the customer’s own systems. This can be any UTF-8 encoded text. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information</i>.</p>"
        },
        "state":{
          "shape":"ParticipantState",
          "documentation":"<p>Whether the participant is connected to or disconnected from the stage.</p>"
        },
        "firstJoinTime":{
          "shape":"Time",
          "documentation":"<p>ISO 8601 timestamp (returned as a string) when the participant first joined the stage session.</p>"
        },
        "attributes":{
          "shape":"ParticipantAttributes",
          "documentation":"<p>Application-provided attributes to encode into the token and attach to a stage. Map keys and values can contain UTF-8 encoded text. The maximum length of this field is 1 KB total. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information</i>.</p>"
        },
        "published":{
          "shape":"Published",
          "documentation":"<p>Whether the participant ever published to the stage session.</p>"
        },
        "ispName":{
          "shape":"ParticipantClientAttribute",
          "documentation":"<p>The participant’s Internet Service Provider.</p>"
        },
        "osName":{
          "shape":"ParticipantClientAttribute",
          "documentation":"<p>The participant’s operating system.</p>"
        },
        "osVersion":{
          "shape":"ParticipantClientAttribute",
          "documentation":"<p>The participant’s operating system version.</p>"
        },
        "browserName":{
          "shape":"ParticipantClientAttribute",
          "documentation":"<p>The participant’s browser.</p>"
        },
        "browserVersion":{
          "shape":"ParticipantClientAttribute",
          "documentation":"<p>The participant’s browser version.</p>"
        },
        "sdkVersion":{
          "shape":"ParticipantClientAttribute",
          "documentation":"<p>The participant’s SDK version.</p>"
        },
        "recordingS3BucketName":{
          "shape":"ParticipantRecordingS3BucketName",
          "documentation":"<p>Name of the S3 bucket to where the participant is being recorded, if individual participant recording is enabled, or \"\" (empty string), if recording is not enabled.</p>"
        },
        "recordingS3Prefix":{
          "shape":"ParticipantRecordingS3Prefix",
          "documentation":"<p>S3 prefix of the S3 bucket to where the participant is being recorded, if individual participant recording is enabled, or \"\" (empty string), if recording is not enabled.</p>"
        },
        "recordingState":{
          "shape":"ParticipantRecordingState",
          "documentation":"<p>Participant’s recording state.</p>"
        }
      },
      "documentation":"<p>Object describing a participant that has joined a stage.</p>"
    },
    "ParticipantAttributes":{
      "type":"map",
      "key":{"shape":"String"},
      "value":{"shape":"String"}
    },
    "ParticipantClientAttribute":{
      "type":"string",
      "max":128,
      "min":0,
      "pattern":"[a-zA-Z0-9-_.,:;\\s]*"
    },
    "ParticipantId":{
      "type":"string",
      "max":64,
      "min":0,
      "pattern":"[a-zA-Z0-9-]*"
    },
    "ParticipantList":{
      "type":"list",
      "member":{"shape":"ParticipantSummary"}
    },
    "ParticipantRecordingFilterByRecordingState":{
      "type":"string",
      "enum":[
        "STARTING",
        "ACTIVE",
        "STOPPING",
        "STOPPED",
        "FAILED"
      ]
    },
    "ParticipantRecordingMediaType":{
      "type":"string",
      "enum":[
        "AUDIO_VIDEO",
        "AUDIO_ONLY"
      ]
    },
    "ParticipantRecordingMediaTypeList":{
      "type":"list",
      "member":{"shape":"ParticipantRecordingMediaType"},
      "max":1,
      "min":0
    },
    "ParticipantRecordingS3BucketName":{
      "type":"string",
      "max":63,
      "min":0,
      "pattern":"[a-z0-9-.]*"
    },
    "ParticipantRecordingS3Prefix":{
      "type":"string",
      "max":256,
      "min":0,
      "pattern":"[a-zA-Z0-9-]*"
    },
    "ParticipantRecordingState":{
      "type":"string",
      "enum":[
        "STARTING",
        "ACTIVE",
        "STOPPING",
        "STOPPED",
        "FAILED",
        "DISABLED"
      ]
    },
    "ParticipantState":{
      "type":"string",
      "enum":[
        "CONNECTED",
        "DISCONNECTED"
      ]
    },
    "ParticipantSummary":{
      "type":"structure",
      "members":{
        "participantId":{
          "shape":"ParticipantId",
          "documentation":"<p>Unique identifier for this participant, assigned by IVS.</p>"
        },
        "userId":{
          "shape":"UserId",
          "documentation":"<p>Customer-assigned name to help identify the token; this can be used to link a participant to a user in the customer’s own systems. This can be any UTF-8 encoded text. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information</i>.</p>"
        },
        "state":{
          "shape":"ParticipantState",
          "documentation":"<p>Whether the participant is connected to or disconnected from the stage.</p>"
        },
        "firstJoinTime":{
          "shape":"Time",
          "documentation":"<p>ISO 8601 timestamp (returned as a string) when the participant first joined the stage session.</p>"
        },
        "published":{
          "shape":"Published",
          "documentation":"<p>Whether the participant ever published to the stage session.</p>"
        },
        "recordingState":{
          "shape":"ParticipantRecordingState",
          "documentation":"<p>Participant’s recording state.</p>"
        }
      },
      "documentation":"<p>Summary object describing a participant that has joined a stage.</p>"
    },
    "ParticipantToken":{
      "type":"structure",
      "members":{
        "participantId":{
          "shape":"ParticipantTokenId",
          "documentation":"<p>Unique identifier for this participant token, assigned by IVS.</p>"
        },
        "token":{
          "shape":"ParticipantTokenString",
          "documentation":"<p>The issued client token, encrypted.</p>"
        },
        "userId":{
          "shape":"ParticipantTokenUserId",
          "documentation":"<p>Customer-assigned name to help identify the token; this can be used to link a participant to a user in the customer’s own systems. This can be any UTF-8 encoded text. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information.</i> </p>"
        },
        "attributes":{
          "shape":"ParticipantTokenAttributes",
          "documentation":"<p>Application-provided attributes to encode into the token and attach to a stage. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information.</i> </p>"
        },
        "duration":{
          "shape":"ParticipantTokenDurationMinutes",
          "documentation":"<p>Duration (in minutes), after which the participant token expires. Default: 720 (12 hours).</p>"
        },
        "capabilities":{
          "shape":"ParticipantTokenCapabilities",
          "documentation":"<p>Set of capabilities that the user is allowed to perform in the stage.</p>"
        },
        "expirationTime":{
          "shape":"ParticipantTokenExpirationTime",
          "documentation":"<p>ISO 8601 timestamp (returned as a string) for when this token expires.</p>"
        }
      },
      "documentation":"<p>Object specifying a participant token in a stage.</p> <p> <b>Important</b>: Treat tokens as opaque; i.e., do not build functionality based on token contents. The format of tokens could change in the future.</p>"
    },
    "ParticipantTokenAttributes":{
      "type":"map",
      "key":{"shape":"String"},
      "value":{"shape":"String"}
    },
    "ParticipantTokenCapabilities":{
      "type":"list",
      "member":{"shape":"ParticipantTokenCapability"},
      "max":2,
      "min":0
    },
    "ParticipantTokenCapability":{
      "type":"string",
      "enum":[
        "PUBLISH",
        "SUBSCRIBE"
      ]
    },
    "ParticipantTokenConfiguration":{
      "type":"structure",
      "members":{
        "duration":{
          "shape":"ParticipantTokenDurationMinutes",
          "documentation":"<p>Duration (in minutes), after which the corresponding participant token expires. Default: 720 (12 hours).</p>"
        },
        "userId":{
          "shape":"ParticipantTokenUserId",
          "documentation":"<p>Customer-assigned name to help identify the token; this can be used to link a participant to a user in the customer’s own systems. This can be any UTF-8 encoded text. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information.</i> </p>"
        },
        "attributes":{
          "shape":"ParticipantTokenAttributes",
          "documentation":"<p>Application-provided attributes to encode into the corresponding participant token and attach to a stage. Map keys and values can contain UTF-8 encoded text. The maximum length of this field is 1 KB total. <i>This field is exposed to all stage participants and should not be used for personally identifying, confidential, or sensitive information.</i> </p>"
        },
        "capabilities":{
          "shape":"ParticipantTokenCapabilities",
          "documentation":"<p>Set of capabilities that the user is allowed to perform in the stage.</p>"
        }
      },
      "documentation":"<p>Object specifying a participant token configuration in a stage.</p>"
    },
    "ParticipantTokenConfigurations":{
      "type":"list",
      "member":{"shape":"ParticipantTokenConfiguration"},
      "max":12,
      "min":0
    },
    "ParticipantTokenDurationMinutes":{
      "type":"integer",
      "box":true,
      "max":20160,
      "min":1
    },
    "ParticipantTokenExpirationTime":{
      "type":"timestamp",
      "timestampFormat":"iso8601"
    },
    "ParticipantTokenId":{"type":"string"},
    "ParticipantTokenList":{
      "type":"list",
      "member":{"shape":"ParticipantToken"}
    },
    "ParticipantTokenString":{
      "type":"string",
      "sensitive":true
    },
    "ParticipantTokenUserId":{
      "type":"string",
      "max":128,
      "min":0
    },
    "PendingVerification":{
      "type":"structure",
      "members":{
        "exceptionMessage":{
          "shape":"errorMessage",
          "documentation":"<p> Your account is pending verification. </p>"
        }
      },
      "documentation":"<p/>",
      "error":{
        "httpStatusCode":403,
        "senderFault":true
      },
      "exception":true
    },
    "PipBehavior":{
      "type":"string",
      "enum":[
        "STATIC",
        "DYNAMIC"
      ]
    },
    "PipConfiguration":{
      "type":"structure",
      "members":{
        "featuredParticipantAttribute":{
          "shape":"AttributeKey",
          "documentation":"<p>This attribute name identifies the featured slot. A participant with this attribute set to <code>\"true\"</code> (as a string value) in <a>ParticipantTokenConfiguration</a> is placed in the featured slot.</p>"
        },
        "omitStoppedVideo":{
          "shape":"OmitStoppedVideo",
          "documentation":"<p>Determines whether to omit participants with stopped video in the composition. Default: <code>false</code>.</p>"
        },
        "videoFillMode":{
          "shape":"VideoFillMode",
          "documentation":"<p>Defines how video fits within the participant tile. Default: <code>COVER</code>. </p>"
        },
        "gridGap":{
          "shape":"GridGap",
          "documentation":"<p>Specifies the spacing between participant tiles in pixels. Default: <code>0</code>.</p>"
        },
        "pipParticipantAttribute":{
          "shape":"AttributeKey",
          "documentation":"<p>Identifies the PiP slot. A participant with this attribute set to <code>\"true\"</code> (as a string value) in <a>ParticipantTokenConfiguration</a> is placed in the PiP slot.</p>"
        },
        "pipBehavior":{
          "shape":"PipBehavior",
          "documentation":"<p>Defines PiP behavior when all participants have left. Default: <code>STATIC</code>.</p>"
        },
        "pipOffset":{
          "shape":"PipOffset",
          "documentation":"<p>Sets the PiP window’s offset position in pixels from the closest edges determined by <code>PipPosition</code>. Default: <code>0</code>.</p>"
        },
        "pipPosition":{
          "shape":"PipPosition",
          "documentation":"<p>Determines the corner position of the PiP window. Default: <code>BOTTOM_RIGHT</code>.</p>"
        },
        "pipWidth":{
          "shape":"PipWidth",
          "documentation":"<p>Specifies the width of the PiP window in pixels. When this is not set explicitly, <code>pipWidth</code>’s value will be based on the size of the composition and the aspect ratio of the participant’s video.</p>"
        },
        "pipHeight":{
          "shape":"PipHeight",
          "documentation":"<p>Specifies the height of the PiP window in pixels. When this is not set explicitly, <code>pipHeight</code>’s value will be based on the size of the composition and the aspect ratio of the participant’s video.</p>"
        }
      },
      "documentation":"<p>Configuration information specific to Picture-in-Picture (PiP) layout, for <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/server-side-composition.html\">server-side composition</a>. </p>"
    },
    "PipHeight":{
      "type":"integer",
      "box":true,
      "min":1
    },
    "PipOffset":{
      "type":"integer",
      "min":0
    },
    "PipPosition":{
      "type":"string",
      "enum":[
        "TOP_LEFT",
        "TOP_RIGHT",
        "BOTTOM_LEFT",
        "BOTTOM_RIGHT"
      ]
    },
    "PipWidth":{
      "type":"integer",
      "box":true,
      "min":1
    },
    "Published":{"type":"boolean"},
    "RecordingConfiguration":{
      "type":"structure",
      "members":{
        "format":{
          "shape":"RecordingConfigurationFormat",
          "documentation":"<p>The recording format for storing a recording in Amazon S3.</p>"
        }
      },
      "documentation":"<p>An object representing a configuration to record a stage stream.</p>"
    },
    "RecordingConfigurationFormat":{
      "type":"string",
      "enum":["HLS"]
    },
    "ResourceArn":{
      "type":"string",
      "max":128,
      "min":1,
      "pattern":"arn:aws:ivs:[a-z0-9-]+:[0-9]+:[a-z-]/[a-zA-Z0-9-]+"
    },
    "ResourceNotFoundException":{
      "type":"structure",
      "members":{
        "exceptionMessage":{
          "shape":"errorMessage",
          "documentation":"<p>Request references a resource which does not exist.</p>"
        }
      },
      "documentation":"<p/>",
      "error":{
        "httpStatusCode":404,
        "senderFault":true
      },
      "exception":true
    },
    "S3BucketName":{
      "type":"string",
      "max":63,
      "min":3,
      "pattern":"[a-z0-9-.]+"
    },
    "S3DestinationConfiguration":{
      "type":"structure",
      "required":[
        "storageConfigurationArn",
        "encoderConfigurationArns"
      ],
      "members":{
        "storageConfigurationArn":{
          "shape":"StorageConfigurationArn",
          "documentation":"<p>ARN of the <a>StorageConfiguration</a> where recorded videos will be stored.</p>"
        },
        "encoderConfigurationArns":{
          "shape":"EncoderConfigurationArnList",
          "documentation":"<p>ARNs of the <a>EncoderConfiguration</a> resource. The encoder configuration and stage resources must be in the same AWS account and region. </p>"
        },
        "recordingConfiguration":{
          "shape":"RecordingConfiguration",
          "documentation":"<p>Array of maps, each of the form <code>string:string (key:value)</code>. This is an optional customer specification, currently used only to specify the recording format for storing a recording in Amazon S3.</p>"
        }
      },
      "documentation":"<p>A complex type that describes an S3 location where recorded videos will be stored.</p>"
    },
    "S3Detail":{
      "type":"structure",
      "required":["recordingPrefix"],
      "members":{
        "recordingPrefix":{
          "shape":"String",
          "documentation":"<p>The S3 bucket prefix under which the recording is stored.</p>"
        }
      },
      "documentation":"<p>Complex data type that defines S3Detail objects.</p>"
    },
    "S3StorageConfiguration":{
      "type":"structure",
      "required":["bucketName"],
      "members":{
        "bucketName":{
          "shape":"S3BucketName",
          "documentation":"<p>Location (S3 bucket name) where recorded videos will be stored. Note that the StorageConfiguration and S3 bucket must be in the same region as the Composition.</p>"
        }
      },
      "documentation":"<p>A complex type that describes an S3 location where recorded videos will be stored.</p>"
    },
    "ServiceQuotaExceededException":{
      "type":"structure",
      "members":{
        "exceptionMessage":{
          "shape":"errorMessage",
          "documentation":"<p>Request would cause a service quota to be exceeded.</p>"
        }
      },
      "documentation":"<p/>",
      "error":{
        "httpStatusCode":402,
        "senderFault":true
      },
      "exception":true
    },
    "Stage":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StageArn",
          "documentation":"<p>Stage ARN.</p>"
        },
        "name":{
          "shape":"StageName",
          "documentation":"<p>Stage name.</p>"
        },
        "activeSessionId":{
          "shape":"StageSessionId",
          "documentation":"<p>ID of the active session within the stage.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        },
        "autoParticipantRecordingConfiguration":{
          "shape":"AutoParticipantRecordingConfiguration",
          "documentation":"<p>Auto-participant-recording configuration object attached to the stage.</p>"
        }
      },
      "documentation":"<p>Object specifying a stage.</p>"
    },
    "StageArn":{
      "type":"string",
      "max":128,
      "min":1,
      "pattern":"arn:aws:ivs:[a-z0-9-]+:[0-9]+:stage/[a-zA-Z0-9-]+"
    },
    "StageName":{
      "type":"string",
      "max":128,
      "min":0,
      "pattern":"[a-zA-Z0-9-_]*"
    },
    "StageSession":{
      "type":"structure",
      "members":{
        "sessionId":{
          "shape":"StageSessionId",
          "documentation":"<p>ID of the session within the stage.</p>"
        },
        "startTime":{
          "shape":"Time",
          "documentation":"<p> ISO 8601 timestamp (returned as a string) when this stage session began.</p>"
        },
        "endTime":{
          "shape":"Time",
          "documentation":"<p>ISO 8601 timestamp (returned as a string) when the stage session ended. This is null if the stage is active.</p>"
        }
      },
      "documentation":"<p>A stage session begins when the first participant joins a stage and ends after the last participant leaves the stage. A stage session helps with debugging stages by grouping events and participants into shorter periods of time (i.e., a session), which is helpful when stages are used over long periods of time.</p>"
    },
    "StageSessionId":{
      "type":"string",
      "max":16,
      "min":16,
      "pattern":"st-[a-zA-Z0-9]+"
    },
    "StageSessionList":{
      "type":"list",
      "member":{"shape":"StageSessionSummary"}
    },
    "StageSessionSummary":{
      "type":"structure",
      "members":{
        "sessionId":{
          "shape":"StageSessionId",
          "documentation":"<p>ID of the session within the stage.</p>"
        },
        "startTime":{
          "shape":"Time",
          "documentation":"<p> ISO 8601 timestamp (returned as a string) when this stage session began.</p>"
        },
        "endTime":{
          "shape":"Time",
          "documentation":"<p>ISO 8601 timestamp (returned as a string) when the stage session ended. This is null if the stage is active.</p>"
        }
      },
      "documentation":"<p>Summary information about a stage session.</p>"
    },
    "StageSummary":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StageArn",
          "documentation":"<p>Stage ARN.</p>"
        },
        "name":{
          "shape":"StageName",
          "documentation":"<p>Stage name.</p>"
        },
        "activeSessionId":{
          "shape":"StageSessionId",
          "documentation":"<p>ID of the active session within the stage.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        }
      },
      "documentation":"<p>Summary information about a stage.</p>"
    },
    "StageSummaryList":{
      "type":"list",
      "member":{"shape":"StageSummary"}
    },
    "StartCompositionRequest":{
      "type":"structure",
      "required":[
        "stageArn",
        "destinations"
      ],
      "members":{
        "stageArn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the stage to be used for compositing.</p>"
        },
        "idempotencyToken":{
          "shape":"CompositionClientToken",
          "documentation":"<p>Idempotency token.</p>",
          "idempotencyToken":true
        },
        "layout":{
          "shape":"LayoutConfiguration",
          "documentation":"<p>Layout object to configure composition parameters.</p>"
        },
        "destinations":{
          "shape":"DestinationConfigurationList",
          "documentation":"<p>Array of destination configuration.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        }
      }
    },
    "StartCompositionResponse":{
      "type":"structure",
      "members":{
        "composition":{
          "shape":"Composition",
          "documentation":"<p>The Composition that was created.</p>"
        }
      }
    },
    "StopCompositionRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"CompositionArn",
          "documentation":"<p>ARN of the Composition.</p>"
        }
      }
    },
    "StopCompositionResponse":{
      "type":"structure",
      "members":{
      }
    },
    "StorageConfiguration":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StorageConfigurationArn",
          "documentation":"<p>ARN of the storage configuration.</p>"
        },
        "name":{
          "shape":"StorageConfigurationName",
          "documentation":"<p>Name of the storage configuration.</p>"
        },
        "s3":{
          "shape":"S3StorageConfiguration",
          "documentation":"<p>An S3 destination configuration where recorded videos will be stored.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        }
      },
      "documentation":"<p>A complex type that describes a location where recorded videos will be stored.</p>"
    },
    "StorageConfigurationArn":{
      "type":"string",
      "max":128,
      "min":1,
      "pattern":"arn:aws:ivs:[a-z0-9-]+:[0-9]+:storage-configuration/[a-zA-Z0-9-]+"
    },
    "StorageConfigurationName":{
      "type":"string",
      "max":128,
      "min":0,
      "pattern":"[a-zA-Z0-9-_]*"
    },
    "StorageConfigurationSummary":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StorageConfigurationArn",
          "documentation":"<p>ARN of the storage configuration.</p>"
        },
        "name":{
          "shape":"StorageConfigurationName",
          "documentation":"<p>Name of the storage configuration.</p>"
        },
        "s3":{
          "shape":"S3StorageConfiguration",
          "documentation":"<p>An S3 destination configuration where recorded videos will be stored.</p>"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Tags attached to the resource. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints on tags beyond what is documented there.</p>"
        }
      },
      "documentation":"<p>Summary information about a storage configuration.</p>"
    },
    "StorageConfigurationSummaryList":{
      "type":"list",
      "member":{"shape":"StorageConfigurationSummary"}
    },
    "String":{"type":"string"},
    "TagKey":{
      "type":"string",
      "max":128,
      "min":1
    },
    "TagKeyList":{
      "type":"list",
      "member":{"shape":"TagKey"},
      "max":50,
      "min":0
    },
    "TagResourceRequest":{
      "type":"structure",
      "required":[
        "resourceArn",
        "tags"
      ],
      "members":{
        "resourceArn":{
          "shape":"ResourceArn",
          "documentation":"<p>The ARN of the resource to be tagged. The ARN must be URL-encoded.</p>",
          "location":"uri",
          "locationName":"resourceArn"
        },
        "tags":{
          "shape":"Tags",
          "documentation":"<p>Array of tags to be added or updated. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints beyond what is documented there.</p>"
        }
      }
    },
    "TagResourceResponse":{
      "type":"structure",
      "members":{
      }
    },
    "TagValue":{
      "type":"string",
      "max":256,
      "min":0
    },
    "Tags":{
      "type":"map",
      "key":{"shape":"TagKey"},
      "value":{"shape":"TagValue"},
      "max":50,
      "min":0
    },
    "Time":{
      "type":"timestamp",
      "timestampFormat":"iso8601"
    },
    "UntagResourceRequest":{
      "type":"structure",
      "required":[
        "resourceArn",
        "tagKeys"
      ],
      "members":{
        "resourceArn":{
          "shape":"ResourceArn",
          "documentation":"<p>The ARN of the resource to be untagged. The ARN must be URL-encoded.</p>",
          "location":"uri",
          "locationName":"resourceArn"
        },
        "tagKeys":{
          "shape":"TagKeyList",
          "documentation":"<p>Array of tags to be removed. Array of maps, each of the form <code>string:string (key:value)</code>. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for details, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS has no constraints beyond what is documented there.</p>",
          "location":"querystring",
          "locationName":"tagKeys"
        }
      }
    },
    "UntagResourceResponse":{
      "type":"structure",
      "members":{
      }
    },
    "UpdateStageRequest":{
      "type":"structure",
      "required":["arn"],
      "members":{
        "arn":{
          "shape":"StageArn",
          "documentation":"<p>ARN of the stage to be updated.</p>"
        },
        "name":{
          "shape":"StageName",
          "documentation":"<p>Name of the stage to be updated.</p>"
        },
        "autoParticipantRecordingConfiguration":{
          "shape":"AutoParticipantRecordingConfiguration",
          "documentation":"<p>Auto-participant-recording configuration object to attach to the stage. Auto-participant-recording configuration cannot be updated while recording is active.</p>"
        }
      }
    },
    "UpdateStageResponse":{
      "type":"structure",
      "members":{
        "stage":{
          "shape":"Stage",
          "documentation":"<p>The updated stage.</p>"
        }
      }
    },
    "UserId":{
      "type":"string",
      "max":128,
      "min":0
    },
    "ValidationException":{
      "type":"structure",
      "members":{
        "exceptionMessage":{
          "shape":"errorMessage",
          "documentation":"<p>The input fails to satisfy the constraints specified by an Amazon Web Services service.</p>"
        }
      },
      "documentation":"<p/>",
      "error":{
        "httpStatusCode":400,
        "senderFault":true
      },
      "exception":true
    },
    "Video":{
      "type":"structure",
      "members":{
        "width":{
          "shape":"Width",
          "documentation":"<p>Video-resolution width. Note that the maximum value is determined by <code>width</code> times <code>height</code>, such that the maximum total pixels is 2073600 (1920x1080 or 1080x1920). Default: 1280.</p>"
        },
        "height":{
          "shape":"Height",
          "documentation":"<p>Video-resolution height. Note that the maximum value is determined by <code>width</code> times <code>height</code>, such that the maximum total pixels is 2073600 (1920x1080 or 1080x1920). Default: 720.</p>"
        },
        "framerate":{
          "shape":"Framerate",
          "documentation":"<p>Video frame rate, in fps. Default: 30.</p>"
        },
        "bitrate":{
          "shape":"Bitrate",
          "documentation":"<p>Bitrate for generated output, in bps. Default: 2500000.</p>"
        }
      },
      "documentation":"<p>Settings for video.</p>"
    },
    "VideoAspectRatio":{
      "type":"string",
      "enum":[
        "AUTO",
        "VIDEO",
        "SQUARE",
        "PORTRAIT"
      ]
    },
    "VideoFillMode":{
      "type":"string",
      "enum":[
        "FILL",
        "COVER",
        "CONTAIN"
      ]
    },
    "Width":{
      "type":"integer",
      "box":true,
      "max":1920,
      "min":1
    },
    "errorMessage":{"type":"string"}
  },
  "documentation":"<p> <b>Introduction</b> </p> <p>The Amazon Interactive Video Service (IVS) real-time API is REST compatible, using a standard HTTP API and an AWS EventBridge event stream for responses. JSON is used for both requests and responses, including errors. </p> <p>Terminology:</p> <ul> <li> <p>A <i>stage</i> is a virtual space where participants can exchange video in real time.</p> </li> <li> <p>A <i>participant token</i> is a token that authenticates a participant when they join a stage.</p> </li> <li> <p>A <i>participant object</i> represents participants (people) in the stage and contains information about them. When a token is created, it includes a participant ID; when a participant uses that token to join a stage, the participant is associated with that participant ID. There is a 1:1 mapping between participant tokens and participants.</p> </li> <li> <p>Server-side composition: The <i>composition</i> process composites participants of a stage into a single video and forwards it to a set of outputs (e.g., IVS channels). Composition endpoints support this process.</p> </li> <li> <p>Server-side composition: A <i>composition</i> controls the look of the outputs, including how participants are positioned in the video.</p> </li> </ul> <p> <b>Resources</b> </p> <p>The following resources contain information about your IVS live stream (see <a href=\"https://docs.aws.amazon.com/ivs/latest/RealTimeUserGuide/getting-started.html\">Getting Started with Amazon IVS Real-Time Streaming</a>):</p> <ul> <li> <p> <b>Stage</b> — A stage is a virtual space where participants can exchange video in real time.</p> </li> </ul> <p> <b>Tagging</b> </p> <p>A <i>tag</i> is a metadata label that you assign to an AWS resource. A tag comprises a <i>key</i> and a <i>value</i>, both set by you. For example, you might set a tag as <code>topic:nature</code> to label a particular video category. See <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html\">Tagging AWS Resources</a> for more information, including restrictions that apply to tags and \"Tag naming limits and requirements\"; Amazon IVS stages has no service-specific constraints beyond what is documented there.</p> <p>Tags can help you identify and organize your AWS resources. For example, you can use the same tag for different resources to indicate that they are related. You can also use tags to manage access (see <a href=\"https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html\">Access Tags</a>).</p> <p>The Amazon IVS real-time API has these tag-related endpoints: <a>TagResource</a>, <a>UntagResource</a>, and <a>ListTagsForResource</a>. The following resource supports tagging: Stage.</p> <p>At most 50 tags can be applied to a resource.</p> <p> <b>Stages Endpoints</b> </p> <ul> <li> <p> <a>CreateParticipantToken</a> — Creates an additional token for a specified stage. This can be done after stage creation or when tokens expire.</p> </li> <li> <p> <a>CreateStage</a> — Creates a new stage (and optionally participant tokens).</p> </li> <li> <p> <a>DeleteStage</a> — Shuts down and deletes the specified stage (disconnecting all participants).</p> </li> <li> <p> <a>DisconnectParticipant</a> — Disconnects a specified participant and revokes the participant permanently from a specified stage.</p> </li> <li> <p> <a>GetParticipant</a> — Gets information about the specified participant token.</p> </li> <li> <p> <a>GetStage</a> — Gets information for the specified stage.</p> </li> <li> <p> <a>GetStageSession</a> — Gets information for the specified stage session.</p> </li> <li> <p> <a>ListParticipantEvents</a> — Lists events for a specified participant that occurred during a specified stage session.</p> </li> <li> <p> <a>ListParticipants</a> — Lists all participants in a specified stage session.</p> </li> <li> <p> <a>ListStages</a> — Gets summary information about all stages in your account, in the AWS region where the API request is processed.</p> </li> <li> <p> <a>ListStageSessions</a> — Gets all sessions for a specified stage.</p> </li> <li> <p> <a>UpdateStage</a> — Updates a stage’s configuration.</p> </li> </ul> <p> <b>Composition Endpoints</b> </p> <ul> <li> <p> <a>GetComposition</a> — Gets information about the specified Composition resource.</p> </li> <li> <p> <a>ListCompositions</a> — Gets summary information about all Compositions in your account, in the AWS region where the API request is processed.</p> </li> <li> <p> <a>StartComposition</a> — Starts a Composition from a stage based on the configuration provided in the request.</p> </li> <li> <p> <a>StopComposition</a> — Stops and deletes a Composition resource. Any broadcast from the Composition resource is stopped.</p> </li> </ul> <p> <b>EncoderConfiguration Endpoints</b> </p> <ul> <li> <p> <a>CreateEncoderConfiguration</a> — Creates an EncoderConfiguration object.</p> </li> <li> <p> <a>DeleteEncoderConfiguration</a> — Deletes an EncoderConfiguration resource. Ensures that no Compositions are using this template; otherwise, returns an error.</p> </li> <li> <p> <a>GetEncoderConfiguration</a> — Gets information about the specified EncoderConfiguration resource.</p> </li> <li> <p> <a>ListEncoderConfigurations</a> — Gets summary information about all EncoderConfigurations in your account, in the AWS region where the API request is processed.</p> </li> </ul> <p> <b>StorageConfiguration Endpoints</b> </p> <ul> <li> <p> <a>CreateStorageConfiguration</a> — Creates a new storage configuration, used to enable recording to Amazon S3.</p> </li> <li> <p> <a>DeleteStorageConfiguration</a> — Deletes the storage configuration for the specified ARN.</p> </li> <li> <p> <a>GetStorageConfiguration</a> — Gets the storage configuration for the specified ARN.</p> </li> <li> <p> <a>ListStorageConfigurations</a> — Gets summary information about all storage configurations in your account, in the AWS region where the API request is processed.</p> </li> </ul> <p> <b>Tags Endpoints</b> </p> <ul> <li> <p> <a>ListTagsForResource</a> — Gets information about AWS tags for the specified ARN.</p> </li> <li> <p> <a>TagResource</a> — Adds or updates tags for the AWS resource with the specified ARN.</p> </li> <li> <p> <a>UntagResource</a> — Removes tags from the resource with the specified ARN.</p> </li> </ul>"
}
