<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.releases.html">releases</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body, 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, x__xgafv=None, pageSize=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, versionName=None, x__xgafv=None)</code>
  <pre>Creates a new release which makes the content of the specified version
actively display on the site.

Args:
  parent: string, The site that the release belongs to, in the format:
<code>sites/<var>site-name</var></code> (required)
  body: object, The request body. (required)
    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.
    "name": "A String", # Output only. The unique identifier for the release, in the format:
        # <code>sites/<var>site-name</var>/releases/<var>releaseID</var></code>
        # This name is provided in the response body when you call the
        # [`CreateRelease`](sites.releases/create) endpoint.
    "version": { # 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.
      "status": "A String", # The deploy status of a version.
          # <br>
          # <br>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.
          # <br>
          # <br>Note that if you leave the version in the `CREATED` state for more
          # than 12&nbsp;hours, the system will automatically mark the version as
          # `ABANDONED`.
          # <br>
          # <br>You can also change the status of a version to `DELETED` by calling the
          # [`DeleteVersion`](sites.versions/delete) endpoint.
      "deleteUser": { # 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.
        "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
            # changed their email address or deleted their account.
        "email": "A String", # The email address of the user when the user performed the action.
      },
      "name": "A String", # The unique identifier for a version, in the format:
          # <code>sites/<var>site-name</var>/versions/<var>versionID</var></code>
          # This name is provided in the response body when you call the
          # [`CreateVersion`](../sites.versions/create) endpoint.
      "versionBytes": "A String", # Output only. The total stored bytesize of the version.
          # <br>This value is calculated after a version is `FINALIZED`.
      "labels": { # The labels used for extra metadata and/or filtering.
        "a_key": "A String",
      },
      "finalizeUser": { # 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.
        "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
            # changed their email address or deleted their account.
        "email": "A String", # The email address of the user when the user performed the action.
      },
      "finalizeTime": "A String", # Output only. The time at which the version was `FINALIZED`.
      "deleteTime": "A String", # Output only. The time at which the version was `DELETED`.
      "createUser": { # 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.
        "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
            # changed their email address or deleted their account.
        "email": "A String", # The email address of the user when the user performed the action.
      },
      "config": { # 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).
        "redirects": [ # 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.
            "glob": "A String", # Required. The user-supplied
                # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                # against the request URL path.
            "location": "A String", # Required. The value to put in the HTTP location header of the response.
                # <br>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:
                # <code>"glob": "/:capture*",
                # <br>"statusCode": 301,
                # <br>"location": "https://example.com/foo/:capture"</code>
            "statusCode": 42, # Required. The status HTTP code to return in the response. It must be a
                # valid 3xx status code.
          },
        ],
        "appAssociation": "A String", # How to handle well known App Association files.
        "trailingSlashBehavior": "A String", # Defines how to handle a trailing slash in the URL path.
        "cleanUrls": True or False, # Defines whether to drop the file extension from uploaded files.
        "headers": [ # 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.
            "headers": { # Required. The additional headers to add to the response.
              "a_key": "A String",
            },
            "glob": "A String", # Required. The user-supplied
                # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                # against the request URL path.
          },
        ],
        "rewrites": [ # 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.
            "function": "A String", # The function to proxy requests to. Must match the exported function
                # name exactly.
            "path": "A String", # The URL path to rewrite the request to.
            "glob": "A String", # Required. The user-supplied
                # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                # against the request URL path.
            "run": { # 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).
              "region": "A String", # Optional. User-provided region where the Cloud Run service is hosted.<br>
                  # Defaults to `us-central1` if not supplied.
              "serviceId": "A String", # Required. User-defined ID of the Cloud Run service.
            },
            "dynamicLinks": True or False, # The request will be forwarded to Firebase Dynamic Links.
          },
        ],
      },
      "createTime": "A String", # Output only. The time at which the version was created.
      "fileCount": "A String", # Output only. The total number of files associated with the version.
          # <br>This value is calculated after a version is `FINALIZED`.
    },
    "releaseUser": { # 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.
      "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
          # changed their email address or deleted their account.
      "email": "A String", # The email address of the user when the user performed the action.
    },
    "message": "A String", # The deploy description when the release was created. The value can be up to
        # 512&nbsp;characters.
    "type": "A String", # Explains the reason for the release.
        # <br>Specify a value for this field only when creating a `SITE_DISABLE`
        # type release.
    "releaseTime": "A String", # Output only. The time at which the version is set to be public.
  }

  versionName: string, The unique identifier for a version, in the format:
<code>/sites/<var>site-name</var>/versions/<var>versionID</var></code>
The <var>site-name</var> in this version identifier must match the
<var>site-name</var> in the `parent` parameter.
<br>
<br>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.
      "name": "A String", # Output only. The unique identifier for the release, in the format:
          # <code>sites/<var>site-name</var>/releases/<var>releaseID</var></code>
          # This name is provided in the response body when you call the
          # [`CreateRelease`](sites.releases/create) endpoint.
      "version": { # 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.
        "status": "A String", # The deploy status of a version.
            # <br>
            # <br>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.
            # <br>
            # <br>Note that if you leave the version in the `CREATED` state for more
            # than 12&nbsp;hours, the system will automatically mark the version as
            # `ABANDONED`.
            # <br>
            # <br>You can also change the status of a version to `DELETED` by calling the
            # [`DeleteVersion`](sites.versions/delete) endpoint.
        "deleteUser": { # 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.
          "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
              # changed their email address or deleted their account.
          "email": "A String", # The email address of the user when the user performed the action.
        },
        "name": "A String", # The unique identifier for a version, in the format:
            # <code>sites/<var>site-name</var>/versions/<var>versionID</var></code>
            # This name is provided in the response body when you call the
            # [`CreateVersion`](../sites.versions/create) endpoint.
        "versionBytes": "A String", # Output only. The total stored bytesize of the version.
            # <br>This value is calculated after a version is `FINALIZED`.
        "labels": { # The labels used for extra metadata and/or filtering.
          "a_key": "A String",
        },
        "finalizeUser": { # 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.
          "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
              # changed their email address or deleted their account.
          "email": "A String", # The email address of the user when the user performed the action.
        },
        "finalizeTime": "A String", # Output only. The time at which the version was `FINALIZED`.
        "deleteTime": "A String", # Output only. The time at which the version was `DELETED`.
        "createUser": { # 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.
          "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
              # changed their email address or deleted their account.
          "email": "A String", # The email address of the user when the user performed the action.
        },
        "config": { # 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).
          "redirects": [ # 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.
              "glob": "A String", # Required. The user-supplied
                  # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                  # against the request URL path.
              "location": "A String", # Required. The value to put in the HTTP location header of the response.
                  # <br>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:
                  # <code>"glob": "/:capture*",
                  # <br>"statusCode": 301,
                  # <br>"location": "https://example.com/foo/:capture"</code>
              "statusCode": 42, # Required. The status HTTP code to return in the response. It must be a
                  # valid 3xx status code.
            },
          ],
          "appAssociation": "A String", # How to handle well known App Association files.
          "trailingSlashBehavior": "A String", # Defines how to handle a trailing slash in the URL path.
          "cleanUrls": True or False, # Defines whether to drop the file extension from uploaded files.
          "headers": [ # 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.
              "headers": { # Required. The additional headers to add to the response.
                "a_key": "A String",
              },
              "glob": "A String", # Required. The user-supplied
                  # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                  # against the request URL path.
            },
          ],
          "rewrites": [ # 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.
              "function": "A String", # The function to proxy requests to. Must match the exported function
                  # name exactly.
              "path": "A String", # The URL path to rewrite the request to.
              "glob": "A String", # Required. The user-supplied
                  # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                  # against the request URL path.
              "run": { # 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).
                "region": "A String", # Optional. User-provided region where the Cloud Run service is hosted.<br>
                    # Defaults to `us-central1` if not supplied.
                "serviceId": "A String", # Required. User-defined ID of the Cloud Run service.
              },
              "dynamicLinks": True or False, # The request will be forwarded to Firebase Dynamic Links.
            },
          ],
        },
        "createTime": "A String", # Output only. The time at which the version was created.
        "fileCount": "A String", # Output only. The total number of files associated with the version.
            # <br>This value is calculated after a version is `FINALIZED`.
      },
      "releaseUser": { # 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.
        "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
            # changed their email address or deleted their account.
        "email": "A String", # The email address of the user when the user performed the action.
      },
      "message": "A String", # The deploy description when the release was created. The value can be up to
          # 512&nbsp;characters.
      "type": "A String", # Explains the reason for the release.
          # <br>Specify a value for this field only when creating a `SITE_DISABLE`
          # type release.
      "releaseTime": "A String", # Output only. The time at which the version is set to be public.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, x__xgafv=None, pageSize=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:
<code>sites/<var>site-name</var></code> (required)
  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
  pageSize: integer, The page size to return. Defaults to 100.

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # 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.
    "releases": [ # 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.
          "name": "A String", # Output only. The unique identifier for the release, in the format:
              # <code>sites/<var>site-name</var>/releases/<var>releaseID</var></code>
              # This name is provided in the response body when you call the
              # [`CreateRelease`](sites.releases/create) endpoint.
          "version": { # 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.
            "status": "A String", # The deploy status of a version.
                # <br>
                # <br>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.
                # <br>
                # <br>Note that if you leave the version in the `CREATED` state for more
                # than 12&nbsp;hours, the system will automatically mark the version as
                # `ABANDONED`.
                # <br>
                # <br>You can also change the status of a version to `DELETED` by calling the
                # [`DeleteVersion`](sites.versions/delete) endpoint.
            "deleteUser": { # 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.
              "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
                  # changed their email address or deleted their account.
              "email": "A String", # The email address of the user when the user performed the action.
            },
            "name": "A String", # The unique identifier for a version, in the format:
                # <code>sites/<var>site-name</var>/versions/<var>versionID</var></code>
                # This name is provided in the response body when you call the
                # [`CreateVersion`](../sites.versions/create) endpoint.
            "versionBytes": "A String", # Output only. The total stored bytesize of the version.
                # <br>This value is calculated after a version is `FINALIZED`.
            "labels": { # The labels used for extra metadata and/or filtering.
              "a_key": "A String",
            },
            "finalizeUser": { # 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.
              "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
                  # changed their email address or deleted their account.
              "email": "A String", # The email address of the user when the user performed the action.
            },
            "finalizeTime": "A String", # Output only. The time at which the version was `FINALIZED`.
            "deleteTime": "A String", # Output only. The time at which the version was `DELETED`.
            "createUser": { # 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.
              "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
                  # changed their email address or deleted their account.
              "email": "A String", # The email address of the user when the user performed the action.
            },
            "config": { # 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).
              "redirects": [ # 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.
                  "glob": "A String", # Required. The user-supplied
                      # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                      # against the request URL path.
                  "location": "A String", # Required. The value to put in the HTTP location header of the response.
                      # <br>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:
                      # <code>"glob": "/:capture*",
                      # <br>"statusCode": 301,
                      # <br>"location": "https://example.com/foo/:capture"</code>
                  "statusCode": 42, # Required. The status HTTP code to return in the response. It must be a
                      # valid 3xx status code.
                },
              ],
              "appAssociation": "A String", # How to handle well known App Association files.
              "trailingSlashBehavior": "A String", # Defines how to handle a trailing slash in the URL path.
              "cleanUrls": True or False, # Defines whether to drop the file extension from uploaded files.
              "headers": [ # 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.
                  "headers": { # Required. The additional headers to add to the response.
                    "a_key": "A String",
                  },
                  "glob": "A String", # Required. The user-supplied
                      # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                      # against the request URL path.
                },
              ],
              "rewrites": [ # 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.
                  "function": "A String", # The function to proxy requests to. Must match the exported function
                      # name exactly.
                  "path": "A String", # The URL path to rewrite the request to.
                  "glob": "A String", # Required. The user-supplied
                      # [glob pattern](/docs/hosting/full-config#glob_pattern_matching) to match
                      # against the request URL path.
                  "run": { # 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).
                    "region": "A String", # Optional. User-provided region where the Cloud Run service is hosted.<br>
                        # Defaults to `us-central1` if not supplied.
                    "serviceId": "A String", # Required. User-defined ID of the Cloud Run service.
                  },
                  "dynamicLinks": True or False, # The request will be forwarded to Firebase Dynamic Links.
                },
              ],
            },
            "createTime": "A String", # Output only. The time at which the version was created.
            "fileCount": "A String", # Output only. The total number of files associated with the version.
                # <br>This value is calculated after a version is `FINALIZED`.
          },
          "releaseUser": { # 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.
            "imageUrl": "A String", # A profile image URL for the user. May not be present if the user has
                # changed their email address or deleted their account.
            "email": "A String", # The email address of the user when the user performed the action.
          },
          "message": "A String", # The deploy description when the release was created. The value can be up to
              # 512&nbsp;characters.
          "type": "A String", # Explains the reason for the release.
              # <br>Specify a value for this field only when creating a `SITE_DISABLE`
              # type release.
          "releaseTime": "A String", # Output only. The time at which the version is set to be public.
        },
    ],
  }</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 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>