<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, databaseId=None, validateOnly=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, databaseId=None, validateOnly=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;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}`.
  &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
  &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.
}

  databaseId: string, The globally unique identifier of the database instance.
  validateOnly: boolean, When set to true, the request will be validated but not submitted.
  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;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}`.
  &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
  &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.
}</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;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}`.
  &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
  &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.
}</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;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}`.
  &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
  &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.
}</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;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}`.
  &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
  &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.
}</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;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;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}`.
      &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
      &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
      &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;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.
}</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;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}`.
  &quot;project&quot;: &quot;A String&quot;, # The resource name of the project this instance belongs to. For example: `projects/{project-number}`.
  &quot;state&quot;: &quot;A String&quot;, # The database&#x27;s lifecycle state. Read-only.
  &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.
}</pre>
</div>

</body></html>