> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Google Contacts Integration for AI Agents & Workflows

> Manage Google People (Contacts) — create, list, get, update, and delete contacts plus list Google Workspace directory people.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/google-contacts.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=23c1e68041a060a6b3d06130549b20aa" alt="Google Contacts logo" width="72" height="72" data-path="logos/google-contacts.svg" />

## Overview

Add **Google Contacts** to any ModuleX agent or workflow. Manage Google Contacts (People API v1) — create, list, get, update, and delete the authenticated user's contacts, plus list Google Workspace directory people. All calls go to `https://people.googleapis.com/v1`.

<Info>
  **Categories**: Productivity & Collaboration · CRM · **Auth**: Google OAuth2 · **Actions**: 6
</Info>

## Authentication

### Google OAuth2

Connect using Google OAuth (recommended) — Contacts + Directory scopes.

#### Required Credentials

| Field         | Description                           | Required | Format                                                     |
| ------------- | ------------------------------------- | -------- | ---------------------------------------------------------- |
| Client ID     | Google Cloud OAuth 2.0 Client ID.     | Yes      | `xxxxxxxxxxxx-xxxxxxxxxxxxxxxx.apps.googleusercontent.com` |
| Client Secret | Google Cloud OAuth 2.0 Client Secret. | Yes      | `GOCSPX-xxxxxxxxxxxxxxxxxxxxxxxx`                          |

#### OAuth Configuration

* **Authorization URL**: `https://accounts.google.com/o/oauth2/v2/auth`
* **Token URL**: `https://oauth2.googleapis.com/token`
* **Scopes**: `https://www.googleapis.com/auth/contacts`, `https://www.googleapis.com/auth/directory.readonly`

## Available Actions

<AccordionGroup>
  <Accordion title="create_contact — Create a new contact in the authenticated user's Google Contacts.">
    ### Parameters

    <ResponseField name="person_fields" type="array" required>
      Contact fields to populate and return — any of: names, emailAddresses, phoneNumbers, addresses, biographies, birthdays, calendarUrls, genders, urls.
    </ResponseField>

    <ResponseField name="first_name" type="string">
      Contact's first name (used when person\_fields includes 'names').
    </ResponseField>

    <ResponseField name="middle_name" type="string">
      Contact's middle name (used when person\_fields includes 'names').
    </ResponseField>

    <ResponseField name="last_name" type="string">
      Contact's last name (used when person\_fields includes 'names').
    </ResponseField>

    <ResponseField name="email" type="string">
      Contact's email address (used when person\_fields includes 'emailAddresses').
    </ResponseField>

    <ResponseField name="phone_number" type="string">
      Contact's phone number (used when person\_fields includes 'phoneNumbers').
    </ResponseField>

    <ResponseField name="street_address" type="string">
      Street address (used when person\_fields includes 'addresses').
    </ResponseField>

    <ResponseField name="city" type="string">
      City (used when person\_fields includes 'addresses').
    </ResponseField>

    <ResponseField name="state" type="string">
      State / region (used when person\_fields includes 'addresses').
    </ResponseField>

    <ResponseField name="zip_code" type="string">
      Postal / zip code (used when person\_fields includes 'addresses').
    </ResponseField>

    <ResponseField name="country" type="string">
      Country (used when person\_fields includes 'addresses').
    </ResponseField>

    <ResponseField name="biography" type="string">
      Biography text (used when person\_fields includes 'biographies').
    </ResponseField>

    <ResponseField name="birthday" type="string">
      Birthday in YYYY-MM-DD format (used when person\_fields includes 'birthdays').
    </ResponseField>

    <ResponseField name="calendar_url" type="string">
      Calendar URL (used when person\_fields includes 'calendarUrls').
    </ResponseField>

    <ResponseField name="gender" type="string">
      Gender: male, female, or unspecified (used when person\_fields includes 'genders').
    </ResponseField>

    <ResponseField name="urls" type="array">
      List of associated URLs (used when person\_fields includes 'urls').
    </ResponseField>

    <ResponseField name="additional_fields" type="object">
      Optional extra fields merged into the Person request body. See [https://developers.google.com/people/api/rest/v1/people](https://developers.google.com/people/api/rest/v1/people) for the full schema.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "ContactSummary": {
          "additionalProperties": false,
          "description": "A Google People `Person` resource, projected to the fields most tools read.",
          "properties": {
            "resource_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Name"
            },
            "etag": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Etag"
            },
            "display_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Display Name"
            },
            "given_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Given Name"
            },
            "family_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Family Name"
            },
            "middle_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Middle Name"
            },
            "email_addresses": {
              "items": {
                "type": "string"
              },
              "title": "Email Addresses",
              "type": "array"
            },
            "phone_numbers": {
              "items": {
                "type": "string"
              },
              "title": "Phone Numbers",
              "type": "array"
            },
            "organizations": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Organizations",
              "type": "array"
            },
            "addresses": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Addresses",
              "type": "array"
            },
            "biographies": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Biographies",
              "type": "array"
            },
            "urls": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Urls",
              "type": "array"
            },
            "birthdays": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Birthdays",
              "type": "array"
            },
            "genders": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Genders",
              "type": "array"
            },
            "raw": {
              "additionalProperties": true,
              "description": "Untouched upstream Person object — all fields requested via personFields.",
              "title": "Raw",
              "type": "object"
            }
          },
          "title": "ContactSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "contact": {
          "anyOf": [
            {
              "$ref": "#/$defs/ContactSummary"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "CreateContactOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_contact — Delete a contact by its People API resource name (e.g. 'people/c123456').">
    ### Parameters

    <ResponseField name="resource_name" type="string" required>
      The People API resource name identifying the contact, e.g. 'people/c123456789'.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "resource_name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Resource Name"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteContactOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_contact — Fetch a single contact by its People API resource name.">
    ### Parameters

    <ResponseField name="resource_name" type="string" required>
      The People API resource name identifying the contact, e.g. 'people/c123456789'.
    </ResponseField>

    <ResponseField name="fields" type="array" required>
      Contact fields to return — any of: 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.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "ContactSummary": {
          "additionalProperties": false,
          "description": "A Google People `Person` resource, projected to the fields most tools read.",
          "properties": {
            "resource_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Name"
            },
            "etag": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Etag"
            },
            "display_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Display Name"
            },
            "given_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Given Name"
            },
            "family_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Family Name"
            },
            "middle_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Middle Name"
            },
            "email_addresses": {
              "items": {
                "type": "string"
              },
              "title": "Email Addresses",
              "type": "array"
            },
            "phone_numbers": {
              "items": {
                "type": "string"
              },
              "title": "Phone Numbers",
              "type": "array"
            },
            "organizations": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Organizations",
              "type": "array"
            },
            "addresses": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Addresses",
              "type": "array"
            },
            "biographies": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Biographies",
              "type": "array"
            },
            "urls": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Urls",
              "type": "array"
            },
            "birthdays": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Birthdays",
              "type": "array"
            },
            "genders": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Genders",
              "type": "array"
            },
            "raw": {
              "additionalProperties": true,
              "description": "Untouched upstream Person object — all fields requested via personFields.",
              "title": "Raw",
              "type": "object"
            }
          },
          "title": "ContactSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "contact": {
          "anyOf": [
            {
              "$ref": "#/$defs/ContactSummary"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "GetContactOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_contacts — List every contact owned by the authenticated user (auto-paginates).">
    ### Parameters

    <ResponseField name="fields" type="array" required>
      Contact fields to return on every result — same enum as get\_contact's `fields`.
    </ResponseField>

    <ResponseField name="max_pages" type="integer">
      Maximum number of pages to fetch (1-500). Prevents runaway pagination. (Default: `50`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "ContactSummary": {
          "additionalProperties": false,
          "description": "A Google People `Person` resource, projected to the fields most tools read.",
          "properties": {
            "resource_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Name"
            },
            "etag": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Etag"
            },
            "display_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Display Name"
            },
            "given_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Given Name"
            },
            "family_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Family Name"
            },
            "middle_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Middle Name"
            },
            "email_addresses": {
              "items": {
                "type": "string"
              },
              "title": "Email Addresses",
              "type": "array"
            },
            "phone_numbers": {
              "items": {
                "type": "string"
              },
              "title": "Phone Numbers",
              "type": "array"
            },
            "organizations": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Organizations",
              "type": "array"
            },
            "addresses": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Addresses",
              "type": "array"
            },
            "biographies": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Biographies",
              "type": "array"
            },
            "urls": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Urls",
              "type": "array"
            },
            "birthdays": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Birthdays",
              "type": "array"
            },
            "genders": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Genders",
              "type": "array"
            },
            "raw": {
              "additionalProperties": true,
              "description": "Untouched upstream Person object — all fields requested via personFields.",
              "title": "Raw",
              "type": "object"
            }
          },
          "title": "ContactSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "contacts": {
          "items": {
            "$ref": "#/$defs/ContactSummary"
          },
          "title": "Contacts",
          "type": "array"
        },
        "total": {
          "default": 0,
          "title": "Total",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListContactsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_directory_contacts — List contacts from the Google Workspace directory (domain contacts / domain profiles). Requires the directory.readonly OAuth scope.">
    ### Parameters

    <ResponseField name="fields" type="array" required>
      Contact fields to return — same enum as get\_contact's `fields`.
    </ResponseField>

    <ResponseField name="source" type="string" required>
      Directory source to return: 'DIRECTORY\_SOURCE\_TYPE\_DOMAIN\_CONTACT' or 'DIRECTORY\_SOURCE\_TYPE\_DOMAIN\_PROFILE'.
    </ResponseField>

    <ResponseField name="merge_sources" type="array">
      Optional. Additional sources to merge in via verified join keys. Any of: 'DIRECTORY\_MERGE\_SOURCE\_TYPE\_UNSPECIFIED', 'DIRECTORY\_MERGE\_SOURCE\_TYPE\_CONTACT'.
    </ResponseField>

    <ResponseField name="page_size" type="integer">
      Number of people per response page (1-1000). Defaults to 100. (Default: `100`)
    </ResponseField>

    <ResponseField name="page_token" type="string">
      Page token returned from a previous response's nextPageToken.
    </ResponseField>

    <ResponseField name="request_sync_token" type="boolean">
      Whether the response should include a nextSyncToken for incremental sync. (Default: `false`)
    </ResponseField>

    <ResponseField name="sync_token" type="string">
      Sync token from a previous response — fetch only resources changed since then.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "ContactSummary": {
          "additionalProperties": false,
          "description": "A Google People `Person` resource, projected to the fields most tools read.",
          "properties": {
            "resource_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Name"
            },
            "etag": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Etag"
            },
            "display_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Display Name"
            },
            "given_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Given Name"
            },
            "family_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Family Name"
            },
            "middle_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Middle Name"
            },
            "email_addresses": {
              "items": {
                "type": "string"
              },
              "title": "Email Addresses",
              "type": "array"
            },
            "phone_numbers": {
              "items": {
                "type": "string"
              },
              "title": "Phone Numbers",
              "type": "array"
            },
            "organizations": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Organizations",
              "type": "array"
            },
            "addresses": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Addresses",
              "type": "array"
            },
            "biographies": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Biographies",
              "type": "array"
            },
            "urls": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Urls",
              "type": "array"
            },
            "birthdays": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Birthdays",
              "type": "array"
            },
            "genders": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Genders",
              "type": "array"
            },
            "raw": {
              "additionalProperties": true,
              "description": "Untouched upstream Person object — all fields requested via personFields.",
              "title": "Raw",
              "type": "object"
            }
          },
          "title": "ContactSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "people": {
          "items": {
            "$ref": "#/$defs/ContactSummary"
          },
          "title": "People",
          "type": "array"
        },
        "next_page_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Page Token"
        },
        "next_sync_token": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Next Sync Token"
        },
        "total": {
          "default": 0,
          "title": "Total",
          "type": "integer"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListDirectoryContactsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="update_contact — Update an existing contact. Re-fetches the latest etag first to avoid stale-update errors.">
    ### Parameters

    <ResponseField name="resource_name" type="string" required>
      The People API resource name identifying the contact to update.
    </ResponseField>

    <ResponseField name="update_person_fields" type="array" required>
      Contact sections to update — any of: names, emailAddresses, phoneNumbers, addresses, biographies, birthdays, calendarUrls, genders, urls.
    </ResponseField>

    <ResponseField name="first_name" type="string">
      Updated first name (used when update\_person\_fields includes 'names').
    </ResponseField>

    <ResponseField name="middle_name" type="string">
      Updated middle name (used when update\_person\_fields includes 'names').
    </ResponseField>

    <ResponseField name="last_name" type="string">
      Updated last name (used when update\_person\_fields includes 'names').
    </ResponseField>

    <ResponseField name="email" type="string">
      Updated email (used when update\_person\_fields includes 'emailAddresses').
    </ResponseField>

    <ResponseField name="phone_number" type="string">
      Updated phone (used when update\_person\_fields includes 'phoneNumbers').
    </ResponseField>

    <ResponseField name="street_address" type="string">
      Updated street address (used when update\_person\_fields includes 'addresses').
    </ResponseField>

    <ResponseField name="city" type="string">
      Updated city.
    </ResponseField>

    <ResponseField name="state" type="string">
      Updated state / region.
    </ResponseField>

    <ResponseField name="zip_code" type="string">
      Updated postal / zip code.
    </ResponseField>

    <ResponseField name="country" type="string">
      Updated country.
    </ResponseField>

    <ResponseField name="biography" type="string">
      Updated biography.
    </ResponseField>

    <ResponseField name="birthday" type="string">
      Updated birthday in YYYY-MM-DD format.
    </ResponseField>

    <ResponseField name="calendar_url" type="string">
      Updated calendar URL.
    </ResponseField>

    <ResponseField name="gender" type="string">
      Updated gender: male, female, or unspecified.
    </ResponseField>

    <ResponseField name="urls" type="array">
      Updated list of associated URLs.
    </ResponseField>

    <ResponseField name="additional_fields" type="object">
      Optional extra fields merged into the Person request body. See [https://developers.google.com/people/api/rest/v1/people](https://developers.google.com/people/api/rest/v1/people) for the full schema.
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "ContactSummary": {
          "additionalProperties": false,
          "description": "A Google People `Person` resource, projected to the fields most tools read.",
          "properties": {
            "resource_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Resource Name"
            },
            "etag": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Etag"
            },
            "display_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Display Name"
            },
            "given_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Given Name"
            },
            "family_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Family Name"
            },
            "middle_name": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Middle Name"
            },
            "email_addresses": {
              "items": {
                "type": "string"
              },
              "title": "Email Addresses",
              "type": "array"
            },
            "phone_numbers": {
              "items": {
                "type": "string"
              },
              "title": "Phone Numbers",
              "type": "array"
            },
            "organizations": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Organizations",
              "type": "array"
            },
            "addresses": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Addresses",
              "type": "array"
            },
            "biographies": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Biographies",
              "type": "array"
            },
            "urls": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Urls",
              "type": "array"
            },
            "birthdays": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Birthdays",
              "type": "array"
            },
            "genders": {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "title": "Genders",
              "type": "array"
            },
            "raw": {
              "additionalProperties": true,
              "description": "Untouched upstream Person object — all fields requested via personFields.",
              "title": "Raw",
              "type": "object"
            }
          },
          "title": "ContactSummary",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "contact": {
          "anyOf": [
            {
              "$ref": "#/$defs/ContactSummary"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "UpdateContactOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* Google People API default quota: **90 reads/minute** and
  **60 writes/minute** per user, **1,200 reads/minute** per project. Higher
  limits available via Google Cloud quota request.
* `list_contacts` auto-paginates through `people/me/connections` — beware large
  contact directories (each page is 100 contacts by default; the implementation
  fetches every page in sequence).
* `list_directory_contacts` returns one page per call; supply `page_token` /
  `sync_token` from a previous response for pagination or incremental sync.
* `update_contact` performs an extra `GET` to refresh the etag before the
  `PATCH`. Stale-etag updates are rejected by Google with HTTP 400.
* **Error model**: non-2xx responses raise `httpx.HTTPStatusError`. The
  modulex runtime surfaces these as failed tool calls — plan for retries on the
  agent side if a transient 5xx is possible.

## Related integrations

<CardGroup cols={3}>
  <Card title="Insightly" href="/integrations/tools/insightly" />

  <Card title="Microsoft Dynamics 365 Sales" href="/integrations/tools/microsoft-dynamics-365-sales" />

  <Card title="Bloomerang" href="/integrations/tools/bloomerang" />
</CardGroup>

## Links

* [Google Contacts](https://contacts.google.com)
