<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="#create">create(parent, body, versionId=None, x__xgafv=None, sizeBytes=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="#patch">patch(name, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified metadata for a version. Note that this method will</p>
<p class="toc_element">
  <code><a href="#populateFiles">populateFiles(parent, body, x__xgafv=None)</a></code></p>
<p class="firstline">Adds content files to a version.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(parent, body, versionId=None, x__xgafv=None, sizeBytes=None)</code>
  <pre>Creates a new version for a site.

Args:
  parent: string, Required. The parent to create the version for, in the format:
<code>sites/<var>site-name</var></code> (required)
  body: object, The request body. (required)
    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.
  "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`.
}

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

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.
    "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`.
  }</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:
<code>sites/<var>site-name</var>/versions/<var>versionID</var></code> (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="patch">patch(name, body, 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:
<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. (required)
  body: object, The request body. (required)
    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.
  "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`.
}

  updateMask: string, A set of field names from your [version](../sites.versions) that you want
to update.
<br>A field will be overwritten if, and only if, it's in the mask.
<br>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.
    "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`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="populateFiles">populateFiles(parent, body, x__xgafv=None)</code>
  <pre>Adds content files to a version.

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

{
    "files": { # 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.
      "a_key": "A String",
    },
  }

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

Returns:
  An object of the form:

    {
    "uploadRequiredHashes": [ # The content hashes of the specified files that need to be uploaded to the
        # specified endpoint.
      "A String",
    ],
    "uploadUrl": "A String", # The URL to which the files should be uploaded, in the format:
        # <br>"https://upload-firebasehosting.googleapis.com/upload/sites/<var>site-name</var>/versions/<var>versionID</var>/files".
        # <br>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>