<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_v1beta2.html">Cloud Firestore API</a> . <a href="firestore_v1beta2.projects.html">projects</a> . <a href="firestore_v1beta2.projects.databases.html">databases</a> . <a href="firestore_v1beta2.projects.databases.collectionGroups.html">collectionGroups</a> . <a href="firestore_v1beta2.projects.databases.collectionGroups.fields.html">fields</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the metadata and configuration for a Field.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None, filter=None)</a></code></p>
<p class="firstline">Lists the field configuration and metadata for this database.</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="#patch">patch(name, body, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a field configuration. Currently, field updates apply only to</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the metadata and configuration for a Field.

Args:
  name: string, A name of the form
`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_id}` (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a single field in the database.
        #
        # Fields are grouped by their "Collection Group", which represent all
        # collections in the database with the same id.
      "indexConfig": { # The index configuration for this field. # The index configuration for this field. If unset, field indexing will
          # revert to the configuration defined by the `ancestor_field`. To
          # explicitly remove all indexes for this field, specify an index config
          # with an empty list of indexes.
        "reverting": True or False, # Output only
            # When true, the `Field`'s index configuration is in the process of being
            # reverted. Once complete, the index config will transition to the same
            # state as the field specified by `ancestor_field`, at which point
            # `uses_ancestor_config` will be `true` and `reverting` will be `false`.
        "usesAncestorConfig": True or False, # Output only.
            # When true, the `Field`'s index configuration is set from the
            # configuration specified by the `ancestor_field`.
            # When false, the `Field`'s index configuration is defined explicitly.
        "ancestorField": "A String", # Output only.
            # Specifies the resource name of the `Field` from which this field's
            # index configuration is set (when `uses_ancestor_config` is true),
            # or from which it *would* be set if this field had no index configuration
            # (when `uses_ancestor_config` is false).
        "indexes": [ # The indexes supported for this field.
          { # Cloud Firestore indexes enable simple and complex queries against
              # documents in a database.
            "fields": [ # The fields supported by this index.
                #
                # For composite indexes, this is always 2 or more fields.
                # The last field entry is always for the field path `__name__`. If, on
                # creation, `__name__` was not specified as the last field, it will be added
                # automatically with the same direction as that of the last field defined. If
                # the final field in a composite index is not directional, the `__name__`
                # will be ordered ASCENDING (unless explicitly specified).
                #
                # For single field indexes, this will always be exactly one entry with a
                # field path equal to the field path of the associated field.
              { # A field in an index.
                  # The field_path describes which field is indexed, the value_mode describes
                  # how the field value is indexed.
                "fieldPath": "A String", # Can be __name__.
                    # For single field indexes, this must match the name of the field or may
                    # be omitted.
                "order": "A String", # Indicates that this field supports ordering by the specified order or
                    # comparing using =, <, <=, >, >=.
                "arrayConfig": "A String", # Indicates that this field supports operations on `array_value`s.
              },
            ],
            "queryScope": "A String", # Indexes with a collection query scope specified allow queries
                # against a collection that is the child of a specific document, specified at
                # query time, and that has the same collection id.
                #
                # Indexes with a collection group query scope specified allow queries against
                # all collections descended from a specific document, specified at query
                # time, and that have the same collection id as this index.
            "state": "A String", # Output only.
                # The serving state of the index.
            "name": "A String", # Output only.
                # A server defined name for this index.
                # The form of this name for composite indexes will be:
                # `projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{composite_index_id}`
                # For single field indexes, this field will be empty.
          },
        ],
      },
      "name": "A String", # A field name of the form
          # `projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_path}`
          #
          # A field path may be a simple field name, e.g. `address` or a path to fields
          # within map_value , e.g. `address.city`,
          # or a special field path. The only valid special field is `*`, which
          # represents any field.
          #
          # Field paths may be quoted using ` (backtick). The only character that needs
          # to be escaped within a quoted field path is the backtick character itself,
          # escaped using a backslash. Special characters in field paths that
          # must be quoted include: `*`, `.`,
          # ``` (backtick), `[`, `]`, as well as any ascii symbolic characters.
          #
          # Examples:
          # (Note: Comments here are written in markdown syntax, so there is an
          #  additional layer of backticks to represent a code block)
          # `\`address.city\`` represents a field named `address.city`, not the map key
          # `city` in the field `address`.
          # `\`*\`` represents a field named `*`, not any field.
          #
          # A special `Field` contains the default indexing settings for all fields.
          # This field's resource name is:
          # `projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`
          # Indexes defined on this `Field` will be applied to all fields which do not
          # have their own `Field` index configuration.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None, filter=None)</code>
  <pre>Lists the field configuration and metadata for this database.

Currently, FirestoreAdmin.ListFields only supports listing fields
that have been explicitly overridden. To issue this query, call
FirestoreAdmin.ListFields with the filter set to
`indexConfig.usesAncestorConfig:false`.

Args:
  parent: string, A parent name of the form
`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}` (required)
  pageSize: integer, The number of results to return.
  pageToken: string, A page token, returned from a previous call to
FirestoreAdmin.ListFields, that may be used to get the next
page of results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  filter: string, The filter to apply to list results. Currently,
FirestoreAdmin.ListFields only supports listing fields
that have been explicitly overridden. To issue this query, call
FirestoreAdmin.ListFields with the filter set to
`indexConfig.usesAncestorConfig:false`.

Returns:
  An object of the form:

    { # The response for FirestoreAdmin.ListFields.
    "nextPageToken": "A String", # A page token that may be used to request another page of results. If blank,
        # this is the last page.
    "fields": [ # The requested fields.
      { # Represents a single field in the database.
            #
            # Fields are grouped by their "Collection Group", which represent all
            # collections in the database with the same id.
          "indexConfig": { # The index configuration for this field. # The index configuration for this field. If unset, field indexing will
              # revert to the configuration defined by the `ancestor_field`. To
              # explicitly remove all indexes for this field, specify an index config
              # with an empty list of indexes.
            "reverting": True or False, # Output only
                # When true, the `Field`'s index configuration is in the process of being
                # reverted. Once complete, the index config will transition to the same
                # state as the field specified by `ancestor_field`, at which point
                # `uses_ancestor_config` will be `true` and `reverting` will be `false`.
            "usesAncestorConfig": True or False, # Output only.
                # When true, the `Field`'s index configuration is set from the
                # configuration specified by the `ancestor_field`.
                # When false, the `Field`'s index configuration is defined explicitly.
            "ancestorField": "A String", # Output only.
                # Specifies the resource name of the `Field` from which this field's
                # index configuration is set (when `uses_ancestor_config` is true),
                # or from which it *would* be set if this field had no index configuration
                # (when `uses_ancestor_config` is false).
            "indexes": [ # The indexes supported for this field.
              { # Cloud Firestore indexes enable simple and complex queries against
                  # documents in a database.
                "fields": [ # The fields supported by this index.
                    #
                    # For composite indexes, this is always 2 or more fields.
                    # The last field entry is always for the field path `__name__`. If, on
                    # creation, `__name__` was not specified as the last field, it will be added
                    # automatically with the same direction as that of the last field defined. If
                    # the final field in a composite index is not directional, the `__name__`
                    # will be ordered ASCENDING (unless explicitly specified).
                    #
                    # For single field indexes, this will always be exactly one entry with a
                    # field path equal to the field path of the associated field.
                  { # A field in an index.
                      # The field_path describes which field is indexed, the value_mode describes
                      # how the field value is indexed.
                    "fieldPath": "A String", # Can be __name__.
                        # For single field indexes, this must match the name of the field or may
                        # be omitted.
                    "order": "A String", # Indicates that this field supports ordering by the specified order or
                        # comparing using =, <, <=, >, >=.
                    "arrayConfig": "A String", # Indicates that this field supports operations on `array_value`s.
                  },
                ],
                "queryScope": "A String", # Indexes with a collection query scope specified allow queries
                    # against a collection that is the child of a specific document, specified at
                    # query time, and that has the same collection id.
                    #
                    # Indexes with a collection group query scope specified allow queries against
                    # all collections descended from a specific document, specified at query
                    # time, and that have the same collection id as this index.
                "state": "A String", # Output only.
                    # The serving state of the index.
                "name": "A String", # Output only.
                    # A server defined name for this index.
                    # The form of this name for composite indexes will be:
                    # `projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{composite_index_id}`
                    # For single field indexes, this field will be empty.
              },
            ],
          },
          "name": "A String", # A field name of the form
              # `projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_path}`
              #
              # A field path may be a simple field name, e.g. `address` or a path to fields
              # within map_value , e.g. `address.city`,
              # or a special field path. The only valid special field is `*`, which
              # represents any field.
              #
              # Field paths may be quoted using ` (backtick). The only character that needs
              # to be escaped within a quoted field path is the backtick character itself,
              # escaped using a backslash. Special characters in field paths that
              # must be quoted include: `*`, `.`,
              # ``` (backtick), `[`, `]`, as well as any ascii symbolic characters.
              #
              # Examples:
              # (Note: Comments here are written in markdown syntax, so there is an
              #  additional layer of backticks to represent a code block)
              # `\`address.city\`` represents a field named `address.city`, not the map key
              # `city` in the field `address`.
              # `\`*\`` represents a field named `*`, not any field.
              #
              # A special `Field` contains the default indexing settings for all fields.
              # This field's resource name is:
              # `projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`
              # Indexes defined on this `Field` will be applied to all fields which do not
              # have their own `Field` index configuration.
        },
    ],
  }</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 'execute()' 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="patch">patch(name, body, updateMask=None, x__xgafv=None)</code>
  <pre>Updates a field configuration. Currently, field updates apply only to
single field index configuration. However, calls to
FirestoreAdmin.UpdateField should provide a field mask to avoid
changing any configuration that the caller isn't aware of. The field mask
should be specified as: `{ paths: "index_config" }`.

This call returns a google.longrunning.Operation which may be used to
track the status of the field update. The metadata for
the operation will be the type FieldOperationMetadata.

To configure the default field settings for the database, use
the special `Field` with resource name:
`projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`.

Args:
  name: string, A field name of the form
`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_path}`

A field path may be a simple field name, e.g. `address` or a path to fields
within map_value , e.g. `address.city`,
or a special field path. The only valid special field is `*`, which
represents any field.

Field paths may be quoted using ` (backtick). The only character that needs
to be escaped within a quoted field path is the backtick character itself,
escaped using a backslash. Special characters in field paths that
must be quoted include: `*`, `.`,
``` (backtick), `[`, `]`, as well as any ascii symbolic characters.

Examples:
(Note: Comments here are written in markdown syntax, so there is an
 additional layer of backticks to represent a code block)
`\`address.city\`` represents a field named `address.city`, not the map key
`city` in the field `address`.
`\`*\`` represents a field named `*`, not any field.

A special `Field` contains the default indexing settings for all fields.
This field's resource name is:
`projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`
Indexes defined on this `Field` will be applied to all fields which do not
have their own `Field` index configuration. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents a single field in the database.
      # 
      # Fields are grouped by their "Collection Group", which represent all
      # collections in the database with the same id.
    "indexConfig": { # The index configuration for this field. # The index configuration for this field. If unset, field indexing will
        # revert to the configuration defined by the `ancestor_field`. To
        # explicitly remove all indexes for this field, specify an index config
        # with an empty list of indexes.
      "reverting": True or False, # Output only
          # When true, the `Field`'s index configuration is in the process of being
          # reverted. Once complete, the index config will transition to the same
          # state as the field specified by `ancestor_field`, at which point
          # `uses_ancestor_config` will be `true` and `reverting` will be `false`.
      "usesAncestorConfig": True or False, # Output only.
          # When true, the `Field`'s index configuration is set from the
          # configuration specified by the `ancestor_field`.
          # When false, the `Field`'s index configuration is defined explicitly.
      "ancestorField": "A String", # Output only.
          # Specifies the resource name of the `Field` from which this field's
          # index configuration is set (when `uses_ancestor_config` is true),
          # or from which it *would* be set if this field had no index configuration
          # (when `uses_ancestor_config` is false).
      "indexes": [ # The indexes supported for this field.
        { # Cloud Firestore indexes enable simple and complex queries against
            # documents in a database.
          "fields": [ # The fields supported by this index.
              #
              # For composite indexes, this is always 2 or more fields.
              # The last field entry is always for the field path `__name__`. If, on
              # creation, `__name__` was not specified as the last field, it will be added
              # automatically with the same direction as that of the last field defined. If
              # the final field in a composite index is not directional, the `__name__`
              # will be ordered ASCENDING (unless explicitly specified).
              #
              # For single field indexes, this will always be exactly one entry with a
              # field path equal to the field path of the associated field.
            { # A field in an index.
                # The field_path describes which field is indexed, the value_mode describes
                # how the field value is indexed.
              "fieldPath": "A String", # Can be __name__.
                  # For single field indexes, this must match the name of the field or may
                  # be omitted.
              "order": "A String", # Indicates that this field supports ordering by the specified order or
                  # comparing using =, <, <=, >, >=.
              "arrayConfig": "A String", # Indicates that this field supports operations on `array_value`s.
            },
          ],
          "queryScope": "A String", # Indexes with a collection query scope specified allow queries
              # against a collection that is the child of a specific document, specified at
              # query time, and that has the same collection id.
              #
              # Indexes with a collection group query scope specified allow queries against
              # all collections descended from a specific document, specified at query
              # time, and that have the same collection id as this index.
          "state": "A String", # Output only.
              # The serving state of the index.
          "name": "A String", # Output only.
              # A server defined name for this index.
              # The form of this name for composite indexes will be:
              # `projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{composite_index_id}`
              # For single field indexes, this field will be empty.
        },
      ],
    },
    "name": "A String", # A field name of the form
        # `projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_path}`
        # 
        # A field path may be a simple field name, e.g. `address` or a path to fields
        # within map_value , e.g. `address.city`,
        # or a special field path. The only valid special field is `*`, which
        # represents any field.
        # 
        # Field paths may be quoted using ` (backtick). The only character that needs
        # to be escaped within a quoted field path is the backtick character itself,
        # escaped using a backslash. Special characters in field paths that
        # must be quoted include: `*`, `.`,
        # ``` (backtick), `[`, `]`, as well as any ascii symbolic characters.
        # 
        # Examples:
        # (Note: Comments here are written in markdown syntax, so there is an
        #  additional layer of backticks to represent a code block)
        # `\`address.city\`` represents a field named `address.city`, not the map key
        # `city` in the field `address`.
        # `\`*\`` represents a field named `*`, not any field.
        # 
        # A special `Field` contains the default indexing settings for all fields.
        # This field's resource name is:
        # `projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`
        # Indexes defined on this `Field` will be applied to all fields which do not
        # have their own `Field` index configuration.
  }

  updateMask: string, A mask, relative to the field. If specified, only configuration specified
by this field_mask will be updated in the field.
  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.
    "metadata": { # 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.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # 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). The error model is designed to be:
        #
        # - Simple to use and understand for most users
        # - Flexible enough to meet unexpected needs
        #
        # # Overview
        #
        # The `Status` message contains three pieces of data: error code, error
        # message, and error details. The error code should be an enum value of
        # google.rpc.Code, but it may accept additional error codes if needed.  The
        # error message should be a developer-facing English message that helps
        # developers *understand* and *resolve* the error. If a localized user-facing
        # error message is needed, put the localized message in the error details or
        # localize it in the client. The optional error details may contain arbitrary
        # information about the error. There is a predefined set of error detail types
        # in the package `google.rpc` that can be used for common error conditions.
        #
        # # Language mapping
        #
        # The `Status` message is the logical representation of the error model, but it
        # is not necessarily the actual wire format. When the `Status` message is
        # exposed in different client libraries and different wire protocols, it can be
        # mapped differently. For example, it will likely be mapped to some exceptions
        # in Java, but more likely mapped to some error codes in C.
        #
        # # Other uses
        #
        # The error model and the `Status` message can be used in a variety of
        # environments, either with or without APIs, to provide a
        # consistent developer experience across different environments.
        #
        # Example uses of this error model include:
        #
        # - Partial errors. If a service needs to return partial errors to the client,
        #     it may embed the `Status` in the normal response to indicate the partial
        #     errors.
        #
        # - Workflow errors. A typical workflow has multiple steps. Each step may
        #     have a `Status` message for error reporting.
        #
        # - Batch operations. If a client uses batch request and batch response, the
        #     `Status` message should be used directly inside batch response, one for
        #     each error sub-response.
        #
        # - Asynchronous operations. If an API call embeds asynchronous operation
        #     results in its response, the status of those operations should be
        #     represented directly using the `Status` message.
        #
        # - Logging. If some API errors are stored in logs, the message `Status` could
        #     be used directly after any stripping needed for security/privacy reasons.
      "message": "A String", # 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.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": 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.
    "response": { # 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`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # 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 have the format of `operations/some/unique/name`.
  }</pre>
</div>

</body></html>