Objects: compose

Concatenates a list of existing objects into a new object in the same bucket. Try it now.

There is a limit (currently 32) to the number of components that can be composed in a single operation.

The authenticated user must have sufficient permission to use this method.

To compose objects encrypted by a customer-supplied encryption key, use the headers listed on the Encryption page in your request.


HTTP request

POST https://storage.googleapis.com/storage/v1/b/bucket/o/destinationObject/compose


Parameter name Value Description
Path parameters
bucket string Name of the bucket containing the source objects. The destination object is stored in this bucket.
destinationObject string Name of the new object. For information about how to URL encode object names to be path safe, see Encoding URI path parts.
Optional query parameters
destinationPredefinedAcl string Apply a predefined set of access controls to the destination object.

Acceptable values are:
  • "authenticatedRead": Object owner gets OWNER access, and allAuthenticatedUsers get READER access.
  • "bucketOwnerFullControl": Object owner gets OWNER access, and project team owners get OWNER access.
  • "bucketOwnerRead": Object owner gets OWNER access, and project team owners get READER access.
  • "private": Object owner gets OWNER access.
  • "projectPrivate": Object owner gets OWNER access, and project team members get access according to their roles.
  • "publicRead": Object owner gets OWNER access, and allUsers get READER access.
If iamConfiguration.uniformBucketLevelAccess.enabled is set to true, requests that include this parameter fail with a 400 Bad Request response.
ifGenerationMatch long Makes the operation conditional on whether the object's current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.
ifMetagenerationMatch long Makes the operation conditional on whether the object's current metageneration matches the given value.
kmsKeyName string Resource name of the Cloud KMS key that will be used to encrypt the object. Overrides the object metadata's kms_key_name value, if any.
userProject string The project to be billed for this request. Required for Requester Pays buckets.

Request body

In the request body, supply data with the following structure:

  "kind": "storage#composeRequest",
  "sourceObjects": [
      "name": string,
      "generation": long,
      "objectPreconditions": {
        "ifGenerationMatch": long
  "destination": objects Resource
Property name Value Description Notes
kind string The kind of item this is.
destination nested object Properties of the resulting object. writable
sourceObjects[] list The list of source objects that will be concatenated into a single object.
sourceObjects[].name string The source object's name. All source objects must have the same storage class and reside in the same bucket. writable
sourceObjects[].generation long The generation of this object to use as the source. writable
sourceObjects[].objectPreconditions object Conditions that must be met for this operation to execute.
sourceObjects[].objectPreconditions.ifGenerationMatch long Only perform the composition if the generation of the source object that would be used matches this value. If this value and a generation are both specified, they must be the same value or the call will fail. writable


If successful, this method returns an object resource in the response body, with the owner and acl properties omitted.

Try it!

Use the APIs Explorer below to call this method on live data and see the response.



Cloud Storage