<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="firebasehosting_v1beta1.html">Firebase Hosting API</a> . <a href="firebasehosting_v1beta1.sites.html">sites</a> . <a href="firebasehosting_v1beta1.sites.versions.html">versions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="firebasehosting_v1beta1.sites.versions.files.html">files()</a></code>
</p>
<p class="firstline">Returns the files Resource.</p>

<p class="toc_element">
  <code><a href="#clone">clone(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new version on the specified target site using the content of the specified version.</p>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, sizeBytes=None, versionId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new version for the specified site.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified version.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the versions that have been created for the specified site. This list includes versions for both the default `live` channel and any active preview channels for the specified site.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline"> Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The supported [state](../sites.versions#versionstatus) transitions for a version are from `CREATED` to `FINALIZED`. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`.</p>
<p class="toc_element">
  <code><a href="#populateFiles">populateFiles(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline"> Adds content files to the specified version. Each file must be under 2 GB.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="clone">clone(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new version on the specified target site using the content of the specified version.

Args:
  parent: string, Required. The target site for the cloned version, in the format: sites/ SITE_ID (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;exclude&quot;: { # A representation of filter path. # If provided, only paths that do not match any of the RegEx values in this list will be included in the new version.
    &quot;regexes&quot;: [ # An array of RegEx values by which to filter.
      &quot;A String&quot;,
    ],
  },
  &quot;finalize&quot;: True or False, # If true, the call to `CloneVersion` immediately finalizes the version after cloning is complete. If false, the cloned version will have a status of `CREATED`. Use [`UpdateVersion`](patch) to set the status of the version to `FINALIZED`.
  &quot;include&quot;: { # A representation of filter path. # If provided, only paths that match one or more RegEx values in this list will be included in the new version.
    &quot;regexes&quot;: [ # An array of RegEx values by which to filter.
      &quot;A String&quot;,
    ],
  },
  &quot;sourceVersion&quot;: &quot;A String&quot;, # Required. The unique identifier for the version to be cloned, in the format: sites/SITE_ID/versions/VERSION_ID
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a network API call.
  &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress. If `true`, the operation is completed, and either `error` or `response` is available.
  &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for different programming environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). Each `Status` message contains three pieces of data: error code, error message, and error details. You can find out more about this error model and how to work with it in the [API Design Guide](https://cloud.google.com/apis/design/errors). # The error result of the operation in case of failure or cancellation.
    &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    &quot;details&quot;: [ # A list of messages that carry the error details. There is a common set of message types for APIs to use.
      {
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
      },
    ],
    &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the google.rpc.Status.details field, or localized by the client.
  },
  &quot;metadata&quot;: { # Service-specific metadata associated with the operation. It typically contains progress information and common metadata such as create time. Some services might not provide such metadata. Any method that returns a long-running operation should document the metadata type, if any.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
  &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that originally returns it. If you use the default HTTP mapping, the `name` should be a resource name ending with `operations/{unique_id}`.
  &quot;response&quot;: { # The normal response of the operation in case of success. If the original method returns no data on success, such as `Delete`, the response is `google.protobuf.Empty`. If the original method is standard `Get`/`Create`/`Update`, the response should be the resource. For other methods, the response should have the type `XxxResponse`, where `Xxx` is the original method name. For example, if the original method name is `TakeSnapshot()`, the inferred response type is `TakeSnapshotResponse`.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, sizeBytes=None, versionId=None, x__xgafv=None)</code>
  <pre>Creates a new version for the specified site.

Args:
  parent: string, Required. The site in which to create the version, in the format: sites/ SITE_ID (required)
  body: object, The request body.
    The object takes the form of:

{ # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
    &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
    &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
    &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;headers&quot;: { # Required. The additional headers to add to the response.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
      },
    ],
    &quot;i18n&quot;: { # If provided, i18n rewrites are enabled. # Optional. Defines i18n rewrite behavior.
      &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
    },
    &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
        &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
      },
    ],
    &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
        &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
        &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
        &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
          &quot;region&quot;: &quot;A String&quot;, # Optional. User-provided region where the Cloud Run service is hosted. Defaults to `us-central1` if not supplied.
          &quot;serviceId&quot;: &quot;A String&quot;, # Required. User-defined ID of the Cloud Run service.
        },
      },
    ],
    &quot;trailingSlashBehavior&quot;: &quot;A String&quot;, # Defines how to handle a trailing slash in the URL path.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was created.
  &quot;createUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `DELETED`.
  &quot;deleteUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `DELETED` the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;fileCount&quot;: &quot;A String&quot;, # Output only. The total number of files associated with the version. This value is calculated after a version is `FINALIZED`.
  &quot;finalizeTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `FINALIZED`.
  &quot;finalizeUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `FINALIZED` the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # The fully-qualified resource name for the version, in the format: sites/ SITE_ID/versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
  &quot;preview&quot;: { # Deprecated in favor of [site channels](sites.channels). # Deprecated in favor of [site channels](sites.channels).
    &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
    &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
  },
  &quot;status&quot;: &quot;A String&quot;, # The deploy status of the version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
  &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
}

  sizeBytes: string, The self-reported size of the version. This value is used for a pre-emptive quota check for legacy version uploads.
  versionId: string, A unique id for the new version. This is was only specified for legacy version creations, and should be blank.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
    &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
    &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
    &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;headers&quot;: { # Required. The additional headers to add to the response.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
      },
    ],
    &quot;i18n&quot;: { # If provided, i18n rewrites are enabled. # Optional. Defines i18n rewrite behavior.
      &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
    },
    &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
        &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
      },
    ],
    &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
        &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
        &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
        &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
          &quot;region&quot;: &quot;A String&quot;, # Optional. User-provided region where the Cloud Run service is hosted. Defaults to `us-central1` if not supplied.
          &quot;serviceId&quot;: &quot;A String&quot;, # Required. User-defined ID of the Cloud Run service.
        },
      },
    ],
    &quot;trailingSlashBehavior&quot;: &quot;A String&quot;, # Defines how to handle a trailing slash in the URL path.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was created.
  &quot;createUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `DELETED`.
  &quot;deleteUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `DELETED` the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;fileCount&quot;: &quot;A String&quot;, # Output only. The total number of files associated with the version. This value is calculated after a version is `FINALIZED`.
  &quot;finalizeTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `FINALIZED`.
  &quot;finalizeUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `FINALIZED` the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # The fully-qualified resource name for the version, in the format: sites/ SITE_ID/versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
  &quot;preview&quot;: { # Deprecated in favor of [site channels](sites.channels). # Deprecated in favor of [site channels](sites.channels).
    &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
    &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
  },
  &quot;status&quot;: &quot;A String&quot;, # The deploy status of the version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
  &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the specified version.

Args:
  name: string, Required. The fully-qualified resource name for the version, in the format: sites/SITE_ID/versions/VERSION_ID (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the versions that have been created for the specified site. This list includes versions for both the default `live` channel and any active preview channels for the specified site.

Args:
  parent: string, Required. The site or channel for which to list versions, in either of the following formats: - sites/SITE_ID - sites/SITE_ID/channels/CHANNEL_ID  (required)
  filter: string, A filter string used to return a subset of versions in the response. The currently supported fields for filtering are: `name`, `status`, and `create_time`. Learn more about filtering in Google&#x27;s [AIP 160 standard](https://google.aip.dev/160).
  pageSize: integer, The maximum number of versions to return. The service may return a lower number if fewer versions exist than this maximum number. If unspecified, defaults to 25. The maximum value is 100; values above 100 will be coerced to 100.
  pageToken: string, A token from a previous call to `ListVersions` that tells the server where to resume listing.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The pagination token, if more results exist beyond the ones in this response. Include this token in your next call to `ListVersions`. Page tokens are short-lived and should not be stored.
  &quot;versions&quot;: [ # The list of versions, if any exist.
    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
        &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
        &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
        &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
          { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
            &quot;headers&quot;: { # Required. The additional headers to add to the response.
              &quot;a_key&quot;: &quot;A String&quot;,
            },
            &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
          },
        ],
        &quot;i18n&quot;: { # If provided, i18n rewrites are enabled. # Optional. Defines i18n rewrite behavior.
          &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
        },
        &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
          { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
            &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
            &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
            &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
          },
        ],
        &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
          { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
            &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
            &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
            &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
            &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
            &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
              &quot;region&quot;: &quot;A String&quot;, # Optional. User-provided region where the Cloud Run service is hosted. Defaults to `us-central1` if not supplied.
              &quot;serviceId&quot;: &quot;A String&quot;, # Required. User-defined ID of the Cloud Run service.
            },
          },
        ],
        &quot;trailingSlashBehavior&quot;: &quot;A String&quot;, # Defines how to handle a trailing slash in the URL path.
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was created.
      &quot;createUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the version.
        &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
        &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
      },
      &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `DELETED`.
      &quot;deleteUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `DELETED` the version.
        &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
        &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
      },
      &quot;fileCount&quot;: &quot;A String&quot;, # Output only. The total number of files associated with the version. This value is calculated after a version is `FINALIZED`.
      &quot;finalizeTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `FINALIZED`.
      &quot;finalizeUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `FINALIZED` the version.
        &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
        &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
      },
      &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # The fully-qualified resource name for the version, in the format: sites/ SITE_ID/versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
      &quot;preview&quot;: { # Deprecated in favor of [site channels](sites.channels). # Deprecated in favor of [site channels](sites.channels).
        &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
        &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
      },
      &quot;status&quot;: &quot;A String&quot;, # The deploy status of the version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
      &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre> Updates the specified metadata for the specified version. This method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The supported [state](../sites.versions#versionstatus) transitions for a version are from `CREATED` to `FINALIZED`. Use [`DeleteVersion`](delete) to set the status of a version to `DELETED`.

Args:
  name: string, The fully-qualified resource name for the version, in the format: sites/ SITE_ID/versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create). (required)
  body: object, The request body.
    The object takes the form of:

{ # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
    &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
    &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
    &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;headers&quot;: { # Required. The additional headers to add to the response.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
      },
    ],
    &quot;i18n&quot;: { # If provided, i18n rewrites are enabled. # Optional. Defines i18n rewrite behavior.
      &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
    },
    &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
        &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
      },
    ],
    &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
        &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
        &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
        &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
          &quot;region&quot;: &quot;A String&quot;, # Optional. User-provided region where the Cloud Run service is hosted. Defaults to `us-central1` if not supplied.
          &quot;serviceId&quot;: &quot;A String&quot;, # Required. User-defined ID of the Cloud Run service.
        },
      },
    ],
    &quot;trailingSlashBehavior&quot;: &quot;A String&quot;, # Defines how to handle a trailing slash in the URL path.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was created.
  &quot;createUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `DELETED`.
  &quot;deleteUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `DELETED` the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;fileCount&quot;: &quot;A String&quot;, # Output only. The total number of files associated with the version. This value is calculated after a version is `FINALIZED`.
  &quot;finalizeTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `FINALIZED`.
  &quot;finalizeUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `FINALIZED` the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # The fully-qualified resource name for the version, in the format: sites/ SITE_ID/versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
  &quot;preview&quot;: { # Deprecated in favor of [site channels](sites.channels). # Deprecated in favor of [site channels](sites.channels).
    &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
    &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
  },
  &quot;status&quot;: &quot;A String&quot;, # The deploy status of the version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
  &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
}

  updateMask: string, A set of field names from your [version](../sites.versions) that you want to update. A field will be overwritten if, and only if, it&#x27;s in the mask. If a mask is not provided then a default mask of only [`status`](../sites.versions#Version.FIELDS.status) will be used.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A `Version` is a configuration and a collection of static files which determine how a site is displayed.
  &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and processed before serving content. The URL request paths are matched against the specified URL patterns in the configuration, then Hosting applies the applicable configuration according to a specific [priority order](https://firebase.google.com/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](https://firebase.google.com/docs/cli/#the_firebasejson_file) file.
    &quot;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
    &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
    &quot;headers&quot;: [ # An array of objects, where each object specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
      { # A [`Header`](https://firebase.google.com/docs/hosting/full-config#headers) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to apply the specified custom response headers.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;headers&quot;: { # Required. The additional headers to add to the response.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
      },
    ],
    &quot;i18n&quot;: { # If provided, i18n rewrites are enabled. # Optional. Defines i18n rewrite behavior.
      &quot;root&quot;: &quot;A String&quot;, # Required. The user-supplied path where country and language specific content will be looked for within the public directory.
    },
    &quot;redirects&quot;: [ # An array of objects (called redirect rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
      { # A [`Redirect`](https://firebase.google.com/docs/hosting/full-config#redirects) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond with a redirect to the specified destination path.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;location&quot;: &quot;A String&quot;, # Required. The value to put in the HTTP location header of the response. The location can contain capture group values from the pattern using a `:` prefix to identify the segment and an optional `*` to capture the rest of the URL. For example: &quot;glob&quot;: &quot;/:capture*&quot;, &quot;statusCode&quot;: 301, &quot;location&quot;: &quot;https://example.com/foo/:capture&quot;
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
        &quot;statusCode&quot;: 42, # Required. The status HTTP code to return in the response. It must be a valid 3xx status code.
      },
    ],
    &quot;rewrites&quot;: [ # An array of objects (called rewrite rules), where each rule specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
      { # A [`Rewrite`](https://firebase.google.com/docs/hosting/full-config#rewrites) specifies a URL pattern that, if matched to the request URL path, triggers Hosting to respond as if the service were given the specified destination URL.
        &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
        &quot;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function name exactly.
        &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob](https://firebase.google.com/docs/hosting/full-config#glob_pattern_matching) to match against the request URL path.
        &quot;path&quot;: &quot;A String&quot;, # The URL path to rewrite the request to.
        &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request URL path.
        &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the Cloud Run service does not exist when setting or updating your Firebase Hosting configuration, then the request fails. Any errors from the Cloud Run service are passed to the end user (for example, if you delete a service, any requests directed to that service receive a `404` error). # The request will be forwarded to Cloud Run.
          &quot;region&quot;: &quot;A String&quot;, # Optional. User-provided region where the Cloud Run service is hosted. Defaults to `us-central1` if not supplied.
          &quot;serviceId&quot;: &quot;A String&quot;, # Required. User-defined ID of the Cloud Run service.
        },
      },
    ],
    &quot;trailingSlashBehavior&quot;: &quot;A String&quot;, # Defines how to handle a trailing slash in the URL path.
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was created.
  &quot;createUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who created the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;deleteTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `DELETED`.
  &quot;deleteUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `DELETED` the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;fileCount&quot;: &quot;A String&quot;, # Output only. The total number of files associated with the version. This value is calculated after a version is `FINALIZED`.
  &quot;finalizeTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was `FINALIZED`.
  &quot;finalizeUser&quot;: { # Contains metadata about the user who performed an action, such as creating a release or finalizing a version. # Output only. Identifies the user who `FINALIZED` the version.
    &quot;email&quot;: &quot;A String&quot;, # The email address of the user when the user performed the action.
    &quot;imageUrl&quot;: &quot;A String&quot;, # A profile image URL for the user. May not be present if the user has changed their email address or deleted their account.
  },
  &quot;labels&quot;: { # The labels used for extra metadata and/or filtering.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # The fully-qualified resource name for the version, in the format: sites/ SITE_ID/versions/VERSION_ID This name is provided in the response body when you call [`CreateVersion`](sites.versions/create).
  &quot;preview&quot;: { # Deprecated in favor of [site channels](sites.channels). # Deprecated in favor of [site channels](sites.channels).
    &quot;active&quot;: True or False, # If true, preview URLs are enabled for this version.
    &quot;expireTime&quot;: &quot;A String&quot;, # Indicates the expiration time for previewing this version; preview URL requests received after this time will 404.
  },
  &quot;status&quot;: &quot;A String&quot;, # The deploy status of the version. For a successful deploy, call [`CreateVersion`](sites.versions/create) to make a new version (`CREATED` status), [upload all desired files](sites.versions/populateFiles) to the version, then [update](sites.versions/patch) the version to the `FINALIZED` status. Note that if you leave the version in the `CREATED` state for more than 12 hours, the system will automatically mark the version as `ABANDONED`. You can also change the status of a version to `DELETED` by calling [`DeleteVersion`](sites.versions/delete).
  &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version. This value is calculated after a version is `FINALIZED`.
}</pre>
</div>

<div class="method">
    <code class="details" id="populateFiles">populateFiles(parent, body=None, x__xgafv=None)</code>
  <pre> Adds content files to the specified version. Each file must be under 2 GB.

Args:
  parent: string, Required. The version to which to add files, in the format: sites/SITE_ID /versions/VERSION_ID (required)
  body: object, The request body.
    The object takes the form of:

{
  &quot;files&quot;: { # A set of file paths to the hashes corresponding to assets that should be added to the version. A file path to an empty hash will remove the path from the version. Calculate a hash by Gzipping the file then taking the SHA256 hash of the newly compressed file.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;uploadRequiredHashes&quot;: [ # The content hashes of the specified files that need to be uploaded to the specified URL.
    &quot;A String&quot;,
  ],
  &quot;uploadUrl&quot;: &quot;A String&quot;, # The URL to which the files should be uploaded, in the format: &quot;https://upload-firebasehosting.googleapis.com/upload/sites/SITE_ID /versions/VERSION_ID/files&quot; Perform a multipart `POST` of the Gzipped file contents to the URL using a forward slash and the hash of the file appended to the end.
}</pre>
</div>

</body></html>