{
  "id": "people:v1",
  "schemas": {
    "Person": {
      "type": "object",
      "properties": {
        "taglines": {
          "description": "Output only. **DEPRECATED**: No data will be returned The person's taglines.",
          "deprecated": true,
          "items": {
            "$ref": "Tagline"
          },
          "readOnly": true,
          "type": "array"
        },
        "braggingRights": {
          "items": {
            "$ref": "BraggingRights"
          },
          "description": "**DEPRECATED**: No data will be returned The person's bragging rights.",
          "deprecated": true,
          "type": "array"
        },
        "imClients": {
          "type": "array",
          "description": "The person's instant messaging clients.",
          "items": {
            "$ref": "ImClient"
          }
        },
        "phoneNumbers": {
          "items": {
            "$ref": "PhoneNumber"
          },
          "description": "The person's phone numbers. For `people.connections.list` and `otherContacts.list` the number of phone numbers is limited to 100. If a Person has more phone numbers the entire set can be obtained by calling GetPeople.",
          "type": "array"
        },
        "interests": {
          "items": {
            "$ref": "Interest"
          },
          "description": "The person's interests.",
          "type": "array"
        },
        "memberships": {
          "type": "array",
          "description": "The person's group memberships.",
          "items": {
            "$ref": "Membership"
          }
        },
        "sipAddresses": {
          "type": "array",
          "items": {
            "$ref": "SipAddress"
          },
          "description": "The person's SIP addresses."
        },
        "metadata": {
          "$ref": "PersonMetadata",
          "readOnly": true,
          "description": "Output only. Metadata about the person."
        },
        "emailAddresses": {
          "items": {
            "$ref": "EmailAddress"
          },
          "description": "The person's email addresses. For `people.connections.list` and `otherContacts.list` the number of email addresses is limited to 100. If a Person has more email addresses the entire set can be obtained by calling GetPeople.",
          "type": "array"
        },
        "locations": {
          "type": "array",
          "items": {
            "$ref": "Location"
          },
          "description": "The person's locations."
        },
        "organizations": {
          "type": "array",
          "description": "The person's past or current organizations.",
          "items": {
            "$ref": "Organization"
          }
        },
        "residences": {
          "type": "array",
          "deprecated": true,
          "description": "**DEPRECATED**: (Please use `person.locations` instead) The person's residences.",
          "items": {
            "$ref": "Residence"
          }
        },
        "genders": {
          "items": {
            "$ref": "Gender"
          },
          "type": "array",
          "description": "The person's genders. This field is a singleton for contact sources."
        },
        "biographies": {
          "type": "array",
          "items": {
            "$ref": "Biography"
          },
          "description": "The person's biographies. This field is a singleton for contact sources."
        },
        "relations": {
          "description": "The person's relations.",
          "type": "array",
          "items": {
            "$ref": "Relation"
          }
        },
        "userDefined": {
          "type": "array",
          "description": "The person's user defined data.",
          "items": {
            "$ref": "UserDefined"
          }
        },
        "locales": {
          "items": {
            "$ref": "Locale"
          },
          "type": "array",
          "description": "The person's locale preferences."
        },
        "externalIds": {
          "items": {
            "$ref": "ExternalId"
          },
          "type": "array",
          "description": "The person's external IDs."
        },
        "fileAses": {
          "description": "The person's file-ases.",
          "type": "array",
          "items": {
            "$ref": "FileAs"
          }
        },
        "names": {
          "description": "The person's names. This field is a singleton for contact sources.",
          "items": {
            "$ref": "Name"
          },
          "type": "array"
        },
        "photos": {
          "description": "Output only. The person's photos.",
          "type": "array",
          "readOnly": true,
          "items": {
            "$ref": "Photo"
          }
        },
        "relationshipInterests": {
          "items": {
            "$ref": "RelationshipInterest"
          },
          "readOnly": true,
          "type": "array",
          "description": "Output only. **DEPRECATED**: No data will be returned The person's relationship interests.",
          "deprecated": true
        },
        "coverPhotos": {
          "description": "Output only. The person's cover photos.",
          "type": "array",
          "readOnly": true,
          "items": {
            "$ref": "CoverPhoto"
          }
        },
        "urls": {
          "type": "array",
          "description": "The person's associated URLs.",
          "items": {
            "$ref": "Url"
          }
        },
        "occupations": {
          "description": "The person's occupations.",
          "type": "array",
          "items": {
            "$ref": "Occupation"
          }
        },
        "nicknames": {
          "type": "array",
          "items": {
            "$ref": "Nickname"
          },
          "description": "The person's nicknames."
        },
        "calendarUrls": {
          "items": {
            "$ref": "CalendarUrl"
          },
          "description": "The person's calendar URLs.",
          "type": "array"
        },
        "clientData": {
          "items": {
            "$ref": "ClientData"
          },
          "description": "The person's client data.",
          "type": "array"
        },
        "ageRanges": {
          "readOnly": true,
          "type": "array",
          "items": {
            "$ref": "AgeRangeType"
          },
          "description": "Output only. The person's age ranges."
        },
        "etag": {
          "description": "The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the resource. Used for web cache validation.",
          "type": "string"
        },
        "miscKeywords": {
          "items": {
            "$ref": "MiscKeyword"
          },
          "type": "array",
          "description": "The person's miscellaneous keywords."
        },
        "resourceName": {
          "description": "The resource name for the person, assigned by the server. An ASCII string in the form of `people/{person_id}`.",
          "type": "string"
        },
        "events": {
          "description": "The person's events.",
          "items": {
            "$ref": "Event"
          },
          "type": "array"
        },
        "relationshipStatuses": {
          "items": {
            "$ref": "RelationshipStatus"
          },
          "description": "Output only. **DEPRECATED**: No data will be returned The person's relationship statuses.",
          "readOnly": true,
          "deprecated": true,
          "type": "array"
        },
        "addresses": {
          "items": {
            "$ref": "Address"
          },
          "type": "array",
          "description": "The person's street addresses."
        },
        "birthdays": {
          "type": "array",
          "items": {
            "$ref": "Birthday"
          },
          "description": "The person's birthdays. This field is a singleton for contact sources."
        },
        "skills": {
          "description": "The person's skills.",
          "type": "array",
          "items": {
            "$ref": "Skill"
          }
        },
        "ageRange": {
          "type": "string",
          "readOnly": true,
          "enumDescriptions": [
            "Unspecified.",
            "Younger than eighteen.",
            "Between eighteen and twenty.",
            "Twenty-one and older."
          ],
          "description": "Output only. **DEPRECATED** (Please use `person.ageRanges` instead) The person's age range.",
          "enum": [
            "AGE_RANGE_UNSPECIFIED",
            "LESS_THAN_EIGHTEEN",
            "EIGHTEEN_TO_TWENTY",
            "TWENTY_ONE_OR_OLDER"
          ],
          "deprecated": true
        }
      },
      "id": "Person",
      "description": "Information about a person merged from various data sources such as the authenticated user's contacts and profile data. Most fields can have multiple items. The items in a field have no guaranteed order, but each non-empty field is guaranteed to have exactly one field with `metadata.primary` set to true."
    },
    "Birthday": {
      "properties": {
        "text": {
          "deprecated": true,
          "description": "Prefer to use the `date` field if set. A free-form string representing the user's birthday. This value is not validated.",
          "type": "string"
        },
        "date": {
          "description": "The structured date of the birthday.",
          "$ref": "Date"
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the birthday."
        }
      },
      "description": "A person's birthday. At least one of the `date` and `text` fields are specified. The `date` and `text` fields typically represent the same date, but are not guaranteed to. Clients should always set the `date` field when mutating birthdays.",
      "type": "object",
      "id": "Birthday"
    },
    "SearchResult": {
      "properties": {
        "person": {
          "description": "The matched Person.",
          "$ref": "Person"
        }
      },
      "type": "object",
      "id": "SearchResult",
      "description": "A result of a search query."
    },
    "SearchResponse": {
      "description": "The response to a search request for the authenticated user, given a query.",
      "type": "object",
      "id": "SearchResponse",
      "properties": {
        "results": {
          "items": {
            "$ref": "SearchResult"
          },
          "description": "The results of the request.",
          "type": "array"
        }
      }
    },
    "ModifyContactGroupMembersResponse": {
      "type": "object",
      "properties": {
        "canNotRemoveLastContactGroupResourceNames": {
          "items": {
            "type": "string"
          },
          "description": "The contact people resource names that cannot be removed from their last contact group.",
          "type": "array"
        },
        "notFoundResourceNames": {
          "description": "The contact people resource names that were not found.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "id": "ModifyContactGroupMembersResponse",
      "description": "The response to a modify contact group members request."
    },
    "UpdateContactPhotoRequest": {
      "id": "UpdateContactPhotoRequest",
      "properties": {
        "photoBytes": {
          "type": "string",
          "description": "Required. Raw photo bytes",
          "format": "byte"
        },
        "personFields": {
          "format": "google-fieldmask",
          "description": "Optional. A field mask to restrict which fields on the person are returned. Multiple fields can be specified by separating them with commas. Defaults to empty if not set, which will skip the post mutate get. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
          "type": "string"
        },
        "sources": {
          "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Unspecified.",
              "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
              "Returns SourceType.CONTACT.",
              "Returns SourceType.DOMAIN_CONTACT.",
              "Returns SourceType.OTHER_CONTACT."
            ],
            "enum": [
              "READ_SOURCE_TYPE_UNSPECIFIED",
              "READ_SOURCE_TYPE_PROFILE",
              "READ_SOURCE_TYPE_CONTACT",
              "READ_SOURCE_TYPE_DOMAIN_CONTACT",
              "READ_SOURCE_TYPE_OTHER_CONTACT"
            ]
          }
        }
      },
      "description": "A request to update an existing contact's photo. All requests must have a valid photo format: JPEG or PNG.",
      "type": "object"
    },
    "Empty": {
      "id": "Empty",
      "type": "object",
      "description": "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); }",
      "properties": {}
    },
    "BraggingRights": {
      "properties": {
        "value": {
          "description": "The bragging rights; for example, `climbed mount everest`.",
          "type": "string"
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the bragging rights."
        }
      },
      "deprecated": true,
      "id": "BraggingRights",
      "type": "object",
      "description": "**DEPRECATED**: No data will be returned A person's bragging rights."
    },
    "Membership": {
      "description": "A person's membership in a group. Only contact group memberships can be modified.",
      "id": "Membership",
      "type": "object",
      "properties": {
        "contactGroupMembership": {
          "$ref": "ContactGroupMembership",
          "description": "The contact group membership."
        },
        "metadata": {
          "description": "Metadata about the membership.",
          "$ref": "FieldMetadata"
        },
        "domainMembership": {
          "description": "Output only. The domain membership.",
          "readOnly": true,
          "$ref": "DomainMembership"
        }
      }
    },
    "ListDirectoryPeopleResponse": {
      "type": "object",
      "properties": {
        "people": {
          "type": "array",
          "items": {
            "$ref": "Person"
          },
          "description": "The list of people in the domain directory."
        },
        "nextSyncToken": {
          "description": "A token, which can be sent as `sync_token` to retrieve changes since the last request. Request must set `request_sync_token` to return the sync token.",
          "type": "string"
        },
        "nextPageToken": {
          "type": "string",
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages."
        }
      },
      "id": "ListDirectoryPeopleResponse",
      "description": "The response to a request for the authenticated user's domain directory."
    },
    "BatchDeleteContactsRequest": {
      "id": "BatchDeleteContactsRequest",
      "type": "object",
      "description": "A request to delete a batch of existing contacts.",
      "properties": {
        "resourceNames": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Required. The resource names of the contact to delete. It's repeatable. Allows up to 500 resource names in a single request."
        }
      }
    },
    "Locale": {
      "properties": {
        "value": {
          "type": "string",
          "description": "The well-formed [IETF BCP 47](https://tools.ietf.org/html/bcp47) language tag representing the locale."
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the locale."
        }
      },
      "description": "A person's locale preference.",
      "id": "Locale",
      "type": "object"
    },
    "UserDefined": {
      "type": "object",
      "description": "Arbitrary user data that is populated by the end users.",
      "properties": {
        "metadata": {
          "description": "Metadata about the user defined data.",
          "$ref": "FieldMetadata"
        },
        "key": {
          "description": "The end user specified key of the user defined data.",
          "type": "string"
        },
        "value": {
          "description": "The end user specified value of the user defined data.",
          "type": "string"
        }
      },
      "id": "UserDefined"
    },
    "BatchUpdateContactsRequest": {
      "id": "BatchUpdateContactsRequest",
      "type": "object",
      "description": "A request to update a batch of contacts.",
      "properties": {
        "sources": {
          "type": "array",
          "items": {
            "enumDescriptions": [
              "Unspecified.",
              "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
              "Returns SourceType.CONTACT.",
              "Returns SourceType.DOMAIN_CONTACT.",
              "Returns SourceType.OTHER_CONTACT."
            ],
            "type": "string",
            "enum": [
              "READ_SOURCE_TYPE_UNSPECIFIED",
              "READ_SOURCE_TYPE_PROFILE",
              "READ_SOURCE_TYPE_CONTACT",
              "READ_SOURCE_TYPE_DOMAIN_CONTACT",
              "READ_SOURCE_TYPE_OTHER_CONTACT"
            ]
          },
          "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set."
        },
        "updateMask": {
          "format": "google-fieldmask",
          "description": "Required. A field mask to restrict which fields on the person are updated. Multiple fields can be specified by separating them with commas. All specified fields will be replaced, or cleared if left empty for each person. Valid values are: * addresses * biographies * birthdays * calendarUrls * clientData * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * relations * sipAddresses * urls * userDefined",
          "type": "string"
        },
        "contacts": {
          "additionalProperties": {
            "$ref": "Person"
          },
          "description": "Required. A map of resource names to the person data to be updated. Allows up to 200 contacts in a single request.",
          "type": "object"
        },
        "readMask": {
          "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. If read mask is left empty, the post-mutate-get is skipped and no data will be returned in the response. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
          "format": "google-fieldmask",
          "type": "string"
        }
      }
    },
    "BatchCreateContactsResponse": {
      "description": "If not successful, returns BatchCreateContactsErrorDetails which contains a list of errors for each invalid contact. The response to a request to create a batch of contacts.",
      "properties": {
        "createdPeople": {
          "description": "The contacts that were created, unless the request `read_mask` is empty.",
          "type": "array",
          "items": {
            "$ref": "PersonResponse"
          }
        }
      },
      "type": "object",
      "id": "BatchCreateContactsResponse"
    },
    "SipAddress": {
      "properties": {
        "type": {
          "description": "The type of the SIP address. The type can be custom or or one of these predefined values: * `home` * `work` * `mobile` * `other`",
          "type": "string"
        },
        "value": {
          "description": "The SIP address in the [RFC 3261 19.1](https://tools.ietf.org/html/rfc3261#section-19.1) SIP URI format.",
          "type": "string"
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the SIP address."
        },
        "formattedType": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The type of the SIP address translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale."
        }
      },
      "type": "object",
      "description": "A person's SIP address. Session Initial Protocol addresses are used for VoIP communications to make voice or video calls over the internet.",
      "id": "SipAddress"
    },
    "ContactGroupMembership": {
      "id": "ContactGroupMembership",
      "type": "object",
      "description": "A Google contact group membership.",
      "properties": {
        "contactGroupId": {
          "description": "Output only. The contact group ID for the contact group membership.",
          "readOnly": true,
          "type": "string",
          "deprecated": true
        },
        "contactGroupResourceName": {
          "type": "string",
          "description": "The resource name for the contact group, assigned by the server. An ASCII string, in the form of `contactGroups/{contact_group_id}`. Only contact_group_resource_name can be used for modifying memberships. Any contact group membership can be removed, but only user group or \"myContacts\" or \"starred\" system groups memberships can be added. A contact must always have at least one contact group membership."
        }
      }
    },
    "Tagline": {
      "properties": {
        "value": {
          "description": "The tagline.",
          "type": "string"
        },
        "metadata": {
          "description": "Metadata about the tagline.",
          "$ref": "FieldMetadata"
        }
      },
      "deprecated": true,
      "id": "Tagline",
      "description": "**DEPRECATED**: No data will be returned A brief one-line description of the person.",
      "type": "object"
    },
    "Url": {
      "description": "A person's associated URLs.",
      "id": "Url",
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "The type of the URL. The type can be custom or one of these predefined values: * `home` * `work` * `blog` * `profile` * `homePage` * `ftp` * `reservations` * `appInstallPage`: website for a Currents application. * `other`"
        },
        "formattedType": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The type of the URL translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale."
        },
        "metadata": {
          "description": "Metadata about the URL.",
          "$ref": "FieldMetadata"
        },
        "value": {
          "description": "The URL.",
          "type": "string"
        }
      }
    },
    "ContactToCreate": {
      "properties": {
        "contactPerson": {
          "description": "Required. The person data to populate a newly created source.",
          "$ref": "Person"
        }
      },
      "description": "A wrapper that contains the person data to populate a newly created source.",
      "id": "ContactToCreate",
      "type": "object"
    },
    "ExternalId": {
      "description": "An identifier from an external entity related to the person.",
      "id": "ExternalId",
      "type": "object",
      "properties": {
        "formattedType": {
          "description": "Output only. The type of the event translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale.",
          "type": "string",
          "readOnly": true
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the external ID."
        },
        "type": {
          "type": "string",
          "description": "The type of the external ID. The type can be custom or one of these predefined values: * `account` * `customer` * `loginId` * `network` * `organization`"
        },
        "value": {
          "description": "The value of the external ID.",
          "type": "string"
        }
      }
    },
    "BatchCreateContactsRequest": {
      "type": "object",
      "id": "BatchCreateContactsRequest",
      "description": "A request to create a batch of contacts.",
      "properties": {
        "contacts": {
          "description": "Required. The contact to create. Allows up to 200 contacts in a single request.",
          "items": {
            "$ref": "ContactToCreate"
          },
          "type": "array"
        },
        "readMask": {
          "type": "string",
          "description": "Required. A field mask to restrict which fields on each person are returned in the response. Multiple fields can be specified by separating them with commas. If read mask is left empty, the post-mutate-get is skipped and no data will be returned in the response. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
          "format": "google-fieldmask"
        },
        "sources": {
          "description": "Optional. A mask of what source types to return in the post mutate read. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set.",
          "items": {
            "enumDescriptions": [
              "Unspecified.",
              "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
              "Returns SourceType.CONTACT.",
              "Returns SourceType.DOMAIN_CONTACT.",
              "Returns SourceType.OTHER_CONTACT."
            ],
            "type": "string",
            "enum": [
              "READ_SOURCE_TYPE_UNSPECIFIED",
              "READ_SOURCE_TYPE_PROFILE",
              "READ_SOURCE_TYPE_CONTACT",
              "READ_SOURCE_TYPE_DOMAIN_CONTACT",
              "READ_SOURCE_TYPE_OTHER_CONTACT"
            ]
          },
          "type": "array"
        }
      }
    },
    "CoverPhoto": {
      "properties": {
        "default": {
          "description": "True if the cover photo is the default cover photo; false if the cover photo is a user-provided cover photo.",
          "type": "boolean"
        },
        "metadata": {
          "description": "Metadata about the cover photo.",
          "$ref": "FieldMetadata"
        },
        "url": {
          "type": "string",
          "description": "The URL of the cover photo."
        }
      },
      "description": "A person's cover photo. A large image shown on the person's profile page that represents who they are or what they care about.",
      "id": "CoverPhoto",
      "type": "object"
    },
    "Organization": {
      "type": "object",
      "description": "A person's past or current organization. Overlapping date ranges are permitted.",
      "id": "Organization",
      "properties": {
        "fullTimeEquivalentMillipercent": {
          "format": "int32",
          "description": "The person's full-time equivalent millipercent within the organization (100000 = 100%).",
          "type": "integer"
        },
        "domain": {
          "description": "The domain name associated with the organization; for example, `google.com`.",
          "type": "string"
        },
        "endDate": {
          "description": "The end date when the person left the organization.",
          "$ref": "Date"
        },
        "symbol": {
          "description": "The symbol associated with the organization; for example, a stock ticker symbol, abbreviation, or acronym.",
          "type": "string"
        },
        "location": {
          "type": "string",
          "description": "The location of the organization office the person works at."
        },
        "costCenter": {
          "description": "The person's cost center at the organization.",
          "type": "string"
        },
        "current": {
          "description": "True if the organization is the person's current organization; false if the organization is a past organization.",
          "type": "boolean"
        },
        "type": {
          "type": "string",
          "description": "The type of the organization. The type can be custom or one of these predefined values: * `work` * `school`"
        },
        "title": {
          "description": "The person's job title at the organization.",
          "type": "string"
        },
        "department": {
          "description": "The person's department at the organization.",
          "type": "string"
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the organization."
        },
        "jobDescription": {
          "type": "string",
          "description": "The person's job description at the organization."
        },
        "formattedType": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The type of the organization translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale."
        },
        "phoneticName": {
          "type": "string",
          "description": "The phonetic name of the organization."
        },
        "startDate": {
          "$ref": "Date",
          "description": "The start date when the person joined the organization."
        },
        "name": {
          "type": "string",
          "description": "The name of the organization."
        }
      }
    },
    "RelationshipStatus": {
      "type": "object",
      "properties": {
        "metadata": {
          "description": "Metadata about the relationship status.",
          "$ref": "FieldMetadata"
        },
        "formattedValue": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The value of the relationship status translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale."
        },
        "value": {
          "type": "string",
          "description": "The relationship status. The value can be custom or one of these predefined values: * `single` * `inARelationship` * `engaged` * `married` * `itsComplicated` * `openRelationship` * `widowed` * `inDomesticPartnership` * `inCivilUnion`"
        }
      },
      "description": "**DEPRECATED**: No data will be returned A person's relationship status.",
      "deprecated": true,
      "id": "RelationshipStatus"
    },
    "PhoneNumber": {
      "id": "PhoneNumber",
      "properties": {
        "type": {
          "type": "string",
          "description": "The type of the phone number. The type can be custom or one of these predefined values: * `home` * `work` * `mobile` * `homeFax` * `workFax` * `otherFax` * `pager` * `workMobile` * `workPager` * `main` * `googleVoice` * `other`"
        },
        "metadata": {
          "description": "Metadata about the phone number.",
          "$ref": "FieldMetadata"
        },
        "canonicalForm": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The canonicalized [ITU-T E.164](https://law.resource.org/pub/us/cfr/ibr/004/itu-t.E.164.1.2008.pdf) form of the phone number."
        },
        "formattedType": {
          "readOnly": true,
          "description": "Output only. The type of the phone number translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale.",
          "type": "string"
        },
        "value": {
          "description": "The phone number.",
          "type": "string"
        }
      },
      "description": "A person's phone number.",
      "type": "object"
    },
    "Relation": {
      "id": "Relation",
      "description": "A person's relation to another person.",
      "properties": {
        "person": {
          "description": "The name of the other person this relation refers to.",
          "type": "string"
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the relation."
        },
        "formattedType": {
          "description": "Output only. The type of the relation translated and formatted in the viewer's account locale or the locale specified in the Accept-Language HTTP header.",
          "type": "string",
          "readOnly": true
        },
        "type": {
          "description": "The person's relation to the other person. The type can be custom or one of these predefined values: * `spouse` * `child` * `mother` * `father` * `parent` * `brother` * `sister` * `friend` * `relative` * `domesticPartner` * `manager` * `assistant` * `referredBy` * `partner`",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ContactGroupMetadata": {
      "description": "The metadata about a contact group.",
      "id": "ContactGroupMetadata",
      "type": "object",
      "properties": {
        "deleted": {
          "readOnly": true,
          "type": "boolean",
          "description": "Output only. True if the contact group resource has been deleted. Populated only for [`ListContactGroups`](/people/api/rest/v1/contactgroups/list) requests that include a sync token."
        },
        "updateTime": {
          "type": "string",
          "description": "Output only. The time the group was last updated.",
          "format": "google-datetime",
          "readOnly": true
        }
      }
    },
    "AgeRangeType": {
      "type": "object",
      "properties": {
        "ageRange": {
          "type": "string",
          "enumDescriptions": [
            "Unspecified.",
            "Younger than eighteen.",
            "Between eighteen and twenty.",
            "Twenty-one and older."
          ],
          "enum": [
            "AGE_RANGE_UNSPECIFIED",
            "LESS_THAN_EIGHTEEN",
            "EIGHTEEN_TO_TWENTY",
            "TWENTY_ONE_OR_OLDER"
          ],
          "description": "The age range."
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the age range."
        }
      },
      "id": "AgeRangeType",
      "description": "A person's age range."
    },
    "ListOtherContactsResponse": {
      "type": "object",
      "description": "The response to a request for the authenticated user's \"Other contacts\".",
      "properties": {
        "otherContacts": {
          "items": {
            "$ref": "Person"
          },
          "description": "The list of \"Other contacts\" returned as Person resources. \"Other contacts\" support a limited subset of fields. See ListOtherContactsRequest.request_mask for more detailed information.",
          "type": "array"
        },
        "nextSyncToken": {
          "type": "string",
          "description": "A token, which can be sent as `sync_token` to retrieve changes since the last request. Request must set `request_sync_token` to return the sync token."
        },
        "nextPageToken": {
          "type": "string",
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages."
        },
        "totalSize": {
          "description": "The total number of other contacts in the list without pagination.",
          "format": "int32",
          "type": "integer"
        }
      },
      "id": "ListOtherContactsResponse"
    },
    "Photo": {
      "description": "A person's photo. A picture shown next to the person's name to help others recognize the person.",
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the photo."
        },
        "url": {
          "description": "The URL of the photo. You can change the desired size by appending a query parameter `sz={size}` at the end of the url, where {size} is the size in pixels. Example: https://lh3.googleusercontent.com/-T_wVWLlmg7w/AAAAAAAAAAI/AAAAAAAABa8/00gzXvDBYqw/s100/photo.jpg?sz=50",
          "type": "string"
        },
        "default": {
          "description": "True if the photo is a default photo; false if the photo is a user-provided photo.",
          "type": "boolean"
        }
      },
      "id": "Photo"
    },
    "ContactGroup": {
      "id": "ContactGroup",
      "description": "A contact group.",
      "type": "object",
      "properties": {
        "clientData": {
          "description": "The group's client data.",
          "items": {
            "$ref": "GroupClientData"
          },
          "type": "array"
        },
        "name": {
          "description": "The contact group name set by the group owner or a system provided name for system groups. For [`contactGroups.create`](/people/api/rest/v1/contactGroups/create) or [`contactGroups.update`](/people/api/rest/v1/contactGroups/update) the name must be unique to the users contact groups. Attempting to create a group with a duplicate name will return a HTTP 409 error.",
          "type": "string"
        },
        "memberResourceNames": {
          "readOnly": true,
          "type": "array",
          "description": "Output only. The list of contact person resource names that are members of the contact group. The field is only populated for GET requests and will only return as many members as `maxMembers` in the get request.",
          "items": {
            "type": "string"
          }
        },
        "etag": {
          "description": "The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the resource. Used for web cache validation.",
          "type": "string"
        },
        "groupType": {
          "enumDescriptions": [
            "Unspecified.",
            "User defined contact group.",
            "System defined contact group."
          ],
          "readOnly": true,
          "type": "string",
          "enum": [
            "GROUP_TYPE_UNSPECIFIED",
            "USER_CONTACT_GROUP",
            "SYSTEM_CONTACT_GROUP"
          ],
          "description": "Output only. The contact group type."
        },
        "resourceName": {
          "type": "string",
          "description": "The resource name for the contact group, assigned by the server. An ASCII string, in the form of `contactGroups/{contact_group_id}`."
        },
        "memberCount": {
          "description": "Output only. The total number of contacts in the group irrespective of max members in specified in the request.",
          "type": "integer",
          "format": "int32",
          "readOnly": true
        },
        "metadata": {
          "readOnly": true,
          "$ref": "ContactGroupMetadata",
          "description": "Output only. Metadata about the contact group."
        },
        "formattedName": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The name translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale for system groups names. Group names set by the owner are the same as name."
        }
      }
    },
    "Nickname": {
      "description": "A person's nickname.",
      "properties": {
        "type": {
          "description": "The type of the nickname.",
          "enumDeprecated": [
            false,
            true,
            true,
            true,
            true,
            false,
            true
          ],
          "enum": [
            "DEFAULT",
            "MAIDEN_NAME",
            "INITIALS",
            "GPLUS",
            "OTHER_NAME",
            "ALTERNATE_NAME",
            "SHORT_NAME"
          ],
          "enumDescriptions": [
            "Generic nickname.",
            "Maiden name or birth family name. Used when the person's family name has changed as a result of marriage.",
            "Initials.",
            "Google+ profile nickname.",
            "A professional affiliation or other name; for example, `Dr. Smith.`",
            "Alternate name person is known by.",
            "A shorter version of the person's name."
          ],
          "type": "string"
        },
        "value": {
          "type": "string",
          "description": "The nickname."
        },
        "metadata": {
          "description": "Metadata about the nickname.",
          "$ref": "FieldMetadata"
        }
      },
      "id": "Nickname",
      "type": "object"
    },
    "MiscKeyword": {
      "properties": {
        "formattedType": {
          "description": "Output only. The type of the miscellaneous keyword translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale.",
          "type": "string",
          "readOnly": true
        },
        "type": {
          "type": "string",
          "enumDescriptions": [
            "Unspecified.",
            "Outlook field for billing information.",
            "Outlook field for directory server.",
            "Outlook field for keyword.",
            "Outlook field for mileage.",
            "Outlook field for priority.",
            "Outlook field for sensitivity.",
            "Outlook field for subject.",
            "Outlook field for user.",
            "Home.",
            "Work.",
            "Other."
          ],
          "description": "The miscellaneous keyword type.",
          "enum": [
            "TYPE_UNSPECIFIED",
            "OUTLOOK_BILLING_INFORMATION",
            "OUTLOOK_DIRECTORY_SERVER",
            "OUTLOOK_KEYWORD",
            "OUTLOOK_MILEAGE",
            "OUTLOOK_PRIORITY",
            "OUTLOOK_SENSITIVITY",
            "OUTLOOK_SUBJECT",
            "OUTLOOK_USER",
            "HOME",
            "WORK",
            "OTHER"
          ]
        },
        "value": {
          "type": "string",
          "description": "The value of the miscellaneous keyword."
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the miscellaneous keyword."
        }
      },
      "id": "MiscKeyword",
      "type": "object",
      "description": "A person's miscellaneous keyword."
    },
    "Gender": {
      "properties": {
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the gender."
        },
        "formattedValue": {
          "type": "string",
          "description": "Output only. The value of the gender translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale. Unspecified or custom value are not localized.",
          "readOnly": true
        },
        "addressMeAs": {
          "type": "string",
          "description": "Free form text field for pronouns that should be used to address the person. Common values are: * `he`/`him` * `she`/`her` * `they`/`them`"
        },
        "value": {
          "type": "string",
          "description": "The gender for the person. The gender can be custom or one of these predefined values: * `male` * `female` * `unspecified`"
        }
      },
      "type": "object",
      "description": "A person's gender.",
      "id": "Gender"
    },
    "Skill": {
      "properties": {
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the skill."
        },
        "value": {
          "type": "string",
          "description": "The skill; for example, `underwater basket weaving`."
        }
      },
      "id": "Skill",
      "description": "A skill that the person has.",
      "type": "object"
    },
    "BatchGetContactGroupsResponse": {
      "id": "BatchGetContactGroupsResponse",
      "description": "The response to a batch get contact groups request.",
      "properties": {
        "responses": {
          "items": {
            "$ref": "ContactGroupResponse"
          },
          "description": "The list of responses for each requested contact group resource.",
          "type": "array"
        }
      },
      "type": "object"
    },
    "CopyOtherContactToMyContactsGroupRequest": {
      "type": "object",
      "description": "A request to copy an \"Other contact\" to my contacts group.",
      "id": "CopyOtherContactToMyContactsGroupRequest",
      "properties": {
        "copyMask": {
          "description": "Required. A field mask to restrict which fields are copied into the new contact. Valid values are: * emailAddresses * names * phoneNumbers",
          "format": "google-fieldmask",
          "type": "string"
        },
        "readMask": {
          "description": "Optional. A field mask to restrict which fields on the person are returned. Multiple fields can be specified by separating them with commas. Defaults to the copy mask with metadata and membership fields if not set. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
          "type": "string",
          "format": "google-fieldmask"
        },
        "sources": {
          "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set.",
          "type": "array",
          "items": {
            "type": "string",
            "enumDescriptions": [
              "Unspecified.",
              "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
              "Returns SourceType.CONTACT.",
              "Returns SourceType.DOMAIN_CONTACT.",
              "Returns SourceType.OTHER_CONTACT."
            ],
            "enum": [
              "READ_SOURCE_TYPE_UNSPECIFIED",
              "READ_SOURCE_TYPE_PROFILE",
              "READ_SOURCE_TYPE_CONTACT",
              "READ_SOURCE_TYPE_DOMAIN_CONTACT",
              "READ_SOURCE_TYPE_OTHER_CONTACT"
            ]
          }
        }
      }
    },
    "BatchUpdateContactsResponse": {
      "properties": {
        "updateResult": {
          "additionalProperties": {
            "$ref": "PersonResponse"
          },
          "description": "A map of resource names to the contacts that were updated, unless the request `read_mask` is empty.",
          "type": "object"
        }
      },
      "id": "BatchUpdateContactsResponse",
      "description": "If not successful, returns BatchUpdateContactsErrorDetails, a list of errors corresponding to each contact. The response to a request to update a batch of contacts.",
      "type": "object"
    },
    "CreateContactGroupRequest": {
      "description": "A request to create a new contact group.",
      "id": "CreateContactGroupRequest",
      "properties": {
        "contactGroup": {
          "description": "Required. The contact group to create.",
          "$ref": "ContactGroup"
        },
        "readGroupFields": {
          "type": "string",
          "description": "Optional. A field mask to restrict which fields on the group are returned. Defaults to `metadata`, `groupType`, and `name` if not set or set to empty. Valid fields are: * clientData * groupType * metadata * name",
          "format": "google-fieldmask"
        }
      },
      "type": "object"
    },
    "Name": {
      "id": "Name",
      "description": "A person's name. If the name is a mononym, the family name is empty.",
      "type": "object",
      "properties": {
        "phoneticHonorificPrefix": {
          "type": "string",
          "description": "The honorific prefixes spelled as they sound."
        },
        "phoneticHonorificSuffix": {
          "description": "The honorific suffixes spelled as they sound.",
          "type": "string"
        },
        "phoneticFullName": {
          "description": "The full name spelled as it sounds.",
          "type": "string"
        },
        "displayNameLastFirst": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The display name with the last name first formatted according to the locale specified by the viewer's account or the `Accept-Language` HTTP header."
        },
        "givenName": {
          "description": "The given name.",
          "type": "string"
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the name."
        },
        "unstructuredName": {
          "description": "The free form name value.",
          "type": "string"
        },
        "middleName": {
          "type": "string",
          "description": "The middle name(s)."
        },
        "phoneticGivenName": {
          "description": "The given name spelled as it sounds.",
          "type": "string"
        },
        "honorificSuffix": {
          "type": "string",
          "description": "The honorific suffixes, such as `Jr.`"
        },
        "displayName": {
          "description": "Output only. The display name formatted according to the locale specified by the viewer's account or the `Accept-Language` HTTP header.",
          "readOnly": true,
          "type": "string"
        },
        "honorificPrefix": {
          "description": "The honorific prefixes, such as `Mrs.` or `Dr.`",
          "type": "string"
        },
        "phoneticFamilyName": {
          "description": "The family name spelled as it sounds.",
          "type": "string"
        },
        "phoneticMiddleName": {
          "description": "The middle name(s) spelled as they sound.",
          "type": "string"
        },
        "familyName": {
          "description": "The family name.",
          "type": "string"
        }
      }
    },
    "ProfileMetadata": {
      "type": "object",
      "description": "The metadata about a profile.",
      "properties": {
        "userTypes": {
          "readOnly": true,
          "items": {
            "enumDescriptions": [
              "The user type is not known.",
              "The user is a Google user.",
              "The user is a Currents user.",
              "The user is a Google Workspace user."
            ],
            "type": "string",
            "enum": [
              "USER_TYPE_UNKNOWN",
              "GOOGLE_USER",
              "GPLUS_USER",
              "GOOGLE_APPS_USER"
            ]
          },
          "type": "array",
          "description": "Output only. The user types."
        },
        "objectType": {
          "enum": [
            "OBJECT_TYPE_UNSPECIFIED",
            "PERSON",
            "PAGE"
          ],
          "readOnly": true,
          "enumDescriptions": [
            "Unspecified.",
            "Person.",
            "[Currents Page.](https://workspace.google.com/products/currents/)"
          ],
          "type": "string",
          "description": "Output only. The profile object type."
        }
      },
      "id": "ProfileMetadata"
    },
    "PersonResponse": {
      "description": "The response for a single person",
      "id": "PersonResponse",
      "type": "object",
      "properties": {
        "requestedResourceName": {
          "description": "The original requested resource name. May be different than the resource name on the returned person. The resource name can change when adding or removing fields that link a contact and profile such as a verified email, verified phone number, or a profile URL.",
          "type": "string"
        },
        "httpStatusCode": {
          "type": "integer",
          "description": "**DEPRECATED** (Please use status instead) [HTTP 1.1 status code] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).",
          "format": "int32",
          "deprecated": true
        },
        "person": {
          "description": "The person.",
          "$ref": "Person"
        },
        "status": {
          "$ref": "Status",
          "description": "The status of the response."
        }
      }
    },
    "RelationshipInterest": {
      "deprecated": true,
      "id": "RelationshipInterest",
      "description": "**DEPRECATED**: No data will be returned A person's relationship interest .",
      "properties": {
        "metadata": {
          "description": "Metadata about the relationship interest.",
          "$ref": "FieldMetadata"
        },
        "value": {
          "type": "string",
          "description": "The kind of relationship the person is looking for. The value can be custom or one of these predefined values: * `friend` * `date` * `relationship` * `networking`"
        },
        "formattedValue": {
          "type": "string",
          "readOnly": true,
          "description": "Output only. The value of the relationship interest translated and formatted in the viewer's account locale or the locale specified in the Accept-Language HTTP header."
        }
      },
      "type": "object"
    },
    "CalendarUrl": {
      "description": "A person's calendar URL.",
      "type": "object",
      "id": "CalendarUrl",
      "properties": {
        "formattedType": {
          "readOnly": true,
          "description": "Output only. The type of the calendar URL translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale.",
          "type": "string"
        },
        "metadata": {
          "description": "Metadata about the calendar URL.",
          "$ref": "FieldMetadata"
        },
        "type": {
          "description": "The type of the calendar URL. The type can be custom or one of these predefined values: * `home` * `freeBusy` * `work`",
          "type": "string"
        },
        "url": {
          "type": "string",
          "description": "The calendar URL."
        }
      }
    },
    "Date": {
      "id": "Date",
      "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values. * A month and day, with a zero year (for example, an anniversary). * A year on its own, with a zero month and a zero day. * A year and month, with a zero day (for example, a credit card expiration date). Related types: * google.type.TimeOfDay * google.type.DateTime * google.protobuf.Timestamp",
      "properties": {
        "year": {
          "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.",
          "type": "integer",
          "format": "int32"
        },
        "month": {
          "format": "int32",
          "type": "integer",
          "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day."
        },
        "day": {
          "type": "integer",
          "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant.",
          "format": "int32"
        }
      },
      "type": "object"
    },
    "Interest": {
      "description": "One of the person's interests.",
      "id": "Interest",
      "type": "object",
      "properties": {
        "value": {
          "type": "string",
          "description": "The interest; for example, `stargazing`."
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the interest."
        }
      }
    },
    "Address": {
      "description": "A person's physical address. May be a P.O. box or street address. All fields are optional.",
      "id": "Address",
      "properties": {
        "metadata": {
          "description": "Metadata about the address.",
          "$ref": "FieldMetadata"
        },
        "poBox": {
          "type": "string",
          "description": "The P.O. box of the address."
        },
        "city": {
          "description": "The city of the address.",
          "type": "string"
        },
        "formattedValue": {
          "description": "The unstructured value of the address. If this is not set by the user it will be automatically constructed from structured values.",
          "type": "string"
        },
        "formattedType": {
          "readOnly": true,
          "description": "Output only. The type of the address translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale.",
          "type": "string"
        },
        "region": {
          "type": "string",
          "description": "The region of the address; for example, the state or province."
        },
        "type": {
          "type": "string",
          "description": "The type of the address. The type can be custom or one of these predefined values: * `home` * `work` * `other`"
        },
        "postalCode": {
          "description": "The postal code of the address.",
          "type": "string"
        },
        "countryCode": {
          "type": "string",
          "description": "The [ISO 3166-1 alpha-2](http://www.iso.org/iso/country_codes.htm) country code of the address."
        },
        "country": {
          "type": "string",
          "description": "The country of the address."
        },
        "extendedAddress": {
          "type": "string",
          "description": "The extended address of the address; for example, the apartment number."
        },
        "streetAddress": {
          "description": "The street address.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ContactGroupResponse": {
      "id": "ContactGroupResponse",
      "properties": {
        "status": {
          "description": "The status of the response.",
          "$ref": "Status"
        },
        "requestedResourceName": {
          "description": "The original requested resource name.",
          "type": "string"
        },
        "contactGroup": {
          "$ref": "ContactGroup",
          "description": "The contact group."
        }
      },
      "type": "object",
      "description": "The response for a specific contact group."
    },
    "PersonMetadata": {
      "type": "object",
      "properties": {
        "objectType": {
          "description": "Output only. **DEPRECATED** (Please use `person.metadata.sources.profileMetadata.objectType` instead) The type of the person object.",
          "type": "string",
          "deprecated": true,
          "enumDescriptions": [
            "Unspecified.",
            "Person.",
            "[Currents Page.](https://workspace.google.com/products/currents/)"
          ],
          "enum": [
            "OBJECT_TYPE_UNSPECIFIED",
            "PERSON",
            "PAGE"
          ],
          "readOnly": true
        },
        "linkedPeopleResourceNames": {
          "description": "Output only. Resource names of people linked to this resource.",
          "items": {
            "type": "string"
          },
          "readOnly": true,
          "type": "array"
        },
        "sources": {
          "description": "The sources of data for the person.",
          "items": {
            "$ref": "Source"
          },
          "type": "array"
        },
        "deleted": {
          "description": "Output only. True if the person resource has been deleted. Populated only for `people.connections.list` and `otherContacts.list` sync requests.",
          "type": "boolean",
          "readOnly": true
        },
        "previousResourceNames": {
          "description": "Output only. Any former resource names this person has had. Populated only for `people.connections.list` requests that include a sync token. The resource name may change when adding or removing fields that link a contact and profile such as a verified email, verified phone number, or profile URL.",
          "type": "array",
          "readOnly": true,
          "items": {
            "type": "string"
          }
        }
      },
      "description": "The metadata about a person.",
      "id": "PersonMetadata"
    },
    "ClientData": {
      "type": "object",
      "properties": {
        "metadata": {
          "description": "Metadata about the client data.",
          "$ref": "FieldMetadata"
        },
        "key": {
          "type": "string",
          "description": "The client specified key of the client data."
        },
        "value": {
          "type": "string",
          "description": "The client specified value of the client data."
        }
      },
      "id": "ClientData",
      "description": "Arbitrary client data that is populated by clients. Duplicate keys and values are allowed."
    },
    "ListConnectionsResponse": {
      "type": "object",
      "id": "ListConnectionsResponse",
      "description": "The response to a request for the authenticated user's connections.",
      "properties": {
        "nextSyncToken": {
          "type": "string",
          "description": "A token, which can be sent as `sync_token` to retrieve changes since the last request. Request must set `request_sync_token` to return the sync token. When the response is paginated, only the last page will contain `nextSyncToken`."
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        },
        "connections": {
          "type": "array",
          "items": {
            "$ref": "Person"
          },
          "description": "The list of people that the requestor is connected to."
        },
        "totalPeople": {
          "description": "**DEPRECATED** (Please use totalItems) The total number of people in the list without pagination.",
          "format": "int32",
          "deprecated": true,
          "type": "integer"
        },
        "totalItems": {
          "type": "integer",
          "description": "The total number of items in the list without pagination.",
          "format": "int32"
        }
      }
    },
    "UpdateContactPhotoResponse": {
      "type": "object",
      "description": "The response for updating a contact's photo.",
      "properties": {
        "person": {
          "description": "The updated person, if person_fields is set in the UpdateContactPhotoRequest; otherwise this will be unset.",
          "$ref": "Person"
        }
      },
      "id": "UpdateContactPhotoResponse"
    },
    "UpdateContactGroupRequest": {
      "description": "A request to update an existing user contact group. All updated fields will be replaced.",
      "properties": {
        "contactGroup": {
          "description": "Required. The contact group to update.",
          "$ref": "ContactGroup"
        },
        "updateGroupFields": {
          "description": "Optional. A field mask to restrict which fields on the group are updated. Multiple fields can be specified by separating them with commas. Defaults to `name` if not set or set to empty. Updated fields are replaced. Valid values are: * clientData * name",
          "format": "google-fieldmask",
          "type": "string"
        },
        "readGroupFields": {
          "format": "google-fieldmask",
          "description": "Optional. A field mask to restrict which fields on the group are returned. Defaults to `metadata`, `groupType`, and `name` if not set or set to empty. Valid fields are: * clientData * groupType * memberCount * metadata * name",
          "type": "string"
        }
      },
      "id": "UpdateContactGroupRequest",
      "type": "object"
    },
    "DomainMembership": {
      "id": "DomainMembership",
      "properties": {
        "inViewerDomain": {
          "type": "boolean",
          "description": "True if the person is in the viewer's Google Workspace domain."
        }
      },
      "description": "A Google Workspace Domain membership.",
      "type": "object"
    },
    "GroupClientData": {
      "id": "GroupClientData",
      "description": "Arbitrary client data that is populated by clients. Duplicate keys and values are allowed.",
      "properties": {
        "key": {
          "description": "The client specified key of the client data.",
          "type": "string"
        },
        "value": {
          "description": "The client specified value of the client data.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "Status": {
      "id": "Status",
      "properties": {
        "message": {
          "type": "string",
          "description": "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."
        },
        "details": {
          "description": "A list of messages that carry the error details. There is a common set of message types for APIs to use.",
          "items": {
            "type": "object",
            "additionalProperties": {
              "type": "any",
              "description": "Properties of the object. Contains field @type with type URL."
            }
          },
          "type": "array"
        },
        "code": {
          "type": "integer",
          "format": "int32",
          "description": "The status code, which should be an enum value of google.rpc.Code."
        }
      },
      "description": "The `Status` type defines a logical error model that is suitable for 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).",
      "type": "object"
    },
    "FieldMetadata": {
      "type": "object",
      "properties": {
        "sourcePrimary": {
          "description": "True if the field is the primary field for the source. Each source must have at most one field with `source_primary` set to true.",
          "type": "boolean"
        },
        "source": {
          "description": "The source of the field.",
          "$ref": "Source"
        },
        "primary": {
          "type": "boolean",
          "readOnly": true,
          "description": "Output only. True if the field is the primary field for all sources in the person. Each person will have at most one field with `primary` set to true."
        },
        "verified": {
          "type": "boolean",
          "description": "Output only. True if the field is verified; false if the field is unverified. A verified field is typically a name, email address, phone number, or website that has been confirmed to be owned by the person.",
          "readOnly": true
        }
      },
      "description": "Metadata about a field.",
      "id": "FieldMetadata"
    },
    "Occupation": {
      "id": "Occupation",
      "type": "object",
      "description": "A person's occupation.",
      "properties": {
        "value": {
          "description": "The occupation; for example, `carpenter`.",
          "type": "string"
        },
        "metadata": {
          "description": "Metadata about the occupation.",
          "$ref": "FieldMetadata"
        }
      }
    },
    "DeleteContactPhotoResponse": {
      "type": "object",
      "description": "The response for deleting a contact's photo.",
      "id": "DeleteContactPhotoResponse",
      "properties": {
        "person": {
          "description": "The updated person, if person_fields is set in the DeleteContactPhotoRequest; otherwise this will be unset.",
          "$ref": "Person"
        }
      }
    },
    "Residence": {
      "deprecated": true,
      "description": "**DEPRECATED**: Please use `person.locations` instead. A person's past or current residence.",
      "properties": {
        "current": {
          "description": "True if the residence is the person's current residence; false if the residence is a past residence.",
          "type": "boolean"
        },
        "value": {
          "type": "string",
          "description": "The address of the residence."
        },
        "metadata": {
          "description": "Metadata about the residence.",
          "$ref": "FieldMetadata"
        }
      },
      "type": "object",
      "id": "Residence"
    },
    "ImClient": {
      "type": "object",
      "id": "ImClient",
      "description": "A person's instant messaging client.",
      "properties": {
        "type": {
          "description": "The type of the IM client. The type can be custom or one of these predefined values: * `home` * `work` * `other`",
          "type": "string"
        },
        "formattedType": {
          "readOnly": true,
          "type": "string",
          "description": "Output only. The type of the IM client translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale."
        },
        "formattedProtocol": {
          "description": "Output only. The protocol of the IM client formatted in the viewer's account locale or the `Accept-Language` HTTP header locale.",
          "readOnly": true,
          "type": "string"
        },
        "protocol": {
          "type": "string",
          "description": "The protocol of the IM client. The protocol can be custom or one of these predefined values: * `aim` * `msn` * `yahoo` * `skype` * `qq` * `googleTalk` * `icq` * `jabber` * `netMeeting`"
        },
        "metadata": {
          "description": "Metadata about the IM client.",
          "$ref": "FieldMetadata"
        },
        "username": {
          "description": "The user name used in the IM client.",
          "type": "string"
        }
      }
    },
    "ModifyContactGroupMembersRequest": {
      "properties": {
        "resourceNamesToAdd": {
          "items": {
            "type": "string"
          },
          "description": "Optional. The resource names of the contact people to add in the form of `people/{person_id}`. The total number of resource names in `resource_names_to_add` and `resource_names_to_remove` must be less than or equal to 1000.",
          "type": "array"
        },
        "resourceNamesToRemove": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Optional. The resource names of the contact people to remove in the form of `people/{person_id}`. The total number of resource names in `resource_names_to_add` and `resource_names_to_remove` must be less than or equal to 1000."
        }
      },
      "id": "ModifyContactGroupMembersRequest",
      "description": "A request to modify an existing contact group's members. Contacts can be removed from any group but they can only be added to a user group or \"myContacts\" or \"starred\" system groups.",
      "type": "object"
    },
    "GetPeopleResponse": {
      "description": "The response to a get request for a list of people by resource name.",
      "type": "object",
      "properties": {
        "responses": {
          "type": "array",
          "description": "The response for each requested resource name.",
          "items": {
            "$ref": "PersonResponse"
          }
        }
      },
      "id": "GetPeopleResponse"
    },
    "EmailAddress": {
      "type": "object",
      "id": "EmailAddress",
      "description": "A person's email address.",
      "properties": {
        "metadata": {
          "description": "Metadata about the email address.",
          "$ref": "FieldMetadata"
        },
        "formattedType": {
          "type": "string",
          "description": "Output only. The type of the email address translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale.",
          "readOnly": true
        },
        "value": {
          "description": "The email address.",
          "type": "string"
        },
        "type": {
          "description": "The type of the email address. The type can be custom or one of these predefined values: * `home` * `work` * `other`",
          "type": "string"
        },
        "displayName": {
          "type": "string",
          "description": "The display name of the email."
        }
      }
    },
    "Source": {
      "id": "Source",
      "type": "object",
      "description": "The source of a field.",
      "properties": {
        "updateTime": {
          "description": "Output only. **Only populated in `person.metadata.sources`.** Last update timestamp of this source.",
          "format": "google-datetime",
          "type": "string",
          "readOnly": true
        },
        "id": {
          "type": "string",
          "description": "The unique identifier within the source type generated by the server."
        },
        "etag": {
          "description": "**Only populated in `person.metadata.sources`.** The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the source. Used for web cache validation.",
          "type": "string"
        },
        "profileMetadata": {
          "readOnly": true,
          "description": "Output only. **Only populated in `person.metadata.sources`.** Metadata about a source of type PROFILE.",
          "$ref": "ProfileMetadata"
        },
        "type": {
          "description": "The source type.",
          "enumDescriptions": [
            "Unspecified.",
            "[Google Account](https://accounts.google.com).",
            "[Google profile](https://profiles.google.com). You can view the profile at [https://profiles.google.com/](https://profiles.google.com/){id}, where {id} is the source id.",
            "[Google Workspace domain profile](https://support.google.com/a/answer/1628008).",
            "[Google contact](https://contacts.google.com). You can view the contact at [https://contact.google.com/](https://contact.google.com/){id}, where {id} is the source id.",
            "[Google \"Other contact\"](https://contacts.google.com/other).",
            "[Google Workspace domain shared contact](https://support.google.com/a/answer/9281635)."
          ],
          "type": "string",
          "enum": [
            "SOURCE_TYPE_UNSPECIFIED",
            "ACCOUNT",
            "PROFILE",
            "DOMAIN_PROFILE",
            "CONTACT",
            "OTHER_CONTACT",
            "DOMAIN_CONTACT"
          ]
        }
      }
    },
    "Location": {
      "id": "Location",
      "description": "A person's location.",
      "type": "object",
      "properties": {
        "current": {
          "description": "Whether the location is the current location.",
          "type": "boolean"
        },
        "type": {
          "description": "The type of the location. The type can be custom or one of these predefined values: * `desk` * `grewUp`",
          "type": "string"
        },
        "value": {
          "type": "string",
          "description": "The free-form value of the location."
        },
        "floor": {
          "description": "The floor name or number.",
          "type": "string"
        },
        "buildingId": {
          "description": "The building identifier.",
          "type": "string"
        },
        "floorSection": {
          "description": "The floor section in `floor_name`.",
          "type": "string"
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the location."
        },
        "deskCode": {
          "description": "The individual desk location.",
          "type": "string"
        }
      }
    },
    "Event": {
      "type": "object",
      "description": "An event related to the person.",
      "id": "Event",
      "properties": {
        "date": {
          "description": "The date of the event.",
          "$ref": "Date"
        },
        "formattedType": {
          "description": "Output only. The type of the event translated and formatted in the viewer's account locale or the `Accept-Language` HTTP header locale.",
          "readOnly": true,
          "type": "string"
        },
        "type": {
          "description": "The type of the event. The type can be custom or one of these predefined values: * `anniversary` * `other`",
          "type": "string"
        },
        "metadata": {
          "description": "Metadata about the event.",
          "$ref": "FieldMetadata"
        }
      }
    },
    "ListContactGroupsResponse": {
      "id": "ListContactGroupsResponse",
      "type": "object",
      "description": "The response to a list contact groups request.",
      "properties": {
        "nextPageToken": {
          "type": "string",
          "description": "The token that can be used to retrieve the next page of results."
        },
        "contactGroups": {
          "type": "array",
          "items": {
            "$ref": "ContactGroup"
          },
          "description": "The list of contact groups. Members of the contact groups are not populated."
        },
        "nextSyncToken": {
          "description": "The token that can be used to retrieve changes since the last request.",
          "type": "string"
        },
        "totalItems": {
          "format": "int32",
          "type": "integer",
          "description": "The total number of items in the list without pagination."
        }
      }
    },
    "FileAs": {
      "type": "object",
      "properties": {
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the file-as."
        },
        "value": {
          "description": "The file-as value",
          "type": "string"
        }
      },
      "description": "The name that should be used to sort the person in a list.",
      "id": "FileAs"
    },
    "Biography": {
      "description": "A person's short biography.",
      "id": "Biography",
      "properties": {
        "contentType": {
          "type": "string",
          "description": "The content type of the biography.",
          "enum": [
            "CONTENT_TYPE_UNSPECIFIED",
            "TEXT_PLAIN",
            "TEXT_HTML"
          ],
          "enumDescriptions": [
            "Unspecified.",
            "Plain text.",
            "HTML text."
          ]
        },
        "metadata": {
          "$ref": "FieldMetadata",
          "description": "Metadata about the biography."
        },
        "value": {
          "type": "string",
          "description": "The short biography."
        }
      },
      "type": "object"
    },
    "SearchDirectoryPeopleResponse": {
      "type": "object",
      "id": "SearchDirectoryPeopleResponse",
      "description": "The response to a request for people in the authenticated user's domain directory that match the specified query.",
      "properties": {
        "totalSize": {
          "description": "The total number of items in the list without pagination.",
          "type": "integer",
          "format": "int32"
        },
        "people": {
          "description": "The list of people in the domain directory that match the query.",
          "type": "array",
          "items": {
            "$ref": "Person"
          }
        },
        "nextPageToken": {
          "type": "string",
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages."
        }
      }
    }
  },
  "description": "Provides access to information about profiles and contacts.",
  "title": "People API",
  "resources": {
    "people": {
      "methods": {
        "searchDirectoryPeople": {
          "description": "Provides a list of domain profiles and domain contacts in the authenticated user's domain directory that match the search query.",
          "flatPath": "v1/people:searchDirectoryPeople",
          "path": "v1/people:searchDirectoryPeople",
          "parameters": {
            "pageToken": {
              "location": "query",
              "type": "string",
              "description": "Optional. A page token, received from a previous response `next_page_token`. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `SearchDirectoryPeople` must match the first call that provided the page token."
            },
            "pageSize": {
              "description": "Optional. The number of people to include in the response. Valid values are between 1 and 500, inclusive. Defaults to 100 if not set or set to 0.",
              "type": "integer",
              "location": "query",
              "format": "int32"
            },
            "sources": {
              "description": "Required. Directory sources to return.",
              "enumDescriptions": [
                "Unspecified.",
                "Google Workspace domain shared contact.",
                "Google Workspace domain profile."
              ],
              "type": "string",
              "enum": [
                "DIRECTORY_SOURCE_TYPE_UNSPECIFIED",
                "DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT",
                "DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE"
              ],
              "location": "query",
              "repeated": true
            },
            "readMask": {
              "type": "string",
              "location": "query",
              "format": "google-fieldmask",
              "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined"
            },
            "query": {
              "location": "query",
              "type": "string",
              "description": "Required. Prefix query that matches fields in the person. Does NOT use the read_mask for determining what fields to match."
            },
            "mergeSources": {
              "enumDescriptions": [
                "Unspecified.",
                "User owned contact."
              ],
              "type": "string",
              "description": "Optional. Additional data to merge into the directory sources if they are connected through verified join keys such as email addresses or phone numbers.",
              "enum": [
                "DIRECTORY_MERGE_SOURCE_TYPE_UNSPECIFIED",
                "DIRECTORY_MERGE_SOURCE_TYPE_CONTACT"
              ],
              "location": "query",
              "repeated": true
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/directory.readonly"
          ],
          "httpMethod": "GET",
          "response": {
            "$ref": "SearchDirectoryPeopleResponse"
          },
          "id": "people.people.searchDirectoryPeople",
          "parameterOrder": []
        },
        "deleteContact": {
          "response": {
            "$ref": "Empty"
          },
          "parameterOrder": [
            "resourceName"
          ],
          "httpMethod": "DELETE",
          "id": "people.people.deleteContact",
          "description": "Delete a contact person. Any non-contact data will not be deleted. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "flatPath": "v1/people/{peopleId}:deleteContact",
          "path": "v1/{+resourceName}:deleteContact",
          "parameters": {
            "resourceName": {
              "location": "path",
              "pattern": "^people/[^/]+$",
              "type": "string",
              "required": true,
              "description": "Required. The resource name of the contact to delete."
            }
          }
        },
        "getBatchGet": {
          "parameters": {
            "resourceNames": {
              "description": "Required. The resource names of the people to provide information about. It's repeatable. The URL query parameter should be resourceNames=\u003cname1\u003e&resourceNames=\u003cname2\u003e&... - To get information about the authenticated user, specify `people/me`. - To get information about a google account, specify `people/{account_id}`. - To get information about a contact, specify the resource name that identifies the contact as returned by `people.connections.list`. There is a maximum of 200 resource names.",
              "location": "query",
              "repeated": true,
              "type": "string"
            },
            "sources": {
              "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set.",
              "enum": [
                "READ_SOURCE_TYPE_UNSPECIFIED",
                "READ_SOURCE_TYPE_PROFILE",
                "READ_SOURCE_TYPE_CONTACT",
                "READ_SOURCE_TYPE_DOMAIN_CONTACT",
                "READ_SOURCE_TYPE_OTHER_CONTACT"
              ],
              "enumDescriptions": [
                "Unspecified.",
                "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
                "Returns SourceType.CONTACT.",
                "Returns SourceType.DOMAIN_CONTACT.",
                "Returns SourceType.OTHER_CONTACT."
              ],
              "location": "query",
              "repeated": true,
              "type": "string"
            },
            "requestMask.includeField": {
              "description": "Required. Comma-separated list of person fields to be included in the response. Each path should start with `person.`: for example, `person.names` or `person.photos`.",
              "location": "query",
              "type": "string",
              "format": "google-fieldmask"
            },
            "personFields": {
              "type": "string",
              "location": "query",
              "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
              "format": "google-fieldmask"
            }
          },
          "flatPath": "v1/people:batchGet",
          "path": "v1/people:batchGet",
          "parameterOrder": [],
          "scopes": [
            "https://www.googleapis.com/auth/contacts",
            "https://www.googleapis.com/auth/contacts.other.readonly",
            "https://www.googleapis.com/auth/contacts.readonly",
            "https://www.googleapis.com/auth/directory.readonly",
            "https://www.googleapis.com/auth/user.addresses.read",
            "https://www.googleapis.com/auth/user.birthday.read",
            "https://www.googleapis.com/auth/user.emails.read",
            "https://www.googleapis.com/auth/user.gender.read",
            "https://www.googleapis.com/auth/user.organization.read",
            "https://www.googleapis.com/auth/user.phonenumbers.read",
            "https://www.googleapis.com/auth/userinfo.email",
            "https://www.googleapis.com/auth/userinfo.profile"
          ],
          "description": "Provides information about a list of specific people by specifying a list of requested resource names. Use `people/me` to indicate the authenticated user. The request returns a 400 error if 'personFields' is not specified.",
          "response": {
            "$ref": "GetPeopleResponse"
          },
          "id": "people.people.getBatchGet",
          "httpMethod": "GET"
        },
        "updateContactPhoto": {
          "request": {
            "$ref": "UpdateContactPhotoRequest"
          },
          "parameters": {
            "resourceName": {
              "type": "string",
              "location": "path",
              "pattern": "^people/[^/]+$",
              "description": "Required. Person resource name",
              "required": true
            }
          },
          "description": "Update a contact's photo. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "id": "people.people.updateContactPhoto",
          "response": {
            "$ref": "UpdateContactPhotoResponse"
          },
          "parameterOrder": [
            "resourceName"
          ],
          "path": "v1/{+resourceName}:updateContactPhoto",
          "flatPath": "v1/people/{peopleId}:updateContactPhoto",
          "httpMethod": "PATCH"
        },
        "updateContact": {
          "path": "v1/{+resourceName}:updateContact",
          "id": "people.people.updateContact",
          "request": {
            "$ref": "Person"
          },
          "httpMethod": "PATCH",
          "response": {
            "$ref": "Person"
          },
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "parameters": {
            "updatePersonFields": {
              "type": "string",
              "location": "query",
              "description": "Required. A field mask to restrict which fields on the person are updated. Multiple fields can be specified by separating them with commas. All updated fields will be replaced. Valid values are: * addresses * biographies * birthdays * calendarUrls * clientData * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * relations * sipAddresses * urls * userDefined",
              "format": "google-fieldmask"
            },
            "resourceName": {
              "location": "path",
              "pattern": "^people/[^/]+$",
              "description": "The resource name for the person, assigned by the server. An ASCII string in the form of `people/{person_id}`.",
              "required": true,
              "type": "string"
            },
            "personFields": {
              "type": "string",
              "description": "Optional. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. Defaults to all fields if not set. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
              "format": "google-fieldmask",
              "location": "query"
            },
            "sources": {
              "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set.",
              "location": "query",
              "repeated": true,
              "enum": [
                "READ_SOURCE_TYPE_UNSPECIFIED",
                "READ_SOURCE_TYPE_PROFILE",
                "READ_SOURCE_TYPE_CONTACT",
                "READ_SOURCE_TYPE_DOMAIN_CONTACT",
                "READ_SOURCE_TYPE_OTHER_CONTACT"
              ],
              "enumDescriptions": [
                "Unspecified.",
                "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
                "Returns SourceType.CONTACT.",
                "Returns SourceType.DOMAIN_CONTACT.",
                "Returns SourceType.OTHER_CONTACT."
              ],
              "type": "string"
            }
          },
          "description": "Update contact data for an existing contact person. Any non-contact data will not be modified. Any non-contact data in the person to update will be ignored. All fields specified in the `update_mask` will be replaced. The server returns a 400 error if `person.metadata.sources` is not specified for the contact to be updated or if there is no contact source. The server returns a 400 error with reason `\"failedPrecondition\"` if `person.metadata.sources.etag` is different than the contact's etag, which indicates the contact has changed since its data was read. Clients should get the latest person and merge their updates into the latest person. If making sequential updates to the same person, the etag from the `updateContact` response should be used to avoid failures. The server returns a 400 error if `memberships` are being updated and there are no contact group memberships specified on the person. The server returns a 400 error if more than one field is specified on a field that is a singleton for contact sources: * biographies * birthdays * genders * names Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "flatPath": "v1/people/{peopleId}:updateContact",
          "parameterOrder": [
            "resourceName"
          ]
        },
        "listDirectoryPeople": {
          "scopes": [
            "https://www.googleapis.com/auth/directory.readonly"
          ],
          "parameters": {
            "syncToken": {
              "type": "string",
              "description": "Optional. A sync token, received from a previous response `next_sync_token` Provide this to retrieve only the resources changed since the last request. When syncing, all other parameters provided to `people.listDirectoryPeople` must match the first call that provided the sync token. More details about sync behavior at `people.listDirectoryPeople`.",
              "location": "query"
            },
            "readMask": {
              "format": "google-fieldmask",
              "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
              "type": "string",
              "location": "query"
            },
            "pageToken": {
              "type": "string",
              "description": "Optional. A page token, received from a previous response `next_page_token`. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `people.listDirectoryPeople` must match the first call that provided the page token.",
              "location": "query"
            },
            "mergeSources": {
              "enum": [
                "DIRECTORY_MERGE_SOURCE_TYPE_UNSPECIFIED",
                "DIRECTORY_MERGE_SOURCE_TYPE_CONTACT"
              ],
              "description": "Optional. Additional data to merge into the directory sources if they are connected through verified join keys such as email addresses or phone numbers.",
              "location": "query",
              "repeated": true,
              "enumDescriptions": [
                "Unspecified.",
                "User owned contact."
              ],
              "type": "string"
            },
            "requestSyncToken": {
              "location": "query",
              "description": "Optional. Whether the response should return `next_sync_token`. It can be used to get incremental changes since the last request by setting it on the request `sync_token`. More details about sync behavior at `people.listDirectoryPeople`.",
              "type": "boolean"
            },
            "pageSize": {
              "location": "query",
              "type": "integer",
              "format": "int32",
              "description": "Optional. The number of people to include in the response. Valid values are between 1 and 1000, inclusive. Defaults to 100 if not set or set to 0."
            },
            "sources": {
              "type": "string",
              "description": "Required. Directory sources to return.",
              "enumDescriptions": [
                "Unspecified.",
                "Google Workspace domain shared contact.",
                "Google Workspace domain profile."
              ],
              "location": "query",
              "repeated": true,
              "enum": [
                "DIRECTORY_SOURCE_TYPE_UNSPECIFIED",
                "DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT",
                "DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE"
              ]
            }
          },
          "parameterOrder": [],
          "flatPath": "v1/people:listDirectoryPeople",
          "path": "v1/people:listDirectoryPeople",
          "httpMethod": "GET",
          "id": "people.people.listDirectoryPeople",
          "response": {
            "$ref": "ListDirectoryPeopleResponse"
          },
          "description": "Provides a list of domain profiles and domain contacts in the authenticated user's domain directory. When the `sync_token` is specified, resources deleted since the last sync will be returned as a person with `PersonMetadata.deleted` set to true. When the `page_token` or `sync_token` is specified, all other request parameters must match the first call. Writes may have a propagation delay of several minutes for sync requests. Incremental syncs are not intended for read-after-write use cases. See example usage at [List the directory people that have changed](/people/v1/directory#list_the_directory_people_that_have_changed)."
        },
        "batchCreateContacts": {
          "flatPath": "v1/people:batchCreateContacts",
          "description": "Create a batch of new contacts and return the PersonResponses for the newly Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "path": "v1/people:batchCreateContacts",
          "httpMethod": "POST",
          "request": {
            "$ref": "BatchCreateContactsRequest"
          },
          "id": "people.people.batchCreateContacts",
          "parameterOrder": [],
          "response": {
            "$ref": "BatchCreateContactsResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "parameters": {}
        },
        "get": {
          "description": "Provides information about a person by specifying a resource name. Use `people/me` to indicate the authenticated user. The request returns a 400 error if 'personFields' is not specified.",
          "httpMethod": "GET",
          "parameterOrder": [
            "resourceName"
          ],
          "path": "v1/{+resourceName}",
          "scopes": [
            "https://www.googleapis.com/auth/contacts",
            "https://www.googleapis.com/auth/contacts.other.readonly",
            "https://www.googleapis.com/auth/contacts.readonly",
            "https://www.googleapis.com/auth/directory.readonly",
            "https://www.googleapis.com/auth/user.addresses.read",
            "https://www.googleapis.com/auth/user.birthday.read",
            "https://www.googleapis.com/auth/user.emails.read",
            "https://www.googleapis.com/auth/user.gender.read",
            "https://www.googleapis.com/auth/user.organization.read",
            "https://www.googleapis.com/auth/user.phonenumbers.read",
            "https://www.googleapis.com/auth/userinfo.email",
            "https://www.googleapis.com/auth/userinfo.profile"
          ],
          "response": {
            "$ref": "Person"
          },
          "id": "people.people.get",
          "flatPath": "v1/people/{peopleId}",
          "parameters": {
            "resourceName": {
              "type": "string",
              "location": "path",
              "description": "Required. The resource name of the person to provide information about. - To get information about the authenticated user, specify `people/me`. - To get information about a google account, specify `people/{account_id}`. - To get information about a contact, specify the resource name that identifies the contact as returned by `people.connections.list`.",
              "pattern": "^people/[^/]+$",
              "required": true
            },
            "personFields": {
              "description": "Required. A field mask to restrict which fields on the person are returned. Multiple fields can be specified by separating them with commas. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
              "format": "google-fieldmask",
              "location": "query",
              "type": "string"
            },
            "sources": {
              "location": "query",
              "repeated": true,
              "enum": [
                "READ_SOURCE_TYPE_UNSPECIFIED",
                "READ_SOURCE_TYPE_PROFILE",
                "READ_SOURCE_TYPE_CONTACT",
                "READ_SOURCE_TYPE_DOMAIN_CONTACT",
                "READ_SOURCE_TYPE_OTHER_CONTACT"
              ],
              "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_PROFILE and READ_SOURCE_TYPE_CONTACT if not set.",
              "type": "string",
              "enumDescriptions": [
                "Unspecified.",
                "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
                "Returns SourceType.CONTACT.",
                "Returns SourceType.DOMAIN_CONTACT.",
                "Returns SourceType.OTHER_CONTACT."
              ]
            },
            "requestMask.includeField": {
              "format": "google-fieldmask",
              "description": "Required. Comma-separated list of person fields to be included in the response. Each path should start with `person.`: for example, `person.names` or `person.photos`.",
              "location": "query",
              "type": "string"
            }
          }
        },
        "batchDeleteContacts": {
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "response": {
            "$ref": "Empty"
          },
          "parameterOrder": [],
          "path": "v1/people:batchDeleteContacts",
          "httpMethod": "POST",
          "id": "people.people.batchDeleteContacts",
          "parameters": {},
          "flatPath": "v1/people:batchDeleteContacts",
          "request": {
            "$ref": "BatchDeleteContactsRequest"
          },
          "description": "Delete a batch of contacts. Any non-contact data will not be deleted. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures."
        },
        "createContact": {
          "httpMethod": "POST",
          "parameterOrder": [],
          "path": "v1/people:createContact",
          "response": {
            "$ref": "Person"
          },
          "request": {
            "$ref": "Person"
          },
          "description": "Create a new contact and return the person resource for that contact. The request returns a 400 error if more than one field is specified on a field that is a singleton for contact sources: * biographies * birthdays * genders * names Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "id": "people.people.createContact",
          "flatPath": "v1/people:createContact",
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "parameters": {
            "personFields": {
              "type": "string",
              "format": "google-fieldmask",
              "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. Defaults to all fields if not set. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
              "location": "query"
            },
            "sources": {
              "type": "string",
              "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set.",
              "enumDescriptions": [
                "Unspecified.",
                "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
                "Returns SourceType.CONTACT.",
                "Returns SourceType.DOMAIN_CONTACT.",
                "Returns SourceType.OTHER_CONTACT."
              ],
              "location": "query",
              "repeated": true,
              "enum": [
                "READ_SOURCE_TYPE_UNSPECIFIED",
                "READ_SOURCE_TYPE_PROFILE",
                "READ_SOURCE_TYPE_CONTACT",
                "READ_SOURCE_TYPE_DOMAIN_CONTACT",
                "READ_SOURCE_TYPE_OTHER_CONTACT"
              ]
            }
          }
        },
        "batchUpdateContacts": {
          "parameters": {},
          "parameterOrder": [],
          "response": {
            "$ref": "BatchUpdateContactsResponse"
          },
          "request": {
            "$ref": "BatchUpdateContactsRequest"
          },
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "description": "Update a batch of contacts and return a map of resource names to PersonResponses for the updated contacts. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "id": "people.people.batchUpdateContacts",
          "flatPath": "v1/people:batchUpdateContacts",
          "httpMethod": "POST",
          "path": "v1/people:batchUpdateContacts"
        },
        "searchContacts": {
          "id": "people.people.searchContacts",
          "response": {
            "$ref": "SearchResponse"
          },
          "parameters": {
            "sources": {
              "enum": [
                "READ_SOURCE_TYPE_UNSPECIFIED",
                "READ_SOURCE_TYPE_PROFILE",
                "READ_SOURCE_TYPE_CONTACT",
                "READ_SOURCE_TYPE_DOMAIN_CONTACT",
                "READ_SOURCE_TYPE_OTHER_CONTACT"
              ],
              "location": "query",
              "repeated": true,
              "type": "string",
              "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT if not set.",
              "enumDescriptions": [
                "Unspecified.",
                "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
                "Returns SourceType.CONTACT.",
                "Returns SourceType.DOMAIN_CONTACT.",
                "Returns SourceType.OTHER_CONTACT."
              ]
            },
            "readMask": {
              "format": "google-fieldmask",
              "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
              "type": "string",
              "location": "query"
            },
            "pageSize": {
              "location": "query",
              "type": "integer",
              "format": "int32",
              "description": "Optional. The number of results to return. Defaults to 10 if field is not set, or set to 0. Values greater than 30 will be capped to 30."
            },
            "query": {
              "description": "Required. The plain-text query for the request. The query is used to match prefix phrases of the fields on a person. For example, a person with name \"foo name\" matches queries such as \"f\", \"fo\", \"foo\", \"foo n\", \"nam\", etc., but not \"oo n\".",
              "type": "string",
              "location": "query"
            }
          },
          "description": "Provides a list of contacts in the authenticated user's grouped contacts that matches the search query. The query matches on a contact's `names`, `nickNames`, `emailAddresses`, `phoneNumbers`, and `organizations` fields that are from the CONTACT source. **IMPORTANT**: Before searching, clients should send a warmup request with an empty query to update the cache. See https://developers.google.com/people/v1/contacts#search_the_users_contacts",
          "flatPath": "v1/people:searchContacts",
          "parameterOrder": [],
          "httpMethod": "GET",
          "scopes": [
            "https://www.googleapis.com/auth/contacts",
            "https://www.googleapis.com/auth/contacts.readonly"
          ],
          "path": "v1/people:searchContacts"
        },
        "deleteContactPhoto": {
          "httpMethod": "DELETE",
          "description": "Delete a contact's photo. Mutate requests for the same user should be done sequentially to avoid // lock contention.",
          "response": {
            "$ref": "DeleteContactPhotoResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "flatPath": "v1/people/{peopleId}:deleteContactPhoto",
          "parameterOrder": [
            "resourceName"
          ],
          "path": "v1/{+resourceName}:deleteContactPhoto",
          "id": "people.people.deleteContactPhoto",
          "parameters": {
            "sources": {
              "enum": [
                "READ_SOURCE_TYPE_UNSPECIFIED",
                "READ_SOURCE_TYPE_PROFILE",
                "READ_SOURCE_TYPE_CONTACT",
                "READ_SOURCE_TYPE_DOMAIN_CONTACT",
                "READ_SOURCE_TYPE_OTHER_CONTACT"
              ],
              "enumDescriptions": [
                "Unspecified.",
                "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
                "Returns SourceType.CONTACT.",
                "Returns SourceType.DOMAIN_CONTACT.",
                "Returns SourceType.OTHER_CONTACT."
              ],
              "type": "string",
              "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set.",
              "location": "query",
              "repeated": true
            },
            "resourceName": {
              "required": true,
              "description": "Required. The resource name of the contact whose photo will be deleted.",
              "pattern": "^people/[^/]+$",
              "type": "string",
              "location": "path"
            },
            "personFields": {
              "location": "query",
              "description": "Optional. A field mask to restrict which fields on the person are returned. Multiple fields can be specified by separating them with commas. Defaults to empty if not set, which will skip the post mutate get. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
              "format": "google-fieldmask",
              "type": "string"
            }
          }
        }
      },
      "resources": {
        "connections": {
          "methods": {
            "list": {
              "parameterOrder": [
                "resourceName"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/contacts",
                "https://www.googleapis.com/auth/contacts.readonly"
              ],
              "parameters": {
                "requestMask.includeField": {
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask",
                  "description": "Required. Comma-separated list of person fields to be included in the response. Each path should start with `person.`: for example, `person.names` or `person.photos`."
                },
                "syncToken": {
                  "location": "query",
                  "description": "Optional. A sync token, received from a previous response `next_sync_token` Provide this to retrieve only the resources changed since the last request. When syncing, all other parameters provided to `people.connections.list` must match the first call that provided the sync token. More details about sync behavior at `people.connections.list`.",
                  "type": "string"
                },
                "pageSize": {
                  "location": "query",
                  "type": "integer",
                  "format": "int32",
                  "description": "Optional. The number of connections to include in the response. Valid values are between 1 and 1000, inclusive. Defaults to 100 if not set or set to 0."
                },
                "sortOrder": {
                  "enumDescriptions": [
                    "Sort people by when they were changed; older entries first.",
                    "Sort people by when they were changed; newer entries first.",
                    "Sort people by first name.",
                    "Sort people by last name."
                  ],
                  "type": "string",
                  "description": "Optional. The order in which the connections should be sorted. Defaults to `LAST_MODIFIED_ASCENDING`.",
                  "location": "query",
                  "enum": [
                    "LAST_MODIFIED_ASCENDING",
                    "LAST_MODIFIED_DESCENDING",
                    "FIRST_NAME_ASCENDING",
                    "LAST_NAME_ASCENDING"
                  ]
                },
                "resourceName": {
                  "description": "Required. The resource name to return connections for. Only `people/me` is valid.",
                  "required": true,
                  "type": "string",
                  "pattern": "^people/[^/]+$",
                  "location": "path"
                },
                "requestSyncToken": {
                  "type": "boolean",
                  "location": "query",
                  "description": "Optional. Whether the response should return `next_sync_token` on the last page of results. It can be used to get incremental changes since the last request by setting it on the request `sync_token`. More details about sync behavior at `people.connections.list`."
                },
                "sources": {
                  "type": "string",
                  "enumDescriptions": [
                    "Unspecified.",
                    "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
                    "Returns SourceType.CONTACT.",
                    "Returns SourceType.DOMAIN_CONTACT.",
                    "Returns SourceType.OTHER_CONTACT."
                  ],
                  "location": "query",
                  "repeated": true,
                  "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT and READ_SOURCE_TYPE_PROFILE if not set.",
                  "enum": [
                    "READ_SOURCE_TYPE_UNSPECIFIED",
                    "READ_SOURCE_TYPE_PROFILE",
                    "READ_SOURCE_TYPE_CONTACT",
                    "READ_SOURCE_TYPE_DOMAIN_CONTACT",
                    "READ_SOURCE_TYPE_OTHER_CONTACT"
                  ]
                },
                "personFields": {
                  "format": "google-fieldmask",
                  "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. Valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
                  "location": "query",
                  "type": "string"
                },
                "pageToken": {
                  "description": "Optional. A page token, received from a previous response `next_page_token`. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `people.connections.list` must match the first call that provided the page token.",
                  "type": "string",
                  "location": "query"
                }
              },
              "path": "v1/{+resourceName}/connections",
              "description": "Provides a list of the authenticated user's contacts. Sync tokens expire 7 days after the full sync. A request with an expired sync token will get an error with an [google.rpc.ErrorInfo](https://cloud.google.com/apis/design/errors#error_info) with reason \"EXPIRED_SYNC_TOKEN\". In the case of such an error clients should make a full sync request without a `sync_token`. The first page of a full sync request has an additional quota. If the quota is exceeded, a 429 error will be returned. This quota is fixed and can not be increased. When the `sync_token` is specified, resources deleted since the last sync will be returned as a person with `PersonMetadata.deleted` set to true. When the `page_token` or `sync_token` is specified, all other request parameters must match the first call. Writes may have a propagation delay of several minutes for sync requests. Incremental syncs are not intended for read-after-write use cases. See example usage at [List the user's contacts that have changed](/people/v1/contacts#list_the_users_contacts_that_have_changed).",
              "response": {
                "$ref": "ListConnectionsResponse"
              },
              "httpMethod": "GET",
              "flatPath": "v1/people/{peopleId}/connections",
              "id": "people.people.connections.list"
            }
          }
        }
      }
    },
    "otherContacts": {
      "methods": {
        "list": {
          "parameterOrder": [],
          "path": "v1/otherContacts",
          "parameters": {
            "requestSyncToken": {
              "type": "boolean",
              "location": "query",
              "description": "Optional. Whether the response should return `next_sync_token` on the last page of results. It can be used to get incremental changes since the last request by setting it on the request `sync_token`. More details about sync behavior at `otherContacts.list`."
            },
            "readMask": {
              "type": "string",
              "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. What values are valid depend on what ReadSourceType is used. If READ_SOURCE_TYPE_CONTACT is used, valid values are: * emailAddresses * metadata * names * phoneNumbers * photos If READ_SOURCE_TYPE_PROFILE is used, valid values are: * addresses * ageRanges * biographies * birthdays * calendarUrls * clientData * coverPhotos * emailAddresses * events * externalIds * genders * imClients * interests * locales * locations * memberships * metadata * miscKeywords * names * nicknames * occupations * organizations * phoneNumbers * photos * relations * sipAddresses * skills * urls * userDefined",
              "location": "query",
              "format": "google-fieldmask"
            },
            "syncToken": {
              "location": "query",
              "type": "string",
              "description": "Optional. A sync token, received from a previous response `next_sync_token` Provide this to retrieve only the resources changed since the last request. When syncing, all other parameters provided to `otherContacts.list` must match the first call that provided the sync token. More details about sync behavior at `otherContacts.list`."
            },
            "sources": {
              "location": "query",
              "repeated": true,
              "type": "string",
              "enumDescriptions": [
                "Unspecified.",
                "Returns SourceType.ACCOUNT, SourceType.DOMAIN_PROFILE, and SourceType.PROFILE.",
                "Returns SourceType.CONTACT.",
                "Returns SourceType.DOMAIN_CONTACT.",
                "Returns SourceType.OTHER_CONTACT."
              ],
              "enum": [
                "READ_SOURCE_TYPE_UNSPECIFIED",
                "READ_SOURCE_TYPE_PROFILE",
                "READ_SOURCE_TYPE_CONTACT",
                "READ_SOURCE_TYPE_DOMAIN_CONTACT",
                "READ_SOURCE_TYPE_OTHER_CONTACT"
              ],
              "description": "Optional. A mask of what source types to return. Defaults to READ_SOURCE_TYPE_CONTACT if not set. Possible values for this field are: * READ_SOURCE_TYPE_CONTACT * READ_SOURCE_TYPE_CONTACT,READ_SOURCE_TYPE_PROFILE Specifying READ_SOURCE_TYPE_PROFILE without specifying READ_SOURCE_TYPE_CONTACT is not permitted."
            },
            "pageToken": {
              "location": "query",
              "description": "Optional. A page token, received from a previous response `next_page_token`. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `otherContacts.list` must match the first call that provided the page token.",
              "type": "string"
            },
            "pageSize": {
              "description": "Optional. The number of \"Other contacts\" to include in the response. Valid values are between 1 and 1000, inclusive. Defaults to 100 if not set or set to 0.",
              "type": "integer",
              "location": "query",
              "format": "int32"
            }
          },
          "flatPath": "v1/otherContacts",
          "scopes": [
            "https://www.googleapis.com/auth/contacts.other.readonly"
          ],
          "id": "people.otherContacts.list",
          "httpMethod": "GET",
          "description": "List all \"Other contacts\", that is contacts that are not in a contact group. \"Other contacts\" are typically auto created contacts from interactions. Sync tokens expire 7 days after the full sync. A request with an expired sync token will get an error with an [google.rpc.ErrorInfo](https://cloud.google.com/apis/design/errors#error_info) with reason \"EXPIRED_SYNC_TOKEN\". In the case of such an error clients should make a full sync request without a `sync_token`. The first page of a full sync request has an additional quota. If the quota is exceeded, a 429 error will be returned. This quota is fixed and can not be increased. When the `sync_token` is specified, resources deleted since the last sync will be returned as a person with `PersonMetadata.deleted` set to true. When the `page_token` or `sync_token` is specified, all other request parameters must match the first call. Writes may have a propagation delay of several minutes for sync requests. Incremental syncs are not intended for read-after-write use cases. See example usage at [List the user's other contacts that have changed](/people/v1/other-contacts#list_the_users_other_contacts_that_have_changed).",
          "response": {
            "$ref": "ListOtherContactsResponse"
          }
        },
        "copyOtherContactToMyContactsGroup": {
          "parameters": {
            "resourceName": {
              "pattern": "^otherContacts/[^/]+$",
              "description": "Required. The resource name of the \"Other contact\" to copy.",
              "location": "path",
              "type": "string",
              "required": true
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/contacts",
            "https://www.googleapis.com/auth/contacts.other.readonly"
          ],
          "response": {
            "$ref": "Person"
          },
          "request": {
            "$ref": "CopyOtherContactToMyContactsGroupRequest"
          },
          "parameterOrder": [
            "resourceName"
          ],
          "path": "v1/{+resourceName}:copyOtherContactToMyContactsGroup",
          "httpMethod": "POST",
          "flatPath": "v1/otherContacts/{otherContactsId}:copyOtherContactToMyContactsGroup",
          "id": "people.otherContacts.copyOtherContactToMyContactsGroup",
          "description": "Copies an \"Other contact\" to a new contact in the user's \"myContacts\" group Mutate requests for the same user should be sent sequentially to avoid increased latency and failures."
        },
        "search": {
          "parameters": {
            "pageSize": {
              "description": "Optional. The number of results to return. Defaults to 10 if field is not set, or set to 0. Values greater than 30 will be capped to 30.",
              "format": "int32",
              "type": "integer",
              "location": "query"
            },
            "readMask": {
              "description": "Required. A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas. Valid values are: * emailAddresses * metadata * names * phoneNumbers",
              "format": "google-fieldmask",
              "location": "query",
              "type": "string"
            },
            "query": {
              "type": "string",
              "description": "Required. The plain-text query for the request. The query is used to match prefix phrases of the fields on a person. For example, a person with name \"foo name\" matches queries such as \"f\", \"fo\", \"foo\", \"foo n\", \"nam\", etc., but not \"oo n\".",
              "location": "query"
            }
          },
          "parameterOrder": [],
          "response": {
            "$ref": "SearchResponse"
          },
          "id": "people.otherContacts.search",
          "path": "v1/otherContacts:search",
          "scopes": [
            "https://www.googleapis.com/auth/contacts.other.readonly"
          ],
          "flatPath": "v1/otherContacts:search",
          "httpMethod": "GET",
          "description": "Provides a list of contacts in the authenticated user's other contacts that matches the search query. The query matches on a contact's `names`, `emailAddresses`, and `phoneNumbers` fields that are from the OTHER_CONTACT source. **IMPORTANT**: Before searching, clients should send a warmup request with an empty query to update the cache. See https://developers.google.com/people/v1/other-contacts#search_the_users_other_contacts"
        }
      }
    },
    "contactGroups": {
      "resources": {
        "members": {
          "methods": {
            "modify": {
              "parameters": {
                "resourceName": {
                  "location": "path",
                  "pattern": "^contactGroups/[^/]+$",
                  "type": "string",
                  "required": true,
                  "description": "Required. The resource name of the contact group to modify."
                }
              },
              "description": "Modify the members of a contact group owned by the authenticated user. The only system contact groups that can have members added are `contactGroups/myContacts` and `contactGroups/starred`. Other system contact groups are deprecated and can only have contacts removed.",
              "flatPath": "v1/contactGroups/{contactGroupsId}/members:modify",
              "parameterOrder": [
                "resourceName"
              ],
              "path": "v1/{+resourceName}/members:modify",
              "request": {
                "$ref": "ModifyContactGroupMembersRequest"
              },
              "id": "people.contactGroups.members.modify",
              "scopes": [
                "https://www.googleapis.com/auth/contacts"
              ],
              "response": {
                "$ref": "ModifyContactGroupMembersResponse"
              },
              "httpMethod": "POST"
            }
          }
        }
      },
      "methods": {
        "create": {
          "httpMethod": "POST",
          "response": {
            "$ref": "ContactGroup"
          },
          "parameterOrder": [],
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "description": "Create a new contact group owned by the authenticated user. Created contact group names must be unique to the users contact groups. Attempting to create a group with a duplicate name will return a HTTP 409 error. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "id": "people.contactGroups.create",
          "parameters": {},
          "path": "v1/contactGroups",
          "flatPath": "v1/contactGroups",
          "request": {
            "$ref": "CreateContactGroupRequest"
          }
        },
        "get": {
          "id": "people.contactGroups.get",
          "parameters": {
            "resourceName": {
              "location": "path",
              "pattern": "^contactGroups/[^/]+$",
              "required": true,
              "description": "Required. The resource name of the contact group to get.",
              "type": "string"
            },
            "maxMembers": {
              "format": "int32",
              "type": "integer",
              "location": "query",
              "description": "Optional. Specifies the maximum number of members to return. Defaults to 0 if not set, which will return zero members."
            },
            "groupFields": {
              "type": "string",
              "location": "query",
              "format": "google-fieldmask",
              "description": "Optional. A field mask to restrict which fields on the group are returned. Defaults to `metadata`, `groupType`, `memberCount`, and `name` if not set or set to empty. Valid fields are: * clientData * groupType * memberCount * metadata * name"
            }
          },
          "path": "v1/{+resourceName}",
          "description": "Get a specific contact group owned by the authenticated user by specifying a contact group resource name.",
          "flatPath": "v1/contactGroups/{contactGroupsId}",
          "scopes": [
            "https://www.googleapis.com/auth/contacts",
            "https://www.googleapis.com/auth/contacts.readonly"
          ],
          "response": {
            "$ref": "ContactGroup"
          },
          "parameterOrder": [
            "resourceName"
          ],
          "httpMethod": "GET"
        },
        "list": {
          "httpMethod": "GET",
          "flatPath": "v1/contactGroups",
          "id": "people.contactGroups.list",
          "parameterOrder": [],
          "description": "List all contact groups owned by the authenticated user. Members of the contact groups are not populated.",
          "response": {
            "$ref": "ListContactGroupsResponse"
          },
          "path": "v1/contactGroups",
          "scopes": [
            "https://www.googleapis.com/auth/contacts",
            "https://www.googleapis.com/auth/contacts.readonly"
          ],
          "parameters": {
            "syncToken": {
              "location": "query",
              "description": "Optional. A sync token, returned by a previous call to `contactgroups.list`. Only resources changed since the sync token was created will be returned.",
              "type": "string"
            },
            "pageToken": {
              "location": "query",
              "type": "string",
              "description": "Optional. The next_page_token value returned from a previous call to [ListContactGroups](/people/api/rest/v1/contactgroups/list). Requests the next page of resources."
            },
            "pageSize": {
              "description": "Optional. The maximum number of resources to return. Valid values are between 1 and 1000, inclusive. Defaults to 30 if not set or set to 0.",
              "format": "int32",
              "type": "integer",
              "location": "query"
            },
            "groupFields": {
              "format": "google-fieldmask",
              "location": "query",
              "description": "Optional. A field mask to restrict which fields on the group are returned. Defaults to `metadata`, `groupType`, `memberCount`, and `name` if not set or set to empty. Valid fields are: * clientData * groupType * memberCount * metadata * name",
              "type": "string"
            }
          }
        },
        "delete": {
          "parameters": {
            "deleteContacts": {
              "type": "boolean",
              "location": "query",
              "description": "Optional. Set to true to also delete the contacts in the specified group."
            },
            "resourceName": {
              "required": true,
              "pattern": "^contactGroups/[^/]+$",
              "type": "string",
              "location": "path",
              "description": "Required. The resource name of the contact group to delete."
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "path": "v1/{+resourceName}",
          "description": "Delete an existing contact group owned by the authenticated user by specifying a contact group resource name. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "flatPath": "v1/contactGroups/{contactGroupsId}",
          "id": "people.contactGroups.delete",
          "parameterOrder": [
            "resourceName"
          ],
          "response": {
            "$ref": "Empty"
          },
          "httpMethod": "DELETE"
        },
        "update": {
          "response": {
            "$ref": "ContactGroup"
          },
          "path": "v1/{+resourceName}",
          "id": "people.contactGroups.update",
          "httpMethod": "PUT",
          "scopes": [
            "https://www.googleapis.com/auth/contacts"
          ],
          "parameterOrder": [
            "resourceName"
          ],
          "flatPath": "v1/contactGroups/{contactGroupsId}",
          "request": {
            "$ref": "UpdateContactGroupRequest"
          },
          "description": "Update the name of an existing contact group owned by the authenticated user. Updated contact group names must be unique to the users contact groups. Attempting to create a group with a duplicate name will return a HTTP 409 error. Mutate requests for the same user should be sent sequentially to avoid increased latency and failures.",
          "parameters": {
            "resourceName": {
              "description": "The resource name for the contact group, assigned by the server. An ASCII string, in the form of `contactGroups/{contact_group_id}`.",
              "required": true,
              "type": "string",
              "pattern": "^contactGroups/[^/]+$",
              "location": "path"
            }
          }
        },
        "batchGet": {
          "parameterOrder": [],
          "response": {
            "$ref": "BatchGetContactGroupsResponse"
          },
          "httpMethod": "GET",
          "parameters": {
            "maxMembers": {
              "location": "query",
              "description": "Optional. Specifies the maximum number of members to return for each group. Defaults to 0 if not set, which will return zero members.",
              "format": "int32",
              "type": "integer"
            },
            "resourceNames": {
              "type": "string",
              "description": "Required. The resource names of the contact groups to get. There is a maximum of 200 resource names.",
              "location": "query",
              "repeated": true
            },
            "groupFields": {
              "format": "google-fieldmask",
              "location": "query",
              "type": "string",
              "description": "Optional. A field mask to restrict which fields on the group are returned. Defaults to `metadata`, `groupType`, `memberCount`, and `name` if not set or set to empty. Valid fields are: * clientData * groupType * memberCount * metadata * name"
            }
          },
          "path": "v1/contactGroups:batchGet",
          "scopes": [
            "https://www.googleapis.com/auth/contacts",
            "https://www.googleapis.com/auth/contacts.readonly"
          ],
          "description": "Get a list of contact groups owned by the authenticated user by specifying a list of contact group resource names.",
          "id": "people.contactGroups.batchGet",
          "flatPath": "v1/contactGroups:batchGet"
        }
      }
    }
  },
  "ownerDomain": "google.com",
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/user.addresses.read": {
          "description": "View your street addresses"
        },
        "https://www.googleapis.com/auth/contacts": {
          "description": "See, edit, download, and permanently delete your contacts"
        },
        "https://www.googleapis.com/auth/user.phonenumbers.read": {
          "description": "See and download your personal phone numbers"
        },
        "https://www.googleapis.com/auth/directory.readonly": {
          "description": "See and download your organization's Google Workspace directory"
        },
        "https://www.googleapis.com/auth/user.emails.read": {
          "description": "See and download all of your Google Account email addresses"
        },
        "https://www.googleapis.com/auth/user.birthday.read": {
          "description": "See and download your exact date of birth"
        },
        "https://www.googleapis.com/auth/userinfo.email": {
          "description": "See your primary Google Account email address"
        },
        "https://www.googleapis.com/auth/contacts.other.readonly": {
          "description": "See and download contact info automatically saved in your \"Other contacts\""
        },
        "https://www.googleapis.com/auth/user.organization.read": {
          "description": "See your education, work history and org info"
        },
        "https://www.googleapis.com/auth/user.gender.read": {
          "description": "See your gender"
        },
        "https://www.googleapis.com/auth/userinfo.profile": {
          "description": "See your personal info, including any personal info you've made publicly available"
        },
        "https://www.googleapis.com/auth/contacts.readonly": {
          "description": "See and download your contacts"
        }
      }
    }
  },
  "ownerName": "Google",
  "rootUrl": "https://people.googleapis.com/",
  "revision": "20261014",
  "version": "v1",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "version_module": true,
  "batchPath": "batch",
  "mtlsRootUrl": "https://people.mtls.googleapis.com/",
  "servicePath": "",
  "discoveryVersion": "v1",
  "parameters": {
    "key": {
      "type": "string",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query"
    },
    "oauth_token": {
      "type": "string",
      "description": "OAuth 2.0 token for the current user.",
      "location": "query"
    },
    "upload_protocol": {
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query",
      "type": "string"
    },
    "fields": {
      "location": "query",
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response."
    },
    "alt": {
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "type": "string",
      "description": "Data format for response.",
      "location": "query",
      "default": "json",
      "enum": [
        "json",
        "media",
        "proto"
      ]
    },
    "prettyPrint": {
      "default": "true",
      "type": "boolean",
      "location": "query",
      "description": "Returns response with indentations and line breaks."
    },
    "access_token": {
      "type": "string",
      "location": "query",
      "description": "OAuth access token."
    },
    "quotaUser": {
      "location": "query",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "type": "string"
    },
    "uploadType": {
      "location": "query",
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
    },
    "callback": {
      "description": "JSONP",
      "type": "string",
      "location": "query"
    },
    "$.xgafv": {
      "type": "string",
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query"
    }
  },
  "baseUrl": "https://people.googleapis.com/",
  "basePath": "",
  "protocol": "rest",
  "kind": "discovery#restDescription",
  "name": "people",
  "canonicalName": "People Service",
  "documentationLink": "https://developers.google.com/people/"
}
