<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.projects.html">projects</a> . <a href="firebasehosting_v1beta1.projects.sites.html">sites</a> . <a href="firebasehosting_v1beta1.projects.sites.channels.html">channels</a> . <a href="firebasehosting_v1beta1.projects.sites.channels.releases.html">releases</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, versionName=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new release which makes the content of the specified version</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the releases that have been created on 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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body=None, versionName=None, x__xgafv=None)</code>
  <pre>Creates a new release which makes the content of the specified version
actively display on the appropriate URL(s).

Args:
  parent: string, Required. The site that the release belongs to, in the format:
&lt;code&gt;sites/&lt;var&gt;site-name&lt;/var&gt;&lt;/code&gt; (required)
  body: object, The request body.
    The object takes the form of:

{ # A `Release` is a particular
    # [collection of configurations and files](sites.versions)
    # that is set to be public at a particular time.
  &quot;version&quot;: { # A `Version` is the collection of configuration and # Output only. The configuration and content that was released.
      # [static files](sites.versions.files) that determine how a site is displayed.
    &quot;deleteUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who `DELETED` the version.
        # a release or finalizing a 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;finalizeUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who `FINALIZED` the version.
        # a release or finalizing a 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;preview&quot;: { # Version preview configuration. If active and unexpired, # Version preview configuration for the site version. This configuration
        # specfies 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.
        # this version will be accessible via a custom URL even
        # if it is not the currently released 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;labels&quot;: { # The labels used for extra metadata and/or filtering.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was created.
    &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version.
        # &lt;br&gt;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;status&quot;: &quot;A String&quot;, # The deploy status of a version.
        # &lt;br&gt;
        # &lt;br&gt;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.
        # &lt;br&gt;
        # &lt;br&gt;Note that if you leave the version in the `CREATED` state for more
        # than 12&amp;nbsp;hours, the system will automatically mark the version as
        # `ABANDONED`.
        # &lt;br&gt;
        # &lt;br&gt;You can also change the status of a version to `DELETED` by calling the
        # [`DeleteVersion`](sites.versions/delete) endpoint.
    &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and # The configuration for the behavior of the site. This configuration exists
        # in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
        # processed before serving content. The patterns are matched and applied
        # according to a specific
        # [priority order](/docs/hosting/full-config#hosting_priority_order).
      &quot;redirects&quot;: [ # A list of globs that will cause the response to redirect to another
          # location.
        { # A [`redirect`](/docs/hosting/full-config#redirects) represents the
            # configuration for returning an HTTP redirect response given a matching
            # request URL path.
          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
              # pattern](/docs/hosting/full-config#glob_pattern_matching) 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;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression 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.
              # &lt;br&gt;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:
              # &lt;code&gt;&quot;glob&quot;: &quot;/:capture*&quot;,
              # &lt;br&gt;&quot;statusCode&quot;: 301,
              # &lt;br&gt;&quot;location&quot;: &quot;https://example.com/foo/:capture&quot;&lt;/code&gt;
        },
      ],
      &quot;headers&quot;: [ # A list of custom response headers that are added to the content if the
          # request URL path matches the glob.
        { # A [`header`](/docs/hosting/full-config#headers) defines custom headers to
            # add to a response should the request URL path match the pattern.
          &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request
              # URL path.
          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
              # pattern](/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;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
      &quot;trailingSlashBehavior&quot;: &quot;A String&quot;, # Defines how to handle a trailing slash in the URL path.
      &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
      &quot;rewrites&quot;: [ # A list of rewrites that will act as if the service were given the
          # destination URL.
        { # A [`rewrite`](/docs/hosting/full-config#rewrites) represents an internal
            # content rewrite on the version. If the pattern matches, the request will be
            # handled as if it were to the destination path specified in the
            # configuration.
          &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request
              # URL path.
          &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
          &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the # The request will be forwarded to Cloud Run.
              # 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).
            &quot;region&quot;: &quot;A String&quot;, # Optional. User-provided region where the Cloud Run service is hosted.&lt;br&gt;
                # Defaults to `us-central1` if not supplied.
            &quot;serviceId&quot;: &quot;A String&quot;, # Required. User-defined ID of the Cloud Run service.
          },
          &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
              # pattern](/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;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function
              # name exactly.
        },
      ],
    },
    &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format:
        # &lt;code&gt;sites/&lt;var&gt;site-name&lt;/var&gt;/versions/&lt;var&gt;versionID&lt;/var&gt;&lt;/code&gt;
        # This name is provided in the response body when you call the
        # [`CreateVersion`](../sites.versions/create) endpoint.
    &quot;createUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who created the version.
        # a release or finalizing a 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.
        # &lt;br&gt;This value is calculated after a version is `FINALIZED`.
  },
  &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to
      # 512&amp;nbsp;characters.
  &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who created the release.
      # a release or finalizing a 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;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format:
      # &lt;code&gt;sites/&lt;var&gt;site-name&lt;/var&gt;/releases/&lt;var&gt;releaseID&lt;/var&gt;&lt;/code&gt;
      # This name is provided in the response body when you call the
      # [`CreateRelease`](sites.releases/create) endpoint.
  &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release.
      # &lt;br&gt;Specify a value for this field only when creating a `SITE_DISABLE`
      # type release.
}

  versionName: string, The unique identifier for a version, in the format:
&lt;code&gt;/sites/&lt;var&gt;site-name&lt;/var&gt;/versions/&lt;var&gt;versionID&lt;/var&gt;&lt;/code&gt;
The &lt;var&gt;site-name&lt;/var&gt; in this version identifier must match the
&lt;var&gt;site-name&lt;/var&gt; in the `parent` parameter.
&lt;br&gt;
&lt;br&gt;This query parameter must be empty if the `type` field in the
request body is `SITE_DISABLE`.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A `Release` is a particular
      # [collection of configurations and files](sites.versions)
      # that is set to be public at a particular time.
    &quot;version&quot;: { # A `Version` is the collection of configuration and # Output only. The configuration and content that was released.
        # [static files](sites.versions.files) that determine how a site is displayed.
      &quot;deleteUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who `DELETED` the version.
          # a release or finalizing a 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;finalizeUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who `FINALIZED` the version.
          # a release or finalizing a 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;preview&quot;: { # Version preview configuration. If active and unexpired, # Version preview configuration for the site version. This configuration
          # specfies 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.
          # this version will be accessible via a custom URL even
          # if it is not the currently released 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;labels&quot;: { # The labels used for extra metadata and/or filtering.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was created.
      &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version.
          # &lt;br&gt;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;status&quot;: &quot;A String&quot;, # The deploy status of a version.
          # &lt;br&gt;
          # &lt;br&gt;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.
          # &lt;br&gt;
          # &lt;br&gt;Note that if you leave the version in the `CREATED` state for more
          # than 12&amp;nbsp;hours, the system will automatically mark the version as
          # `ABANDONED`.
          # &lt;br&gt;
          # &lt;br&gt;You can also change the status of a version to `DELETED` by calling the
          # [`DeleteVersion`](sites.versions/delete) endpoint.
      &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and # The configuration for the behavior of the site. This configuration exists
          # in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
          # processed before serving content. The patterns are matched and applied
          # according to a specific
          # [priority order](/docs/hosting/full-config#hosting_priority_order).
        &quot;redirects&quot;: [ # A list of globs that will cause the response to redirect to another
            # location.
          { # A [`redirect`](/docs/hosting/full-config#redirects) represents the
              # configuration for returning an HTTP redirect response given a matching
              # request URL path.
            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
                # pattern](/docs/hosting/full-config#glob_pattern_matching) 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;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression 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.
                # &lt;br&gt;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:
                # &lt;code&gt;&quot;glob&quot;: &quot;/:capture*&quot;,
                # &lt;br&gt;&quot;statusCode&quot;: 301,
                # &lt;br&gt;&quot;location&quot;: &quot;https://example.com/foo/:capture&quot;&lt;/code&gt;
          },
        ],
        &quot;headers&quot;: [ # A list of custom response headers that are added to the content if the
            # request URL path matches the glob.
          { # A [`header`](/docs/hosting/full-config#headers) defines custom headers to
              # add to a response should the request URL path match the pattern.
            &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request
                # URL path.
            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
                # pattern](/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;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
        &quot;trailingSlashBehavior&quot;: &quot;A String&quot;, # Defines how to handle a trailing slash in the URL path.
        &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
        &quot;rewrites&quot;: [ # A list of rewrites that will act as if the service were given the
            # destination URL.
          { # A [`rewrite`](/docs/hosting/full-config#rewrites) represents an internal
              # content rewrite on the version. If the pattern matches, the request will be
              # handled as if it were to the destination path specified in the
              # configuration.
            &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request
                # URL path.
            &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
            &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the # The request will be forwarded to Cloud Run.
                # 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).
              &quot;region&quot;: &quot;A String&quot;, # Optional. User-provided region where the Cloud Run service is hosted.&lt;br&gt;
                  # Defaults to `us-central1` if not supplied.
              &quot;serviceId&quot;: &quot;A String&quot;, # Required. User-defined ID of the Cloud Run service.
            },
            &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
                # pattern](/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;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function
                # name exactly.
          },
        ],
      },
      &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format:
          # &lt;code&gt;sites/&lt;var&gt;site-name&lt;/var&gt;/versions/&lt;var&gt;versionID&lt;/var&gt;&lt;/code&gt;
          # This name is provided in the response body when you call the
          # [`CreateVersion`](../sites.versions/create) endpoint.
      &quot;createUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who created the version.
          # a release or finalizing a 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.
          # &lt;br&gt;This value is calculated after a version is `FINALIZED`.
    },
    &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to
        # 512&amp;nbsp;characters.
    &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who created the release.
        # a release or finalizing a 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;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
    &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format:
        # &lt;code&gt;sites/&lt;var&gt;site-name&lt;/var&gt;/releases/&lt;var&gt;releaseID&lt;/var&gt;&lt;/code&gt;
        # This name is provided in the response body when you call the
        # [`CreateRelease`](sites.releases/create) endpoint.
    &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release.
        # &lt;br&gt;Specify a value for this field only when creating a `SITE_DISABLE`
        # type release.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Lists the releases that have been created on the specified site.

Args:
  parent: string, Required. The parent for which to list files, in the format:
&lt;code&gt;sites/&lt;var&gt;site-name&lt;/var&gt;&lt;/code&gt; (required)
  pageToken: string, The next_page_token from a previous request, if provided.
  pageSize: integer, The page size to return. Defaults to 100.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &quot;releases&quot;: [ # The list of hashes of files that still need to be uploaded, if any exist.
      { # A `Release` is a particular
          # [collection of configurations and files](sites.versions)
          # that is set to be public at a particular time.
        &quot;version&quot;: { # A `Version` is the collection of configuration and # Output only. The configuration and content that was released.
            # [static files](sites.versions.files) that determine how a site is displayed.
          &quot;deleteUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who `DELETED` the version.
              # a release or finalizing a 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;finalizeUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who `FINALIZED` the version.
              # a release or finalizing a 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;preview&quot;: { # Version preview configuration. If active and unexpired, # Version preview configuration for the site version. This configuration
              # specfies 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.
              # this version will be accessible via a custom URL even
              # if it is not the currently released 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;labels&quot;: { # The labels used for extra metadata and/or filtering.
            &quot;a_key&quot;: &quot;A String&quot;,
          },
          &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time at which the version was created.
          &quot;versionBytes&quot;: &quot;A String&quot;, # Output only. The total stored bytesize of the version.
              # &lt;br&gt;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;status&quot;: &quot;A String&quot;, # The deploy status of a version.
              # &lt;br&gt;
              # &lt;br&gt;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.
              # &lt;br&gt;
              # &lt;br&gt;Note that if you leave the version in the `CREATED` state for more
              # than 12&amp;nbsp;hours, the system will automatically mark the version as
              # `ABANDONED`.
              # &lt;br&gt;
              # &lt;br&gt;You can also change the status of a version to `DELETED` by calling the
              # [`DeleteVersion`](sites.versions/delete) endpoint.
          &quot;config&quot;: { # The configuration for how incoming requests to a site should be routed and # The configuration for the behavior of the site. This configuration exists
              # in the [`firebase.json`](/docs/cli/#the_firebasejson_file) file.
              # processed before serving content. The patterns are matched and applied
              # according to a specific
              # [priority order](/docs/hosting/full-config#hosting_priority_order).
            &quot;redirects&quot;: [ # A list of globs that will cause the response to redirect to another
                # location.
              { # A [`redirect`](/docs/hosting/full-config#redirects) represents the
                  # configuration for returning an HTTP redirect response given a matching
                  # request URL path.
                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
                    # pattern](/docs/hosting/full-config#glob_pattern_matching) 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;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression 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.
                    # &lt;br&gt;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:
                    # &lt;code&gt;&quot;glob&quot;: &quot;/:capture*&quot;,
                    # &lt;br&gt;&quot;statusCode&quot;: 301,
                    # &lt;br&gt;&quot;location&quot;: &quot;https://example.com/foo/:capture&quot;&lt;/code&gt;
              },
            ],
            &quot;headers&quot;: [ # A list of custom response headers that are added to the content if the
                # request URL path matches the glob.
              { # A [`header`](/docs/hosting/full-config#headers) defines custom headers to
                  # add to a response should the request URL path match the pattern.
                &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request
                    # URL path.
                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
                    # pattern](/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;appAssociation&quot;: &quot;A String&quot;, # How to handle well known App Association files.
            &quot;trailingSlashBehavior&quot;: &quot;A String&quot;, # Defines how to handle a trailing slash in the URL path.
            &quot;cleanUrls&quot;: True or False, # Defines whether to drop the file extension from uploaded files.
            &quot;rewrites&quot;: [ # A list of rewrites that will act as if the service were given the
                # destination URL.
              { # A [`rewrite`](/docs/hosting/full-config#rewrites) represents an internal
                  # content rewrite on the version. If the pattern matches, the request will be
                  # handled as if it were to the destination path specified in the
                  # configuration.
                &quot;regex&quot;: &quot;A String&quot;, # The user-supplied RE2 regular expression to match against the request
                    # URL path.
                &quot;dynamicLinks&quot;: True or False, # The request will be forwarded to Firebase Dynamic Links.
                &quot;run&quot;: { # A configured rewrite that directs requests to a Cloud Run service. If the # The request will be forwarded to Cloud Run.
                    # 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).
                  &quot;region&quot;: &quot;A String&quot;, # Optional. User-provided region where the Cloud Run service is hosted.&lt;br&gt;
                      # Defaults to `us-central1` if not supplied.
                  &quot;serviceId&quot;: &quot;A String&quot;, # Required. User-defined ID of the Cloud Run service.
                },
                &quot;glob&quot;: &quot;A String&quot;, # The user-supplied [glob
                    # pattern](/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;function&quot;: &quot;A String&quot;, # The function to proxy requests to. Must match the exported function
                    # name exactly.
              },
            ],
          },
          &quot;name&quot;: &quot;A String&quot;, # The unique identifier for a version, in the format:
              # &lt;code&gt;sites/&lt;var&gt;site-name&lt;/var&gt;/versions/&lt;var&gt;versionID&lt;/var&gt;&lt;/code&gt;
              # This name is provided in the response body when you call the
              # [`CreateVersion`](../sites.versions/create) endpoint.
          &quot;createUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who created the version.
              # a release or finalizing a 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.
              # &lt;br&gt;This value is calculated after a version is `FINALIZED`.
        },
        &quot;message&quot;: &quot;A String&quot;, # The deploy description when the release was created. The value can be up to
            # 512&amp;nbsp;characters.
        &quot;releaseUser&quot;: { # Contains metadata about the user who performed an action, such as creating # Output only. Identifies the user who created the release.
            # a release or finalizing a 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;releaseTime&quot;: &quot;A String&quot;, # Output only. The time at which the version is set to be public.
        &quot;name&quot;: &quot;A String&quot;, # Output only. The unique identifier for the release, in the format:
            # &lt;code&gt;sites/&lt;var&gt;site-name&lt;/var&gt;/releases/&lt;var&gt;releaseID&lt;/var&gt;&lt;/code&gt;
            # This name is provided in the response body when you call the
            # [`CreateRelease`](sites.releases/create) endpoint.
        &quot;type&quot;: &quot;A String&quot;, # Explains the reason for the release.
            # &lt;br&gt;Specify a value for this field only when creating a `SITE_DISABLE`
            # type release.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If there are additional releases remaining beyond the ones in this
        # response, then supply this token in the next
        # [`list`](../sites.versions.files/list) call to continue with the next set
        # of releases.
  }</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>

</body></html>