<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="firebase_v1beta1.html">Firebase Management API</a> . <a href="firebase_v1beta1.availableProjects.html">availableProjects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(pageToken=None, pageSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Returns a list of [Google Cloud Platform (GCP) `Projects`]</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="list">list(pageToken=None, pageSize=None, x__xgafv=None)</code>
  <pre>Returns a list of [Google Cloud Platform (GCP) `Projects`]
(https://cloud.google.com/resource-manager/reference/rest/v1/projects)
that are available to have Firebase resources added to them.
&lt;br&gt;
&lt;br&gt;A GCP `Project` will only be returned if:
&lt;ol&gt;
  &lt;li&gt;&lt;p&gt;The caller has sufficient
         [Google IAM](https://cloud.google.com/iam) permissions to call
         AddFirebase.&lt;/p&gt;&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;The GCP `Project` is not already a FirebaseProject.&lt;/p&gt;&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;The GCP `Project` is not in an Organization which has policies
         that prevent Firebase resources from being added.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

Args:
  pageToken: string, Token returned from a previous call to `ListAvailableProjects`
indicating where in the set of GCP `Projects` to resume listing.
  pageSize: integer, The maximum number of GCP `Projects` to return in the response.
&lt;br&gt;
&lt;br&gt;The server may return fewer than this value at its discretion.
If no value is specified (or too large a value is specified), the server
will impose its own limit.
&lt;br&gt;
&lt;br&gt;This value cannot be negative.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    &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.
        # &lt;br&gt;
        # &lt;br&gt;This token can be used in a subsequent calls to `ListAvailableProjects`
        # to find the next group of GCP `Projects`.
        # &lt;br&gt;
        # &lt;br&gt;Page tokens are short-lived and should not be persisted.
    &quot;projectInfo&quot;: [ # The list of GCP `Projects` which can have Firebase resources added to them.
      { # A reference to a Google Cloud Platform (GCP) `Project`.
        &quot;displayName&quot;: &quot;A String&quot;, # The user-assigned display name of the GCP `Project`, for example:
            # &lt;code&gt;My App&lt;/code&gt;
        &quot;locationId&quot;: &quot;A String&quot;, # The ID of the project&#x27;s default GCP resource location. The location is one
            # of the available
            # [GCP resource
            # locations](https://firebase.google.com/docs/projects/locations). &lt;br&gt; &lt;br&gt;
            # Not all projects will have this field populated. If it is not populated, it
            # means that the project does not yet have a default GCP resource location.
            # To set your project&#x27;s default GCP resource location, call
            # [`FinalizeDefaultLocation`](../projects.defaultLocation/finalize) after you
            # add Firebase resources to your project.
        &quot;project&quot;: &quot;A String&quot;, # The resource name of the GCP `Project` to which Firebase resources can be
            # added, in the format:
            # &lt;br&gt;&lt;code&gt;projects/&lt;var&gt;projectId&lt;/var&gt;&lt;/code&gt;
      },
    ],
  }</pre>
</div>

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

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

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

</body></html>