{
  "version":"2.0",
  "metadata":{
    "apiVersion":"2017-09-01",
    "endpointPrefix":"mediastore",
    "jsonVersion":"1.1",
    "protocol":"json",
    "serviceAbbreviation":"MediaStore",
    "serviceFullName":"AWS Elemental MediaStore",
    "serviceId":"MediaStore",
    "signatureVersion":"v4",
    "signingName":"mediastore",
    "targetPrefix":"MediaStore_20170901",
    "uid":"mediastore-2017-09-01"
  },
  "operations":{
    "CreateContainer":{
      "name":"CreateContainer",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"CreateContainerInput"},
      "output":{"shape":"CreateContainerOutput"},
      "errors":[
        {"shape":"ContainerInUseException"},
        {"shape":"LimitExceededException"},
        {"shape":"InternalServerError"}
      ],
      "documentation":"<p>Creates a storage container to hold objects. A container is similar to a bucket in the Amazon S3 service.</p>"
    },
    "DeleteContainer":{
      "name":"DeleteContainer",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"DeleteContainerInput"},
      "output":{"shape":"DeleteContainerOutput"},
      "errors":[
        {"shape":"ContainerInUseException"},
        {"shape":"ContainerNotFoundException"},
        {"shape":"InternalServerError"}
      ],
      "documentation":"<p>Deletes the specified container. Before you make a <code>DeleteContainer</code> request, delete any objects in the container or in any folders in the container. You can delete only empty containers. </p>"
    },
    "DeleteContainerPolicy":{
      "name":"DeleteContainerPolicy",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"DeleteContainerPolicyInput"},
      "output":{"shape":"DeleteContainerPolicyOutput"},
      "errors":[
        {"shape":"ContainerInUseException"},
        {"shape":"ContainerNotFoundException"},
        {"shape":"PolicyNotFoundException"},
        {"shape":"InternalServerError"}
      ],
      "documentation":"<p>Deletes the access policy that is associated with the specified container.</p>"
    },
    "DescribeContainer":{
      "name":"DescribeContainer",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"DescribeContainerInput"},
      "output":{"shape":"DescribeContainerOutput"},
      "errors":[
        {"shape":"ContainerNotFoundException"},
        {"shape":"InternalServerError"}
      ],
      "documentation":"<p>Retrieves the properties of the requested container. This returns a single <code>Container</code> object based on <code>ContainerName</code>. To return all <code>Container</code> objects that are associated with a specified AWS account, use <a>ListContainers</a>.</p>"
    },
    "GetContainerPolicy":{
      "name":"GetContainerPolicy",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"GetContainerPolicyInput"},
      "output":{"shape":"GetContainerPolicyOutput"},
      "errors":[
        {"shape":"ContainerInUseException"},
        {"shape":"ContainerNotFoundException"},
        {"shape":"PolicyNotFoundException"},
        {"shape":"InternalServerError"}
      ],
      "documentation":"<p>Retrieves the access policy for the specified container. For information about the data that is included in an access policy, see the <a href=\"https://aws.amazon.com/documentation/iam/\">AWS Identity and Access Management User Guide</a>.</p>"
    },
    "ListContainers":{
      "name":"ListContainers",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"ListContainersInput"},
      "output":{"shape":"ListContainersOutput"},
      "errors":[
        {"shape":"InternalServerError"}
      ],
      "documentation":"<p>Lists the properties of all containers in AWS Elemental MediaStore. </p> <p>You can query to receive all the containers in one response. Or you can include the <code>MaxResults</code> parameter to receive a limited number of containers in each response. In this case, the response includes a token. To get the next set of containers, send the command again, this time with the <code>NextToken</code> parameter (with the returned token as its value). The next set of responses appears, with a token if there are still more containers to receive. </p> <p>See also <a>DescribeContainer</a>, which gets the properties of one container. </p>"
    },
    "PutContainerPolicy":{
      "name":"PutContainerPolicy",
      "http":{
        "method":"POST",
        "requestUri":"/"
      },
      "input":{"shape":"PutContainerPolicyInput"},
      "output":{"shape":"PutContainerPolicyOutput"},
      "errors":[
        {"shape":"ContainerNotFoundException"},
        {"shape":"ContainerInUseException"},
        {"shape":"InternalServerError"}
      ],
      "documentation":"<p>Creates an access policy for the specified container to restrict the users and clients that can access it. For information about the data that is included in an access policy, see the <a href=\"https://aws.amazon.com/documentation/iam/\">AWS Identity and Access Management User Guide</a>.</p> <p>For this release of the REST API, you can create only one policy for a container. If you enter <code>PutContainerPolicy</code> twice, the second command modifies the existing policy. </p>"
    }
  },
  "shapes":{
    "Container":{
      "type":"structure",
      "members":{
        "Endpoint":{
          "shape":"Endpoint",
          "documentation":"<p>The DNS endpoint of the container. Use from 1 to 255 characters. Use this endpoint to identify this container when sending requests to the data plane. </p>"
        },
        "CreationTime":{
          "shape":"TimeStamp",
          "documentation":"<p>Unix timestamp.</p>"
        },
        "ARN":{
          "shape":"ContainerARN",
          "documentation":"<p>The Amazon Resource Name (ARN) of the container. The ARN has the following format:</p> <p>arn:aws:&lt;region&gt;:&lt;account that owns this container&gt;:container/&lt;name of container&gt; </p> <p>For example: arn:aws:mediastore:us-west-2:111122223333:container/movies </p>"
        },
        "Name":{
          "shape":"ContainerName",
          "documentation":"<p>The name of the container.</p>"
        },
        "Status":{
          "shape":"ContainerStatus",
          "documentation":"<p>The status of container creation or deletion. The status is one of the following: <code>CREATING</code>, <code>ACTIVE</code>, or <code>DELETING</code>. While the service is creating the container, the status is <code>CREATING</code>. When the endpoint is available, the status changes to <code>ACTIVE</code>.</p>"
        }
      },
      "documentation":"<p>This section describes operations that you can perform on an AWS Elemental MediaStore container.</p>"
    },
    "ContainerARN":{
      "type":"string",
      "max":1024,
      "min":1,
      "pattern":"arn:aws:mediastore:[a-z]+-[a-z]+-\\d:\\d{12}:container/\\w{1,255}"
    },
    "ContainerInUseException":{
      "type":"structure",
      "members":{
        "Message":{"shape":"ErrorMessage"}
      },
      "documentation":"<p>Resource already exists or is being updated.</p>",
      "exception":true
    },
    "ContainerList":{
      "type":"list",
      "member":{"shape":"Container"}
    },
    "ContainerListLimit":{
      "type":"integer",
      "max":100,
      "min":1
    },
    "ContainerName":{
      "type":"string",
      "max":255,
      "min":1,
      "pattern":"\\w+"
    },
    "ContainerNotFoundException":{
      "type":"structure",
      "members":{
        "Message":{"shape":"ErrorMessage"}
      },
      "documentation":"<p>Could not perform an operation on a container that does not exist.</p>",
      "exception":true
    },
    "ContainerPolicy":{
      "type":"string",
      "max":8192,
      "min":1,
      "pattern":"[\\u0009\\u000A\\u000D\\u0020-\\u00FF]+"
    },
    "ContainerStatus":{
      "type":"string",
      "enum":[
        "ACTIVE",
        "CREATING",
        "DELETING"
      ],
      "max":16,
      "min":1
    },
    "CreateContainerInput":{
      "type":"structure",
      "required":["ContainerName"],
      "members":{
        "ContainerName":{
          "shape":"ContainerName",
          "documentation":"<p>The name for the container. The name must be from 1 to 255 characters. Container names must be unique to your AWS account within a specific region. As an example, you could create a container named <code>movies</code> in every region, as long as you don’t have an existing container with that name.</p>"
        }
      }
    },
    "CreateContainerOutput":{
      "type":"structure",
      "required":["Container"],
      "members":{
        "Container":{
          "shape":"Container",
          "documentation":"<p>ContainerARN: The Amazon Resource Name (ARN) of the newly created container. The ARN has the following format: arn:aws:&lt;region&gt;:&lt;account that owns this container&gt;:container/&lt;name of container&gt;. For example: arn:aws:mediastore:us-west-2:111122223333:container/movies </p> <p>ContainerName: The container name as specified in the request.</p> <p>CreationTime: Unix timestamp.</p> <p>Status: The status of container creation or deletion. The status is one of the following: <code>CREATING</code>, <code>ACTIVE</code>, or <code>DELETING</code>. While the service is creating the container, the status is <code>CREATING</code>. When an endpoint is available, the status changes to <code>ACTIVE</code>.</p> <p>The return value does not include the container's endpoint. To make downstream requests, you must obtain this value by using <a>DescribeContainer</a> or <a>ListContainers</a>.</p>"
        }
      }
    },
    "DeleteContainerInput":{
      "type":"structure",
      "required":["ContainerName"],
      "members":{
        "ContainerName":{
          "shape":"ContainerName",
          "documentation":"<p>The name of the container to delete. </p>"
        }
      }
    },
    "DeleteContainerOutput":{
      "type":"structure",
      "members":{
      }
    },
    "DeleteContainerPolicyInput":{
      "type":"structure",
      "required":["ContainerName"],
      "members":{
        "ContainerName":{
          "shape":"ContainerName",
          "documentation":"<p>The name of the container that holds the policy.</p>"
        }
      }
    },
    "DeleteContainerPolicyOutput":{
      "type":"structure",
      "members":{
      }
    },
    "DescribeContainerInput":{
      "type":"structure",
      "members":{
        "ContainerName":{
          "shape":"ContainerName",
          "documentation":"<p>The name of the container to query.</p>"
        }
      }
    },
    "DescribeContainerOutput":{
      "type":"structure",
      "members":{
        "Container":{
          "shape":"Container",
          "documentation":"<p>The name of the queried container.</p>"
        }
      }
    },
    "Endpoint":{
      "type":"string",
      "max":255,
      "min":1
    },
    "ErrorMessage":{
      "type":"string",
      "max":255,
      "min":1,
      "pattern":"[ \\w:\\.\\?-]+"
    },
    "GetContainerPolicyInput":{
      "type":"structure",
      "required":["ContainerName"],
      "members":{
        "ContainerName":{
          "shape":"ContainerName",
          "documentation":"<p>The name of the container. </p>"
        }
      }
    },
    "GetContainerPolicyOutput":{
      "type":"structure",
      "required":["Policy"],
      "members":{
        "Policy":{
          "shape":"ContainerPolicy",
          "documentation":"<p>The contents of the access policy.</p>"
        }
      }
    },
    "InternalServerError":{
      "type":"structure",
      "members":{
        "Message":{"shape":"ErrorMessage"}
      },
      "documentation":"<p>The service is temporarily unavailable.</p>",
      "exception":true,
      "fault":true
    },
    "LimitExceededException":{
      "type":"structure",
      "members":{
        "Message":{"shape":"ErrorMessage"}
      },
      "documentation":"<p>A service limit has been exceeded.</p>",
      "exception":true
    },
    "ListContainersInput":{
      "type":"structure",
      "members":{
        "NextToken":{
          "shape":"PaginationToken",
          "documentation":"<p>Only if you used <code>MaxResults</code> in the first command, enter the token (which was included in the previous response) to obtain the next set of containers. This token is included in a response only if there actually are more containers to list.</p>"
        },
        "MaxResults":{
          "shape":"ContainerListLimit",
          "documentation":"<p>Enter the maximum number of containers in the response. Use from 1 to 255 characters. </p>"
        }
      }
    },
    "ListContainersOutput":{
      "type":"structure",
      "required":["Containers"],
      "members":{
        "Containers":{
          "shape":"ContainerList",
          "documentation":"<p>The names of the containers.</p>"
        },
        "NextToken":{
          "shape":"PaginationToken",
          "documentation":"<p> <code>NextToken</code> is the token to use in the next call to <code>ListContainers</code>. This token is returned only if you included the <code>MaxResults</code> tag in the original command, and only if there are still containers to return. </p>"
        }
      }
    },
    "PaginationToken":{
      "type":"string",
      "max":255,
      "min":1,
      "pattern":"[0-9A-Za-z=/+]+"
    },
    "PolicyNotFoundException":{
      "type":"structure",
      "members":{
        "Message":{"shape":"ErrorMessage"}
      },
      "documentation":"<p>Could not perform an operation on a policy that does not exist.</p>",
      "exception":true
    },
    "PutContainerPolicyInput":{
      "type":"structure",
      "required":[
        "ContainerName",
        "Policy"
      ],
      "members":{
        "ContainerName":{
          "shape":"ContainerName",
          "documentation":"<p>The name of the container.</p>"
        },
        "Policy":{
          "shape":"ContainerPolicy",
          "documentation":"<p>The contents of the policy, which includes the following: </p> <ul> <li> <p>One <code>Version</code> tag</p> </li> <li> <p>One <code>Statement</code> tag that contains the standard tags for the policy.</p> </li> </ul>"
        }
      }
    },
    "PutContainerPolicyOutput":{
      "type":"structure",
      "members":{
      }
    },
    "TimeStamp":{"type":"timestamp"}
  },
  "documentation":"<p>An AWS Elemental MediaStore container is a namespace that holds folders and objects. You use a container endpoint to create, read, and delete objects. </p>"
}
