<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="firebasedatabase_v1beta.html">Firebase Realtime Database Management API</a> . <a href="firebasedatabase_v1beta.projects.html">projects</a> . <a href="firebasedatabase_v1beta.projects.locations.html">locations</a> . <a href="firebasedatabase_v1beta.projects.locations.instances.html">instances</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, validateOnly=None, databaseId=None, x__xgafv=None)</a></code></p>
<p class="firstline">Requests that a new DatabaseInstance be created. The state of a successfully created DatabaseInstance is ACTIVE. Only available for projects on the Blaze plan. Projects can be upgraded using the Cloud Billing API https://cloud.google.com/billing/reference/rest/v1/projects/updateBillingInfo. Note that it might take a few minutes for billing enablement state to propagate to Firebase systems.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Marks a DatabaseInstance to be deleted. The DatabaseInstance will be purged within 30 days. The default database cannot be deleted. IDs for deleted database instances may never be recovered or re-used. The Database may only be deleted if it is already in a DISABLED state.</p>
<p class="toc_element">
  <code><a href="#disable">disable(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Disables a DatabaseInstance. The database can be re-enabled later using ReenableDatabaseInstance. When a database is disabled, all reads and writes are denied, including view access in the Firebase console.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the DatabaseInstance identified by the specified resource name.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists each DatabaseInstance associated with the specified parent project. The list items are returned in no particular order, but will be a consistent view of the database instances when additional requests are made with a `pageToken`. The resulting list contains instances in any STATE. The list results may be stale by a few seconds. Use GetDatabaseInstance for consistent reads.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#reenable">reenable(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Enables a DatabaseInstance. The database must have been disabled previously using DisableDatabaseInstance. The state of a successfully reenabled DatabaseInstance is ACTIVE.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, validateOnly=None, databaseId=None, x__xgafv=None)</code>
  <pre>Requests that a new DatabaseInstance be created. The state of a successfully created DatabaseInstance is ACTIVE. Only available for projects on the Blaze plan. Projects can be upgraded using the Cloud Billing API https://cloud.google.com/billing/reference/rest/v1/projects/updateBillingInfo. Note that it might take a few minutes for billing enablement state to propagate to Firebase systems.

Args:
  parent: string, The parent project for which to create a database instance, in the form: `projects/{project-number}/locations/{location-id}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Representation of a Realtime Database instance. Details on interacting with contents of a DatabaseInstance can be found at: https://firebase.google.com/docs/database/rest/start.
  &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
  &quot;databaseUrl&quot;: &quot;A String&quot;, # Immutable. The globally unique hostname of the database.
  &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}`. Currently the only supported location is &#x27;us-central1&#x27;.
  &quot;type&quot;: &quot;A String&quot;, # The database instance type. On creation only USER_DATABASE is allowed, which is also the default when omitted.
  &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
}

  validateOnly: boolean, When set to true, the request will be validated but not submitted.
  databaseId: string, The globally unique identifier of the database instance.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Representation of a Realtime Database instance. Details on interacting with contents of a DatabaseInstance can be found at: https://firebase.google.com/docs/database/rest/start.
    &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
    &quot;databaseUrl&quot;: &quot;A String&quot;, # Immutable. The globally unique hostname of the database.
    &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}`. Currently the only supported location is &#x27;us-central1&#x27;.
    &quot;type&quot;: &quot;A String&quot;, # The database instance type. On creation only USER_DATABASE is allowed, which is also the default when omitted.
    &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Marks a DatabaseInstance to be deleted. The DatabaseInstance will be purged within 30 days. The default database cannot be deleted. IDs for deleted database instances may never be recovered or re-used. The Database may only be deleted if it is already in a DISABLED state.

Args:
  name: string, The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Representation of a Realtime Database instance. Details on interacting with contents of a DatabaseInstance can be found at: https://firebase.google.com/docs/database/rest/start.
    &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
    &quot;databaseUrl&quot;: &quot;A String&quot;, # Immutable. The globally unique hostname of the database.
    &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}`. Currently the only supported location is &#x27;us-central1&#x27;.
    &quot;type&quot;: &quot;A String&quot;, # The database instance type. On creation only USER_DATABASE is allowed, which is also the default when omitted.
    &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="disable">disable(name, body=None, x__xgafv=None)</code>
  <pre>Disables a DatabaseInstance. The database can be re-enabled later using ReenableDatabaseInstance. When a database is disabled, all reads and writes are denied, including view access in the Firebase console.

Args:
  name: string, The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}` (required)
  body: object, The request body.
    The object takes the form of:

{ # The request sent to the DisableDatabaseInstance method.
  }

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

Returns:
  An object of the form:

    { # Representation of a Realtime Database instance. Details on interacting with contents of a DatabaseInstance can be found at: https://firebase.google.com/docs/database/rest/start.
    &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
    &quot;databaseUrl&quot;: &quot;A String&quot;, # Immutable. The globally unique hostname of the database.
    &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}`. Currently the only supported location is &#x27;us-central1&#x27;.
    &quot;type&quot;: &quot;A String&quot;, # The database instance type. On creation only USER_DATABASE is allowed, which is also the default when omitted.
    &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the DatabaseInstance identified by the specified resource name.

Args:
  name: string, The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}`. `database-id` is a globally unique identifier across all parent collections. For convenience, this method allows you to supply `-` as a wildcard character in place of specific collections under `projects` and `locations`. The resulting wildcarding form of the method is: `projects/-/locations/-/instances/{database-id}`. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Representation of a Realtime Database instance. Details on interacting with contents of a DatabaseInstance can be found at: https://firebase.google.com/docs/database/rest/start.
    &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
    &quot;databaseUrl&quot;: &quot;A String&quot;, # Immutable. The globally unique hostname of the database.
    &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}`. Currently the only supported location is &#x27;us-central1&#x27;.
    &quot;type&quot;: &quot;A String&quot;, # The database instance type. On creation only USER_DATABASE is allowed, which is also the default when omitted.
    &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists each DatabaseInstance associated with the specified parent project. The list items are returned in no particular order, but will be a consistent view of the database instances when additional requests are made with a `pageToken`. The resulting list contains instances in any STATE. The list results may be stale by a few seconds. Use GetDatabaseInstance for consistent reads.

Args:
  parent: string, The parent project for which to list database instances, in the form: `projects/{project-number}/locations/{location-id}` To list across all locations, use a parent in the form: `projects/{project-number}/locations/-` (required)
  pageSize: integer, The maximum number of database instances to return in the response. The server may return fewer than this at its discretion. If no value is specified (or too large a value is specified), then the server will impose its own limit.
  pageToken: string, Token returned from a previous call to `ListDatabaseInstances` indicating where in the set of database instances to resume listing.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response from the ListDatabaseInstances method.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # If the result list is too large to fit in a single response, then a token is returned. If the string is empty, then this response is the last page of results. This token can be used in a subsequent call to `ListDatabaseInstances` to find the next group of database instances. Page tokens are short-lived and should not be persisted.
    &quot;instances&quot;: [ # List of each DatabaseInstance that is in the parent Firebase project.
      { # Representation of a Realtime Database instance. Details on interacting with contents of a DatabaseInstance can be found at: https://firebase.google.com/docs/database/rest/start.
        &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
        &quot;databaseUrl&quot;: &quot;A String&quot;, # Immutable. The globally unique hostname of the database.
        &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}`. Currently the only supported location is &#x27;us-central1&#x27;.
        &quot;type&quot;: &quot;A String&quot;, # The database instance type. On creation only USER_DATABASE is allowed, which is also the default when omitted.
        &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
      },
    ],
  }</pre>
</div>

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

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

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

<div class="method">
    <code class="details" id="reenable">reenable(name, body=None, x__xgafv=None)</code>
  <pre>Enables a DatabaseInstance. The database must have been disabled previously using DisableDatabaseInstance. The state of a successfully reenabled DatabaseInstance is ACTIVE.

Args:
  name: string, The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}` (required)
  body: object, The request body.
    The object takes the form of:

{ # The request sent to the ReenableDatabaseInstance method.
  }

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

Returns:
  An object of the form:

    { # Representation of a Realtime Database instance. Details on interacting with contents of a DatabaseInstance can be found at: https://firebase.google.com/docs/database/rest/start.
    &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
    &quot;databaseUrl&quot;: &quot;A String&quot;, # Immutable. The globally unique hostname of the database.
    &quot;name&quot;: &quot;A String&quot;, # The fully qualified resource name of the database instance, in the form: `projects/{project-number}/locations/{location-id}/instances/{database-id}`. Currently the only supported location is &#x27;us-central1&#x27;.
    &quot;type&quot;: &quot;A String&quot;, # The database instance type. On creation only USER_DATABASE is allowed, which is also the default when omitted.
    &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  }</pre>
</div>

</body></html>