<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="firestore_v1beta1.html">Cloud Firestore API</a> . <a href="firestore_v1beta1.projects.html">projects</a> . <a href="firestore_v1beta1.projects.databases.html">databases</a> . <a href="firestore_v1beta1.projects.databases.indexes.html">indexes</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates the specified index.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes an index.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets an index.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageToken=None, pageSize=None, filter=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the indexes that match the specified filters.</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=None, x__xgafv=None)</code>
  <pre>Creates the specified index.
A newly created index&#x27;s initial state is `CREATING`. On completion of the
returned google.longrunning.Operation, the state will be `READY`.
If the index already exists, the call will return an `ALREADY_EXISTS`
status.

During creation, the process could result in an error, in which case the
index will move to the `ERROR` state. The process can be recovered by
fixing the data that caused the error, removing the index with
delete, then re-creating the index with
create.

Indexes with a single field cannot be created.

Args:
  parent: string, The name of the database this index will apply to. For example:
`projects/{project_id}/databases/{database_id}` (required)
  body: object, The request body.
    The object takes the form of:

{ # An index definition.
  &quot;name&quot;: &quot;A String&quot;, # The resource name of the index.
      # Output only.
  &quot;collectionId&quot;: &quot;A String&quot;, # The collection ID to which this index applies. Required.
  &quot;fields&quot;: [ # The fields to index.
    { # A field of an index.
      &quot;fieldPath&quot;: &quot;A String&quot;, # The path of the field. Must match the field path specification described
          # by google.firestore.v1beta1.Document.fields.
          # Special field path `__name__` may be used by itself or at the end of a
          # path. `__type__` may be used only at the end of path.
      &quot;mode&quot;: &quot;A String&quot;, # The field&#x27;s mode.
    },
  ],
  &quot;state&quot;: &quot;A String&quot;, # The state of the index.
      # Output only.
}

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

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    &quot;done&quot;: True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    &quot;response&quot;: { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;name&quot;: &quot;A String&quot;, # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
    &quot;error&quot;: { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
      &quot;message&quot;: &quot;A String&quot;, # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    &quot;metadata&quot;: { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes an index.

Args:
  name: string, The index name. For example:
`projects/{project_id}/databases/{database_id}/indexes/{index_id}` (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="get">get(name, x__xgafv=None)</code>
  <pre>Gets an index.

Args:
  name: string, The name of the index. For example:
`projects/{project_id}/databases/{database_id}/indexes/{index_id}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An index definition.
    &quot;name&quot;: &quot;A String&quot;, # The resource name of the index.
        # Output only.
    &quot;collectionId&quot;: &quot;A String&quot;, # The collection ID to which this index applies. Required.
    &quot;fields&quot;: [ # The fields to index.
      { # A field of an index.
        &quot;fieldPath&quot;: &quot;A String&quot;, # The path of the field. Must match the field path specification described
            # by google.firestore.v1beta1.Document.fields.
            # Special field path `__name__` may be used by itself or at the end of a
            # path. `__type__` may be used only at the end of path.
        &quot;mode&quot;: &quot;A String&quot;, # The field&#x27;s mode.
      },
    ],
    &quot;state&quot;: &quot;A String&quot;, # The state of the index.
        # Output only.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageToken=None, pageSize=None, filter=None, x__xgafv=None)</code>
  <pre>Lists the indexes that match the specified filters.

Args:
  parent: string, The database name. For example:
`projects/{project_id}/databases/{database_id}` (required)
  pageToken: string, The standard List page token.
  pageSize: integer, The standard List page size.
  filter: string, A parameter
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response for FirestoreAdmin.ListIndexes.
    &quot;indexes&quot;: [ # The indexes.
      { # An index definition.
        &quot;name&quot;: &quot;A String&quot;, # The resource name of the index.
            # Output only.
        &quot;collectionId&quot;: &quot;A String&quot;, # The collection ID to which this index applies. Required.
        &quot;fields&quot;: [ # The fields to index.
          { # A field of an index.
            &quot;fieldPath&quot;: &quot;A String&quot;, # The path of the field. Must match the field path specification described
                # by google.firestore.v1beta1.Document.fields.
                # Special field path `__name__` may be used by itself or at the end of a
                # path. `__type__` may be used only at the end of path.
            &quot;mode&quot;: &quot;A String&quot;, # The field&#x27;s mode.
          },
        ],
        &quot;state&quot;: &quot;A String&quot;, # The state of the index.
            # Output only.
      },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # The standard List next-page token.
  }</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>