<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 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 a 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 on the specified site. Will include filtering in the future.</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 a version. Note that this method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](../sites.versions/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 a 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 target site using the content of the specified version.

Args:
  parent: string, Required. The target site where the cloned version will reside, in the format: `sites/{site}` (required)
  body: object, The request body.
    The object takes the form of:

{ # The request sent to CloneVersion.
  &quot;exclude&quot;: { # A representation of filter path. # If provided, only paths that do not match any of the regexes in this list will be included in the new version.
    &quot;regexes&quot;: [ # An array of regexes to filter by.
      &quot;A String&quot;,
    ],
  },
  &quot;finalize&quot;: True or False, # If true, immediately finalize the version after cloning is complete.
  &quot;include&quot;: { # A representation of filter path. # If provided, only paths that match one or more regexes in this list will be included in the new version.
    &quot;regexes&quot;: [ # An array of regexes to filter by.
      &quot;A String&quot;,
    ],
  },
  &quot;sourceVersion&quot;: &quot;A String&quot;, # Required. The name of the version to be cloned, in the format: `sites/{site}/versions/{version}`
}

  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 a site.

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

{ # A `Version` is the collection of configuration and [static files](sites.versions.files) that 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](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/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`](/docs/hosting/full-config#headers) is an object that 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](/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`](/docs/hosting/full-config#redirects) object 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](/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`](/docs/hosting/full-config#rewrites) object 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](/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 unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
  &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
    &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 a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint 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 the [`DeleteVersion`](sites.versions/delete) endpoint.
  &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 the collection of configuration and [static files](sites.versions.files) that 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](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/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`](/docs/hosting/full-config#headers) is an object that 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](/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`](/docs/hosting/full-config#redirects) object 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](/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`](/docs/hosting/full-config#rewrites) object 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](/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 unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
  &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
    &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 a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint 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 the [`DeleteVersion`](sites.versions/delete) endpoint.
  &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 name of the version to be deleted, in the format: sites/ site-name/versions/versionID (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 on the specified site. Will include filtering in the future.

Args:
  parent: string, Required. The parent for which to list files, in the format: sites/site-name (required)
  filter: string, The filter string used to return a subset of versions in the response. Currently supported fields for filtering are: name, status, and create_time. Filter processing will be implemented in accordance with go/filtering.
  pageSize: integer, The maximum number of versions to return. The service may return fewer than this value. If unspecified, at most 25 versions will be returned. The maximum value is 100; values above 100 will be coerced to 100
  pageToken: string, The next_page_token from a previous request, if provided.
  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
  &quot;versions&quot;: [ # The list of versions, if any exist.
    { # A `Version` is the collection of configuration and [static files](sites.versions.files) that 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](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/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`](/docs/hosting/full-config#headers) is an object that 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](/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`](/docs/hosting/full-config#redirects) object 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](/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`](/docs/hosting/full-config#rewrites) object 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](/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 unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
      &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
        &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 a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint 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 the [`DeleteVersion`](sites.versions/delete) endpoint.
      &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 a version. Note that this method will fail with `FAILED_PRECONDITION` in the event of an invalid state transition. The only valid transition for a version is currently from a `CREATED` status to a `FINALIZED` status. Use [`DeleteVersion`](../sites.versions/delete) to set the status of a version to `DELETED`.

Args:
  name: string, The unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint. (required)
  body: object, The request body.
    The object takes the form of:

{ # A `Version` is the collection of configuration and [static files](sites.versions.files) that 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](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/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`](/docs/hosting/full-config#headers) is an object that 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](/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`](/docs/hosting/full-config#redirects) object 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](/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`](/docs/hosting/full-config#rewrites) object 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](/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 unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
  &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
    &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 a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint 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 the [`DeleteVersion`](sites.versions/delete) endpoint.
  &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 the collection of configuration and [static files](sites.versions.files) that 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](/docs/hosting/full-config#hosting_priority_order). # The configuration for the behavior of the site. This configuration exists in the [`firebase.json`](/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`](/docs/hosting/full-config#headers) is an object that 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](/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`](/docs/hosting/full-config#redirects) object 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](/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`](/docs/hosting/full-config#rewrites) object 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](/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 unique identifier for a version, in the format: sites/site-name /versions/versionID This name is provided in the response body when you call the [`CreateVersion`](../sites.versions/create) endpoint.
  &quot;preview&quot;: { # Version preview configuration. If active and unexpired, this version will be accessible via a custom URL even if it is not the currently released version. Deprecated in favor of site channels. # Deprecated in favor of site channels. Version preview configuration for the site version. This configuration specifies whether previewing is enabled for this site version. Version previews allow you to preview your site at a custom URL before releasing it as the live version.
    &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 a version. For a successful deploy, call the [`CreateVersion`](sites.versions/create) endpoint 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 the [`DeleteVersion`](sites.versions/delete) endpoint.
  &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 a version. Each file must be under 2 GB.

Args:
  parent: string, Required. The version to add files to, in the format: sites/site-name /versions/versionID (required)
  body: object, The request body.
    The object takes the form of:

{ # The request to populate a Version&#x27;s Files.
  &quot;files&quot;: { # A set of file paths to the hashes corresponding to assets that should be added to the version. Note that 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 endpoint.
    &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-name /versions/versionID/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>