Skip to main content
Tools Reference

Google Workspace Tools

Written By Christopher Scaminaci

Last updated 7 days ago

Google Workspace Tools

gws_ · 652 tools · Free 303 · Pro 349 Twenty Google APIs behind one connection: Directory, Reports, Data Transfer, Gmail, Drive, Calendar, Groups Settings, Licensing, Alert Center, Vault, Chrome policy, Chrome management, Reseller, Cloud Channel, Cloud Identity, People, Tasks, Chat, Meet and Keep. The credential is a service account with domain-wide delegation - client email, private key and a super-admin to impersonate, plus an optional customer id and reseller account id. Scopes are granted per family, so a newly added family needs a fresh grant before its tools work. Admin tools take an optional customer id; mailbox, Drive, Calendar, People, Tasks, Chat, Meet and Keep tools act as a named user and require userEmail. Paging is pageToken in, nextPageToken out, with per-resource size limits. Downloads return a short-lived link and stop at 50 MB; uploads are not supported.

All connector tools · Google Workspace setup guide

Google Workspace tool groups

Users

ToolPlanAccessSummary
gws_create_userProWriteCreate a user.
gws_create_user_aliasProWriteAdd an alias address to a user.
gws_delete_userProDestructiveDelete a user account.
gws_delete_user_aliasProDestructiveRemove an alias address from a user.
gws_delete_user_photoProDestructiveRemove a user's profile photo, reverting them to the default placeholder.
gws_get_userFreeRead-onlyRetrieve one user.
gws_get_user_photoFreeRead-onlyRetrieve a user's profile photo.
gws_list_user_aliasesFreeRead-onlyList a user's alias email addresses — additional addresses that deliver to the same mailbox.
gws_list_usersFreeRead-onlyList users in the Workspace account.
gws_make_user_adminProDestructiveGrant or revoke SUPER-ADMINISTRATOR status.
gws_patch_userProWriteUpdate named fields on a user, merging rather than replacing — omitted fields are left alone.
gws_sign_out_userProDestructiveInvalidate EVERY active web and device session for a user, signing them out everywhere at once.
gws_undelete_userProWriteRestore a user deleted within the last 20 days.
gws_update_userProDestructiveREPLACE a user's record wholesale.
gws_update_user_photoProWriteSet a user's profile photo.

[Google Workspace] Create a user. Additive — it creates a new account and changes nothing existing. Required body fields are primaryEmail, name.givenName, name.familyName and password. Example: {"primaryEmail":"jsmith@example.com","name":{"givenName":"Jane","familyName":"Smith"},"password":"a-strong-password","changePasswordAtNextLogin":true,"orgUnitPath":"/Sales"}. NOTE: creating a user normally consumes a licence and therefore affects the customer's bill. Google rate-limits user creation to about 10 per domain per second.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object body. Requires primaryEmail, name.givenName, name.familyName and password.

[Google Workspace] Add an alias address to a user. Additive — mail to the alias arrives in the same mailbox and the primary address is unaffected. The alias domain must already be registered with the Workspace account (see gws_list_domains). Aliases can take up to 24 hours to begin receiving mail.

ParamTypeRequiredDefaultDescription
aliasstringyesThe alias address to add, e.g. "sales@example.com".
userKeystringyesPrimary email, alias email, or numeric user id of the user receiving the alias.

[Google Workspace] Delete a user account. The account stops working immediately and its Gmail, Drive and Calendar data become inaccessible. Google keeps it restorable via gws_undelete_user for 20 days, after which it is gone permanently. Consider two things first: transfer the user's Drive and Calendar data with gws_create_data_transfer, since deletion does NOT reassign it; and prefer SUSPENDING the account (gws_patch_user with {"suspended":true}) if the intent is to block access rather than to remove the person, because suspension is instantly reversible and preserves everything.

ParamTypeRequiredDefaultDescription
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] Remove an alias address from a user. Destructive: mail sent to that address stops being delivered immediately and bounces, which silently breaks anything still addressing the old alias — mailing lists, saved contacts, external systems. The primary address and the mailbox itself are unaffected.

ParamTypeRequiredDefaultDescription
aliasstringyesThe alias address to remove.
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] Remove a user's profile photo, reverting them to the default placeholder. Destructive: the stored image is gone and cannot be recovered through the API — re-setting one means uploading the original file again.

ParamTypeRequiredDefaultDescription
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] Retrieve one user. userKey accepts the primary email address, any alias address, or the numeric user id — all three resolve. Use projection FULL to include custom schema fields, or CUSTOM with customFieldMask to include only named schemas. The response carries the user's org unit path, admin status, suspension state, last login, and 2-step verification enrolment.

ParamTypeRequiredDefaultDescription
customFieldMaskstringnonullOptional. Comma-separated custom schema names; required when projection is CUSTOM.
projectionstringnonullOptional. BASIC (default), FULL, or CUSTOM.
userKeystringyesPrimary email, alias email, or numeric user id.
viewTypestringnonullOptional. admin_view (default) or domain_public.

[Google Workspace] Retrieve a user's profile photo. The image comes back as web-safe base64 in the photoData field, along with its dimensions and mime type. A user who has never set a photo returns 404 rather than an empty result.

ParamTypeRequiredDefaultDescription
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] List a user's alias email addresses — additional addresses that deliver to the same mailbox. Unpaginated: Google always returns the complete set, so there is no page token. When the user has no aliases the aliases key is omitted entirely rather than returned empty.

ParamTypeRequiredDefaultDescription
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] List users in the Workspace account. Paginates with pageToken/nextPageToken; maxResults caps at 500 and is clamped there. Scope defaults to the whole customer — pass domain only to narrow to one domain of a multi-domain customer (domain and customer are mutually exclusive upstream, so StackJack sends whichever applies). The query parameter takes Google's user search syntax, e.g. "isAdmin=true", "orgUnitPath='/Sales'", "email:jsmith*", or "isSuspended=true". Set showDeleted to "true" to list recently deleted users instead of active ones (they remain restorable for 20 days). NOTE: when no user matches, Google OMITS the users key entirely rather than returning an empty array.

ParamTypeRequiredDefaultDescription
customFieldMaskstringnonullOptional. Comma-separated custom schema names; required when projection is CUSTOM.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
domainstringnonullOptional. Narrow to one domain, e.g. "example.com". Omit for the whole customer. Cannot be combined with customerId, which Google rejects: passing domain DROPS a customerId override, so to list a resold customer pass customerId alone.
maxResultsintegernonullOptional. Page size, 1-500. Values above 500 are clamped.
orderBystringnonullOptional. Sort field: email, givenName, familyName.
pageTokenstringnonullOptional. nextPageToken from the previous page.
projectionstringnonullOptional. BASIC (default), FULL, or CUSTOM. CUSTOM requires customFieldMask.
querystringnonullOptional. Google user search query, e.g. "isAdmin=true" or "orgUnitPath='/Sales'".
showDeletedstringnonullOptional. "true" to list deleted users instead of active ones.
sortOrderstringnonullOptional. ASCENDING or DESCENDING.

[Google Workspace] Grant or revoke SUPER-ADMINISTRATOR status. Destructive in the security sense: granting it hands the account total control of the domain — every user, every device, all mail and all files — and revoking it can lock an administrator out of work they are mid-way through. Nothing is deleted either way. Pass status=true to grant, false to revoke. For anything narrower than full control, assign a specific admin role with gws_assign_role instead.

ParamTypeRequiredDefaultDescription
statusbooleanyestrue grants super-admin, false revokes it.
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] Update named fields on a user, merging rather than replacing — omitted fields are left alone. This is the tool to use for almost every user edit. Suspend with {"suspended":true} and restore with {"suspended":false}; move org unit with {"orgUnitPath":"/Sales/West"}; rename with {"name":{"givenName":"Jane","familyName":"Doe"}}; force a password reset with {"changePasswordAtNextLogin":true}. Suspending is the reversible alternative to deletion and is what offboarding usually wants: it blocks sign-in immediately while preserving the account and its data.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change, e.g. {"suspended":true}.
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] Invalidate EVERY active web and device session for a user, signing them out everywhere at once. Destructive: the person loses unsaved work in open sessions and must re-authenticate on every device, including phones. This is a standard containment step for a suspected account compromise — pair it with a password reset (gws_patch_user with {"password":"...","changePasswordAtNextLogin":true}), since signing out alone does not stop someone who knows the password from signing straight back in.

ParamTypeRequiredDefaultDescription
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] Restore a user deleted within the last 20 days. Restorative, not destructive. IMPORTANT: this takes the NUMERIC user id, not the email address — find it with gws_list_users passing showDeleted="true". Optionally place the restored user in a specific org unit; the default is the root org unit "/".

ParamTypeRequiredDefaultDescription
orgUnitPathstringnonullOptional. Org unit to restore into, e.g. "/Sales". Defaults to "/".
userKeystringyesNUMERIC user id of the deleted user (from gws_list_users with showDeleted=true).

[Google Workspace] REPLACE a user's record wholesale. This is Google's PUT: any field you omit is CLEARED and any list you omit is emptied, so sending a partial body silently erases phone numbers, addresses, custom schema values and more. Prefer gws_patch_user for ordinary edits — it merges instead, and is the right tool for suspending a user ({"suspended":true}), moving them between org units, or changing a single field.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON user object. Omitted fields are cleared.
userKeystringyesPrimary email, alias email, or numeric user id.

[Google Workspace] Set a user's profile photo. Reversible — setting a new photo simply replaces the previous one, and the change affects only the picture. photoData must be WEB-SAFE base64 (the standard + and / characters replaced with - and _), which is not the same as ordinary base64. Example: {"photoData":"_9j_4AAQSkZJRg...","mimeType":"JPEG"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with web-safe base64 photoData and mimeType.
userKeystringyesPrimary email, alias email, or numeric user id.

Groups

ToolPlanAccessSummary
gws_create_groupProWriteCreate a group.
gws_create_group_aliasProWriteAdd an alias address to a group.
gws_delete_groupProDestructiveDelete a group.
gws_delete_group_aliasProDestructiveRemove an alias address from a group.
gws_get_groupFreeRead-onlyRetrieve one group.
gws_list_group_aliasesFreeRead-onlyList a group's alias addresses — additional addresses that deliver to the same group.
gws_list_groupsFreeRead-onlyList groups.
gws_patch_groupProWriteUpdate named fields on a group, merging rather than replacing — omitted fields are left alone.
gws_update_groupProDestructiveREPLACE a group's record wholesale.

[Google Workspace] Create a group. Additive — nothing existing changes. Only email is required: {"email":"sales@example.com","name":"Sales Team","description":"Regional sales"}. The new group starts empty; add people with gws_add_group_member. A newly created group takes Google's default access settings, so adjust posting and visibility policy with gws_update_group_settings if the defaults are not what you want.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object body. email is required; name and description are optional.

[Google Workspace] Add an alias address to a group. Additive — mail to the alias reaches the same group and the primary address keeps working. The alias domain must already be registered with the Workspace account. Useful for retiring an old address gracefully: rename the group, then add the former address as an alias so nothing bounces.

ParamTypeRequiredDefaultDescription
aliasstringyesThe alias address to add.
groupKeystringyesGroup email address, alias, or numeric id.

[Google Workspace] Delete a group. Destructive and NOT recoverable through the API — unlike a deleted user, a deleted group has no 20-day restore window. Its archived conversations are destroyed, its address stops accepting mail and bounces, and every permission granted TO the group (shared drives, calendars, documents) is lost, which can silently remove access for everyone who held it through that group. Members' own accounts are unaffected.

ParamTypeRequiredDefaultDescription
groupKeystringyesGroup email address, alias, or numeric id.

[Google Workspace] Remove an alias address from a group. Destructive: mail to that address stops being delivered immediately and bounces, breaking anything still addressing it. The group's primary address is unaffected.

ParamTypeRequiredDefaultDescription
aliasstringyesThe alias address to remove.
groupKeystringyesGroup email address, alias, or numeric id.

[Google Workspace] Retrieve one group. groupKey accepts the group's email address, an alias address, or its numeric id. The response carries the name, description, direct member count and aliases. For the group's POSTING and MODERATION policy — who may post, who may view members, whether external senders are allowed — use gws_get_group_settings instead; that lives in a separate Google API and is not part of this response.

ParamTypeRequiredDefaultDescription
groupKeystringyesGroup email address, alias, or numeric id.

[Google Workspace] List a group's alias addresses — additional addresses that deliver to the same group. Unpaginated: Google returns the complete set. When the group has no aliases the aliases key is omitted entirely.

ParamTypeRequiredDefaultDescription
groupKeystringyesGroup email address, alias, or numeric id.

[Google Workspace] List groups. Paginates with pageToken/nextPageToken; maxResults caps at 200 (NOT 500 — the group cap is lower than the user cap) and is clamped there. Three mutually exclusive scoping modes: pass userKey to list only the groups one person belongs to (the narrowest, and what "which groups is Jane in?" wants), pass domain to narrow to one domain, or pass neither for the whole customer. StackJack sends whichever applies, since Google rejects more than one. When nothing matches, the groups key is omitted entirely rather than returned empty.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
domainstringnonullOptional. Narrow to one domain, e.g. "example.com". Cannot be combined with customerId, which Google rejects: passing domain DROPS a customerId override, so to list a resold customer pass customerId alone.
maxResultsintegernonullOptional. Page size, 1-200. Values above 200 are clamped.
orderBystringnonullOptional. Sort field: email.
pageTokenstringnonullOptional. nextPageToken from the previous page.
querystringnonullOptional. Google group search query, e.g. "email:sales*" or "name:Marketing*".
sortOrderstringnonullOptional. ASCENDING or DESCENDING.
userKeystringnonullOptional. List only groups this user belongs to — email or numeric id. Takes precedence over both domain and customerId, and DROPS a customerId override.

[Google Workspace] Update named fields on a group, merging rather than replacing — omitted fields are left alone. The right tool for renaming a group ({"name":"Sales EMEA"}) or editing its description. Changing the email address here also renames the group's address, and mail to the old one stops arriving unless you keep it as an alias.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
groupKeystringyesGroup email address, alias, or numeric id.

[Google Workspace] REPLACE a group's record wholesale. Google's PUT: omitted fields are CLEARED, so a body carrying only a new name will also wipe the description. Prefer gws_patch_group for ordinary edits. Membership is NOT affected by either tool — it lives on its own endpoints.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON group object. Omitted fields are cleared.
groupKeystringyesGroup email address, alias, or numeric id.

Group Members

ToolPlanAccessSummary
gws_add_group_memberProWriteAdd a member to a group.
gws_check_group_membershipFreeRead-onlyAnswer whether a user is a member of a group, returning {"isMember":true|false}.
gws_get_group_memberFreeRead-onlyRetrieve one membership record, carrying the member's role (OWNER, MANAGER or MEMBER), type (USER, GROUP, CUSTOMER or EXTERNAL) and mail delivery preference.
gws_list_group_membersFreeRead-onlyList a group's members.
gws_patch_group_memberProWriteUpdate named fields on a membership, merging rather than replacing.
gws_remove_group_memberProDestructiveRemove a member from a group.
gws_update_group_memberProDestructiveREPLACE a membership record wholesale.

[Google Workspace] Add a member to a group. Additive. Body: {"email":"jsmith@example.com","role":"MEMBER"} — role is MEMBER (default), MANAGER or OWNER. The email may name a user, another group (creating a nested membership), or an external address if the group's settings allow outside members. Adding someone GRANTS them everything the group grants: shared drives, calendars and documents shared with it, so treat a group add as an access grant rather than a mailing-list change.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object body: {"email":"...","role":"MEMBER"}.
groupKeystringyesGroup email address, alias, or numeric id.

[Google Workspace] Answer whether a user is a member of a group, returning {"isMember":true|false}. Unlike gws_get_group_member this DOES follow nested groups, so it answers the effective-access question — "can this person reach what the group grants?" — rather than the direct-membership one. The cheapest way to check one person against one group; use gws_list_group_members when you need the whole roster.

ParamTypeRequiredDefaultDescription
groupKeystringyesGroup email address, alias, or numeric id.
memberKeystringyesMember email address or numeric id.

[Google Workspace] Retrieve one membership record, carrying the member's role (OWNER, MANAGER or MEMBER), type (USER, GROUP, CUSTOMER or EXTERNAL) and mail delivery preference. Returns 404 when the member belongs only INDIRECTLY through a nested group — use gws_check_group_membership if the question is simply whether someone is effectively a member.

ParamTypeRequiredDefaultDescription
groupKeystringyesGroup email address, alias, or numeric id.
memberKeystringyesMember email address or numeric id.

[Google Workspace] List a group's members. Paginates with pageToken/nextPageToken; maxResults caps at 200 and is clamped there. By DEFAULT this returns only DIRECT members — a person who belongs through a nested group does NOT appear. Pass includeDerivedMembership=true to expand nested groups and see everyone who actually receives the group's mail, which is usually what an access review wants. Filter by role with roles="OWNER,MANAGER" (comma-separated, no spaces). When the group is empty the members key is omitted entirely rather than returned empty.

ParamTypeRequiredDefaultDescription
groupKeystringyesGroup email address, alias, or numeric id.
includeDerivedMembershipbooleannonullOptional. true expands nested groups to show indirect members too.
maxResultsintegernonullOptional. Page size, 1-200. Values above 200 are clamped.
pageTokenstringnonullOptional. nextPageToken from the previous page.
rolesstringnonullOptional. Comma-separated roles to include: OWNER, MANAGER, MEMBER.

[Google Workspace] Update named fields on a membership, merging rather than replacing. The right tool for promoting or demoting someone: {"role":"MANAGER"}. Omitted fields are left alone.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change, e.g. {"role":"MANAGER"}.
groupKeystringyesGroup email address, alias, or numeric id.
memberKeystringyesMember email address or numeric id.

[Google Workspace] Remove a member from a group. Destructive as an ACCESS REVOCATION: the person immediately loses everything the group granted — shared drives, calendars and documents shared with it — and stops receiving its mail. Their own account and files are untouched. The change takes effect at once and is undone only by adding them back, which does not restore anything they created under the group's access in the meantime.

ParamTypeRequiredDefaultDescription
groupKeystringyesGroup email address, alias, or numeric id.
memberKeystringyesMember email address or numeric id.

[Google Workspace] REPLACE a membership record wholesale. Google's PUT: fields omitted from the body are cleared, so a body carrying only a role also resets the member's mail delivery preference. Prefer gws_patch_group_member for ordinary role changes. Note that demoting the last OWNER can leave a group with nobody able to administer it from the Groups interface.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON membership object. Omitted fields are cleared.
groupKeystringyesGroup email address, alias, or numeric id.
memberKeystringyesMember email address or numeric id.

Organizational Units

ToolPlanAccessSummary
gws_create_org_unitProWriteCreate an organizational unit.
gws_delete_org_unitProDestructiveDelete an organizational unit.
gws_get_org_unitFreeRead-onlyRetrieve one organizational unit by its full path, e.g. "/Sales/West".
gws_list_org_unitsFreeRead-onlyList organizational units.
gws_patch_org_unitProWriteUpdate named fields on an organizational unit, merging rather than replacing.
gws_update_org_unitProDestructiveREPLACE an organizational unit's record wholesale.

[Google Workspace] Create an organizational unit. Additive — the new unit starts empty and inherits its parent's settings. Body: {"name":"West","parentOrgUnitPath":"/Sales","description":"Western region"}. Google rate-limits org unit creation to about one per customer per second, so create them one at a time rather than in a burst.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object body. Requires name and parentOrgUnitPath.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Delete an organizational unit. Destructive: every policy configured on it is lost and is not recoverable through the API. Google refuses to delete a unit that still contains users, devices or child units, so move those out first — and note that moving users into the parent silently re-applies the PARENT's policy to them, which may loosen restrictions the deleted unit was enforcing. Check what the unit contains with gws_list_users (query "orgUnitPath='/Path'") before deleting.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitPathstringyesFull org unit path, e.g. "/Sales/West". Slashes intact, not encoded.

[Google Workspace] Retrieve one organizational unit by its full path, e.g. "/Sales/West". Pass the path with its slashes exactly as shown — do not URL-encode them. The response carries the unit's name, description, parent path and whether it blocks inheritance of parent settings.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitPathstringyesFull org unit path, e.g. "/Sales/West". Slashes intact, not encoded.

[Google Workspace] List organizational units. UNPAGINATED — Google always returns the full result set, so there is no page token and no page size. By default this lists the CHILDREN of the root; pass orgUnitPath to list beneath a different node, and type="all" to return the whole subtree rather than just immediate children. Org units are how Workspace scopes policy, so this is the map to read before changing any setting that applies to a subset of users.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitPathstringnonullOptional. Parent path to list beneath, e.g. "/Sales". Defaults to the root.
typestringnonullOptional. "children" (default, immediate children only) or "all" (the whole subtree).

[Google Workspace] Update named fields on an organizational unit, merging rather than replacing. The right tool for renaming ({"name":"West Region"}) or editing a description. Be aware that setting {"blockInheritance":true} stops the unit inheriting parent policy, which changes the effective settings for everyone in it.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitPathstringyesFull org unit path, e.g. "/Sales/West". Slashes intact, not encoded.

[Google Workspace] REPLACE an organizational unit's record wholesale. Google's PUT: omitted fields are cleared. Prefer gws_patch_org_unit for ordinary edits. Changing parentOrgUnitPath MOVES the unit and everything beneath it, which re-applies whatever policy the new parent carries to every user and device inside — a change that can be far larger than it looks.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON org unit object. Omitted fields are cleared.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitPathstringyesFull org unit path, e.g. "/Sales/West". Slashes intact, not encoded.

ChromeOS Devices

ToolPlanAccessSummary
gws_batch_change_chromeos_device_statusProDestructiveChange the enrollment status of a batch of ChromeOS devices.
gws_count_chromeos_devicesFreeRead-onlyCount ChromeOS devices without listing them.
gws_get_chromeos_deviceFreeRead-onlyRetrieve one ChromeOS device by its deviceId.
gws_get_chromeos_device_commandFreeRead-onlyCheck the outcome of a remote command previously sent with gws_issue_chromeos_device_command.
gws_issue_chromeos_device_commandProDestructiveSend a remote command to one ChromeOS device.
gws_list_chromeos_devicesFreeRead-onlyList enrolled ChromeOS devices.
gws_move_chromeos_devices_to_org_unitProWriteMove up to 50 ChromeOS devices into a different organizational unit in one call.
gws_patch_chromeos_deviceProWriteUpdate named annotation fields on a ChromeOS device, merging rather than replacing.
gws_update_chromeos_deviceProDestructiveREPLACE a ChromeOS device's editable record wholesale.

[Google Workspace] Change the enrollment status of a batch of ChromeOS devices. DEPROVISION IS IRREVERSIBLE through the API: a deprovisioned device releases its licence, stops receiving policy, and can only be re-enrolled by physically wiping and re-enrolling the hardware — for some licence types that requires a new licence. DISABLE is the recoverable option for a lost or stolen device: it locks the device and shows a message, and REENABLE undoes it. Body: {"deviceIds":["..."],"changeChromeOsDeviceStatusAction":"CHANGE_CHROME_OS_DEVICE_STATUS_ACTION_DISABLE"}; deprovisioning also requires a deprovisionReason. Confirm which devices are in the list before running this.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with deviceIds and changeChromeOsDeviceStatusAction (plus deprovisionReason when deprovisioning).
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Count ChromeOS devices without listing them. Returns a SINGLE total — {"count":"142"} — for the devices matching the request, not a breakdown by status; to count each status, call this once per status with filter="status:provisioned" and so on. The cheap way to size a fleet, since it costs one call where paging the list costs dozens. NOTE the org-unit form: Google documents orgUnitPath here WITHOUT its leading slash ("Sales/West", or the unit's unique ID), unlike the org-unit tools where the leading slash is part of the path.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter expression, same terms as the list query, e.g. "status:provisioned".
includeChildOrgunitsbooleannonullOptional. Include child org units. Requires orgUnitPath.
orgUnitPathstringnonullOptional. Org unit WITHOUT the leading slash, e.g. "Sales/West", or its unique ID.

[Google Workspace] Retrieve one ChromeOS device by its deviceId. Use projection="FULL" for the diagnostic detail — recent users, active time ranges, CPU and disk telemetry, and the auto-update expiration date that tells you when the hardware stops receiving Chrome updates. The deviceId is not the serial number; find it with gws_list_chromeos_devices, which accepts a "serial:" query term.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's deviceId, from gws_list_chromeos_devices.
projectionstringnonullOptional. "BASIC" (default) or "FULL".

[Google Workspace] Check the outcome of a remote command previously sent with gws_issue_chromeos_device_command. Commands are queued, not immediate: a device that is powered off or off the network stays PENDING until it next checks in, and the state moves to EXECUTED_BY_CLIENT only once the device confirms. This is the only way to find out whether a wipe or reboot actually happened.

ParamTypeRequiredDefaultDescription
commandIdstringyesThe commandId returned when the command was issued.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's deviceId.

[Google Workspace] Send a remote command to one ChromeOS device. Destructive because the command set includes WIPE_USERS (erases every local user profile and their offline data) and REMOTE_POWERWASH (factory-resets the device, destroying anything not synced). The safe members of the same set are REBOOT, TAKE_A_SCREENSHOT, SET_VOLUME, DEVICE_START_CRD_SESSION and FETCH_SUPPORT_PACKET. Commands are queued: an offline device runs it at next check-in, and gws_get_chromeos_device_command is how you learn whether it ran. Some commands require a payload — SET_VOLUME takes {"volume":50} as a JSON string.

ParamTypeRequiredDefaultDescription
commandTypestringyesCommand type, e.g. "REBOOT", "REMOTE_POWERWASH", "WIPE_USERS", "TAKE_A_SCREENSHOT".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's deviceId.
payloadstringnonullOptional. Command payload as a JSON string, required by commands such as SET_VOLUME.

[Google Workspace] List enrolled ChromeOS devices. Caps at 100 per page — pass the response's nextPageToken back as pageToken for the next one. Narrow with orgUnitPath (add includeChildOrgunits=true to sweep the subtree beneath it) or with query, which accepts terms like "user:jsmith@example.com", "serial:5CD123", "status:provisioned" and "asset_id:". Google documents orgUnitPath here WITHOUT its leading slash ("Sales/West", or the unit's unique ID), unlike the org-unit tools where the leading slash is part of the path. projection="FULL" adds the fields most fleet questions actually need — last known user, last sync time, boot mode and OS version — at the cost of a much larger response, so prefer the default BASIC when listing a whole fleet.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
includeChildOrgunitsbooleannonullOptional. Include child org units. Requires orgUnitPath.
maxResultsintegernonullOptional. Page size, maximum 100.
orderBystringnonullOptional. Sort field, e.g. "lastSync", "serialNumber", "status".
orgUnitPathstringnonullOptional. Org unit WITHOUT the leading slash, e.g. "Sales/West", or its unique ID.
pageTokenstringnonullOptional. nextPageToken from the previous page.
projectionstringnonullOptional. "BASIC" (default) or "FULL".
querystringnonullOptional. Search terms, e.g. "status:provisioned" or "user:jsmith@example.com".
sortOrderstringnonullOptional. "ASCENDING" or "DESCENDING".

[Google Workspace] Move up to 50 ChromeOS devices into a different organizational unit in one call. Reversible — move them back the same way — but not inconsequential: a device takes on the policy of its new org unit, so this can change sign-in restrictions, allowed apps and update settings for every device moved. Body: {"deviceIds":["id1","id2"]}. Pass the destination as orgUnitPath, e.g. "/Sales/Loaners".

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object: {"deviceIds":["..."]}. Maximum 50 per call.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitPathstringyesDestination org unit path, e.g. "/Sales/Loaners".

[Google Workspace] Update named annotation fields on a ChromeOS device, merging rather than replacing. The right tool for recording an asset tag ({"annotatedAssetId":"IT-0417"}), the assigned user ({"annotatedUser":"jsmith@example.com"}), a location, or free-text notes. Note that annotatedUser is a label for your own records — it does not restrict who can sign in to the device.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's deviceId.
projectionstringnonullOptional. "BASIC" (default) or "FULL" for the returned record.

[Google Workspace] REPLACE a ChromeOS device's editable record wholesale. Google's PUT: fields omitted from the body are cleared, so an asset tag, assigned user or location note not included in the body is erased. Prefer gws_patch_chromeos_device for ordinary edits. Only the administrative annotation fields are writable — hardware and telemetry are read-only.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON device object. Omitted fields are cleared.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's deviceId.
projectionstringnonullOptional. "BASIC" (default) or "FULL" for the returned record.

Mobile Devices

ToolPlanAccessSummary
gws_delete_mobile_deviceProDestructiveRemove a mobile device from management.
gws_get_mobile_deviceFreeRead-onlyRetrieve one enrolled mobile device by its resourceId.
gws_issue_mobile_device_actionProDestructiveSend a management action to an enrolled mobile device.
gws_list_mobile_devicesFreeRead-onlyList enrolled mobile devices.

[Google Workspace] Remove a mobile device from management. This deletes the enrollment record, so the device disappears from the admin console and from every device report — but it does NOT erase anything on the device, and a device whose account is still signed in will simply re-enroll at the next sync. To remove company data from the handset, use gws_issue_mobile_device_action with an account wipe instead; to stop it coming back, remove the account from the device or suspend the user first.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
resourceIdstringyesThe device's resourceId, from gws_list_mobile_devices.

[Google Workspace] Retrieve one enrolled mobile device by its resourceId. projection="FULL" adds the security detail — encryption state, whether the device reports as compromised, screen-lock status, the accounts synced to it and the last sync time. Take the resourceId from gws_list_mobile_devices; the deviceId field in the response is the vendor's identifier and will not work here.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
projectionstringnonullOptional. "BASIC" (default) or "FULL".
resourceIdstringyesThe device's resourceId, from gws_list_mobile_devices.

[Google Workspace] Send a management action to an enrolled mobile device. Destructive, and the two wipe actions differ in a way that matters to the device's owner: "admin_account_wipe" removes only the Workspace account and its data, leaving personal photos and apps intact, while "admin_remote_wipe" FACTORY RESETS THE ENTIRE DEVICE, erasing everything on it including personal data. On a personal phone under a BYOD arrangement, the account wipe is almost always the intended one. The other actions are "approve", "block" (blocks sync but leaves data in place), "cancel_remote_wipe_then_activate" and "cancel_remote_wipe_then_block", the last two of which cancel a pending wipe that has not yet reached the device.

ParamTypeRequiredDefaultDescription
actionstringyesOne of: admin_account_wipe, admin_remote_wipe, approve, block, cancel_remote_wipe_then_activate, cancel_remote_wipe_then_block.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
resourceIdstringyesThe device's resourceId, from gws_list_mobile_devices.

[Google Workspace] List enrolled mobile devices. Caps at 100 per page — pass nextPageToken back as pageToken. query accepts terms such as "email:jsmith@example.com", "model:", "os:" and "id:". Use projection="FULL" to see the security posture fields an audit usually wants: encryption status, whether the device is compromised or rooted, password status and last sync time. A device that has not synced in months is usually retired hardware still holding an active account.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
maxResultsintegernonullOptional. Page size, maximum 100.
orderBystringnonullOptional. Sort field, e.g. "lastSync", "email", "model", "status".
pageTokenstringnonullOptional. nextPageToken from the previous page.
projectionstringnonullOptional. "BASIC" (default) or "FULL".
querystringnonullOptional. Search terms, e.g. "email:jsmith@example.com".
sortOrderstringnonullOptional. "ASCENDING" or "DESCENDING".

Domains

ToolPlanAccessSummary
gws_create_domainProWriteAdd a secondary domain to the Workspace account.
gws_create_domain_aliasProWriteAdd a domain alias, giving every existing mailbox in the parent domain a second address at the alias domain.
gws_delete_domainProDestructiveRemove a secondary domain from the Workspace account.
gws_delete_domain_aliasProDestructiveRemove a domain alias.
gws_get_domainFreeRead-onlyRetrieve one domain by name, e.g. "example.com".
gws_get_domain_aliasFreeRead-onlyRetrieve one domain alias by name, e.g. "example.net".
gws_list_domain_aliasesFreeRead-onlyList domain aliases.
gws_list_domainsFreeRead-onlyList every domain the Workspace account owns.

[Google Workspace] Add a secondary domain to the Workspace account. Additive, and it does NOT start routing mail: the domain arrives unverified, and someone must publish the verification record Google asks for in DNS before accounts on it work. Add a domain when its users need their OWN accounts; if the intent is simply a second address for existing people, gws_create_domain_alias is the right tool and needs no new licences. Body: {"domainName":"example.net"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object body: {"domainName":"example.net"}.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Add a domain alias, giving every existing mailbox in the parent domain a second address at the alias domain. Additive and licence-free, but it still requires DNS verification before mail flows, and it applies to EVERY user in the parent domain at once — there is no way to alias only some of them. Body: {"domainAliasName":"example.net","parentDomainName":"example.com"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object body with domainAliasName and parentDomainName.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Remove a secondary domain from the Workspace account. Destructive and wide-reaching: mail to every address on that domain stops being delivered. Google refuses while any user or group still has an address there, so the failure mode is usually a clear error rather than silent data loss — but the accounts you delete to clear the way are the real loss. The primary domain cannot be removed at all. Run gws_list_users with a domain filter first to see who is affected.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
domainNamestringyesThe domain name to remove, e.g. "old-example.com".

[Google Workspace] Remove a domain alias. Destructive: mail sent to any address at the alias domain immediately starts bouncing, for every user in the parent domain at once, and senders with the old address in their address books will keep using it. Nothing in the mailboxes is deleted — the addresses simply stop existing.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
domainAliasNamestringyesThe domain alias name to remove, e.g. "example.net".

[Google Workspace] Retrieve one domain by name, e.g. "example.com". The response includes its verification state, whether it is the primary domain, and the list of domain aliases attached to it.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
domainNamestringyesThe domain name, e.g. "example.com".

[Google Workspace] Retrieve one domain alias by name, e.g. "example.net". The response names the parent domain it delivers into and whether Google has verified ownership of the alias.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
domainAliasNamestringyesThe domain alias name, e.g. "example.net".

[Google Workspace] List domain aliases. UNPAGINATED. Pass parentDomainName to see only the aliases attached to one domain. A domain alias delivers mail for a second domain name into the existing mailboxes of its parent domain, without any additional accounts or licences — which is why a customer with several trading names usually has aliases rather than domains.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
parentDomainNamestringnonullOptional. Only aliases of this domain, e.g. "example.com".

[Google Workspace] List every domain the Workspace account owns. UNPAGINATED — the full set comes back in one response. Each entry carries whether it is the primary domain, whether Google has verified ownership, and its creation time. An unverified domain is the usual explanation for mail to it failing while the account otherwise looks correctly configured.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

Chrome Policy

ToolPlanAccessSummary
gws_batch_delete_chrome_group_policiesProDestructiveRemove policy values from one or more groups.
gws_batch_inherit_chrome_org_unit_policiesProDestructiveReset policies on organizational units so they inherit from their parent again.
gws_batch_modify_chrome_group_policiesProDestructiveSet Chrome policy values on one or more groups.
gws_batch_modify_chrome_org_unit_policiesProDestructiveSet Chrome policy values on one or more organizational units.
gws_define_chrome_certificateProWriteAdd a certificate for managed Chrome devices to trust.
gws_define_chrome_networkProWriteDefine a network (Wi-Fi, Ethernet or VPN) that managed Chrome devices can be given.
gws_get_chrome_policy_schemaFreeRead-onlyRetrieve one Chrome policy schema by name, e.g. "chrome.users.AllowDinosaurEasterEgg", with its field definitions, legal values, and any notices about settings Google has deprecated.
gws_list_chrome_group_policy_priorityFreeRead-onlyRead the priority order of groups for one policy schema — which group's setting wins when a user belongs to several groups that all set it.
gws_list_chrome_policy_schemasFreeRead-onlyList the Chrome policy schemas available to the customer — the vocabulary of every setting that can be managed, with its fields and legal values.
gws_remove_chrome_certificateProDestructiveRemove a certificate from managed Chrome devices.
gws_remove_chrome_networkProDestructiveRemove a network definition.
gws_reorder_chrome_group_policiesProWriteChange which group's policy wins for a schema when a user belongs to several.
gws_resolve_chrome_policiesFreeRead-onlyRead the policies currently in EFFECT for an organizational unit or group, including values inherited from a parent rather than set locally.

[Google Workspace] Remove policy values from one or more groups. Destructive: the values are discarded with no record of what they were, and every member of the group falls back to whatever their organizational unit says — which may be less restrictive than the group policy was. Capture the current values with gws_resolve_chrome_policies first.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with a requests array naming the targets and schemas to clear.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Reset policies on organizational units so they inherit from their parent again. Destructive: the local settings are DISCARDED, not disabled, and there is no record of what they were — the only way back is to know the old values and set them again. The effective behaviour then jumps to whatever the parent says, which may be more permissive than what the unit was enforcing. Capture the current values with gws_resolve_chrome_policies before running this.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with a requests array naming the targets and schemas to reset.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Set Chrome policy values on one or more groups. Destructive by blast radius, as the org-unit version is, with one extra subtlety: group policy is resolved by PRIORITY, so a change here may be silently overridden by a higher-priority group and appear to have done nothing. Check the ordering with gws_list_chrome_group_policy_priority when a change does not take effect.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with a requests array of policy values, targets and updateMask.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Set Chrome policy values on one or more organizational units. Destructive by blast radius: the change applies immediately to EVERY user or device in the target unit and, through inheritance, to everything beneath it — a single call can, for example, strip the Wi-Fi configuration from every managed Chromebook in a site. Each request carries an updateMask naming the fields to write, so fields left out of the mask keep their current values. Read the effective policy first with gws_resolve_chrome_policies and confirm the target org unit is the one you mean.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with a requests array of policy values, targets and updateMask.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Add a certificate for managed Chrome devices to trust. Additive. Typically a private certificate authority so devices trust an internal service, or a client certificate for network authentication. Body carries the target org unit, a settings block and the PEM certificate.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with targetResource, ceritificate (PEM) and settings.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Define a network (Wi-Fi, Ethernet or VPN) that managed Chrome devices can be given. Additive — it creates the definition; devices receive it when a policy applies it to their organizational unit. Body carries the target org unit and an ONC network configuration.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with targetResource and the ONC network settings.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Retrieve one Chrome policy schema by name, e.g. "chrome.users.AllowDinosaurEasterEgg", with its field definitions, legal values, and any notices about settings Google has deprecated. The definitive answer to "what exactly can I set here, and to what?".

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
schemaNamestringyesThe schema name, e.g. "chrome.users.AllowDinosaurEasterEgg".

[Google Workspace] Read the priority order of groups for one policy schema — which group's setting wins when a user belongs to several groups that all set it. A read despite being a POST. Worth checking before changing any group policy: the change may be overridden by a higher-priority group and appear to do nothing. Body: {"policyNamespace":"chrome.users","policySchema":"chrome.users.ChromeAdvancedProtection"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with policyNamespace and policySchema.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] List the Chrome policy schemas available to the customer — the vocabulary of every setting that can be managed, with its fields and legal values. filter narrows by name, e.g. "name:chrome.users." for user policies or "name:chrome.devices." for device ones. Start here before any policy write: the schema name and field names have to be exact.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter, e.g. "name:chrome.users.*".
pageSizeintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] Remove a certificate from managed Chrome devices. Destructive: devices stop trusting it, so internal sites served under that authority start showing certificate warnings, and any network authentication depending on the certificate fails. Both failures look like a website or Wi-Fi problem rather than a policy change, which makes them slow to diagnose.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with targetResource and the networkId of the certificate to remove.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Remove a network definition. Destructive and immediately visible to users: managed Chrome devices relying on this network to reach the internet LOSE THEIR CONNECTION, and a device that can no longer connect cannot be managed remotely to fix it. On a site whose Chromebooks have no other configured network, this is how a fleet is stranded. Confirm an alternative network is in place first.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with targetResource and the networkId to remove.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Change which group's policy wins for a schema when a user belongs to several. Not destructive — no values are lost and the ordering can be set back — but it CHANGES THE EFFECTIVE POLICY for everyone in those groups, so the visible result can be as large as editing the policies themselves. Body: {"policyNamespace":"chrome.users","policySchema":"...","groupIds":["id1","id2"]}, ordered highest priority first. Read the current order first.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with policyNamespace, policySchema and the ordered groupIds.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Read the policies currently in EFFECT for an organizational unit or group, including values inherited from a parent rather than set locally. A read despite being a POST — Google uses POST here because the request body is too large for a query string. This is the tool that answers "why is this Chromebook behaving like that?", since the effective value is often inherited from somewhere nobody thought to look. Body: {"policySchemaFilter":"chrome.users.*","policyTargetKey":{"targetResource":"orgunits/03ph8a2z1"}}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with policySchemaFilter and policyTargetKey.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

Vault

ToolPlanAccessSummary
gws_add_vault_held_accountsProWriteAdd accounts to an existing hold, extending preservation to them.
gws_add_vault_matter_permissionProWriteAdd an account as a collaborator on a matter.
gws_close_vault_matterProWriteClose a Vault matter, marking the investigation finished.
gws_count_vault_matter_accountsProWriteCount the accounts a Vault query would process, without exporting anything.
gws_create_vault_exportProWriteStart an export of search results.
gws_create_vault_held_accountProWriteAdd one account to a hold.
gws_create_vault_holdProWriteCreate a legal hold, which starts preserving the covered data and overrides the customer's ordinary retention rules.
gws_create_vault_matterProWriteCreate a Vault matter.
gws_create_vault_saved_queryProWriteSave a search definition in a matter for reuse.
gws_delete_vault_exportProDestructiveDelete an export and the exported files it produced.
gws_delete_vault_held_accountProDestructiveRemove one account from a legal hold.
gws_delete_vault_holdProDestructiveRelease a legal hold.
gws_delete_vault_matterProDestructiveDelete a Vault matter.
gws_delete_vault_saved_queryProDestructiveDelete a saved query.
gws_get_vault_exportFreeRead-onlyRetrieve one export by its exportId — its status, the query it ran, and once complete the Cloud Storage objects holding the results plus their MD5 hashes.
gws_get_vault_holdFreeRead-onlyRetrieve one legal hold by its holdId — the service it covers (MAIL, DRIVE, GROUPS, HANGOUTS_CHAT, VOICE), any query restricting it, and whether it applies to named accounts or a whole organizational…
gws_get_vault_matterFreeRead-onlyRetrieve one Vault matter by its matterId — its name, description, state and, with view="FULL", the accounts that can collaborate on it.
gws_get_vault_saved_queryFreeRead-onlyRetrieve one saved query by its savedQueryId, with the full query definition — corpus, date range, accounts or org unit, and search terms.
gws_list_vault_exportsFreeRead-onlyList the exports in a matter, with each one's status and, once complete, the Cloud Storage location of the files it produced.
gws_list_vault_held_accountsFreeRead-onlyList the accounts covered by one hold.
gws_list_vault_holdsFreeRead-onlyList the legal holds in a matter — what each one covers (which service, which accounts or organizational unit) and when it was last updated.
gws_list_vault_mattersFreeRead-onlyList Vault matters.
gws_list_vault_saved_queriesFreeRead-onlyList the saved queries in a matter — the stored search definitions a team reuses so that repeated searches stay identical.
gws_remove_vault_held_accountsProDestructiveRemove accounts from a legal hold.
gws_remove_vault_matter_permissionProDestructiveRemove an account's collaborator access to a matter.
gws_reopen_vault_matterProWriteReopen a closed Vault matter so work can continue in it.
gws_undelete_vault_matterProWriteRestore a deleted Vault matter, returning it to the CLOSED state.
gws_update_vault_holdProDestructiveREPLACE a legal hold wholesale.
gws_update_vault_matterProDestructiveREPLACE a matter's name and description wholesale.

[Google Workspace] Add accounts to an existing hold, extending preservation to them. Additive and the safe direction. Body: {"accountIds":["123...","456..."]} — NUMERIC user ids, or emails via the emails field. The response returns a status per account in request order, so check it: an account that failed to be added is an account that is not being preserved, and the overall call still succeeds.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body: {"accountIds":["..."]} or {"emails":["..."]}.
holdIdstringyesThe hold's holdId.
matterIdstringyesThe matter's matterId.

[Google Workspace] Add an account as a collaborator on a matter. Additive, but understand what it grants: a collaborator can search and export the data the matter covers, which on a litigation matter is privileged material. Body: {"matterPermission":{"role":"COLLABORATOR","accountId":"123..."},"sendEmails":false,"ccMe":false}. accountId is the NUMERIC user id from gws_get_user, and sendEmails=true emails the person.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with matterPermission (role and numeric accountId).
matterIdstringyesThe matter's matterId.

[Google Workspace] Close a Vault matter, marking the investigation finished. Reversible with gws_reopen_vault_matter, which is why it is not marked destructive. Be deliberate about it on a matter that still carries legal holds: Google's API reference does not state what closing does to them, so if the intent is to STOP preserving data, release the holds explicitly with gws_delete_vault_hold rather than assuming closing did it — and if the intent is to keep preserving, verify the holds are still listed afterwards with gws_list_vault_holds.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.

[Google Workspace] Count the accounts a Vault query would process, without exporting anything. Reads no message content and changes nothing, but it starts a long-running operation server-side, which is why it is not classified as a plain read. The sensible step before gws_create_vault_export: it tells you how large the export would be. Body carries the same query object an export takes.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with the query to count.
matterIdstringyesThe matter's matterId.

[Google Workspace] Start an export of search results. Additive — it copies rather than removes — but it is not free of consequence: an export COPIES potentially privileged material out of Vault into Cloud Storage where a different set of people can reach it, and a broad query can produce an enormous amount of it. Run gws_count_vault_matter_accounts on the same query first to see the scale. Body: {"name":"...","query":{"corpus":"MAIL","dataScope":"ALL_DATA","searchMethod":"ACCOUNT","accountInfo":{"emails":["jsmith@example.com"]}},"exportOptions":}. Exports run asynchronously; poll gws_get_vault_export.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON export object with name, query and exportOptions.
matterIdstringyesThe matter's matterId.

[Google Workspace] Add one account to a hold. Additive; the single-account counterpart to gws_add_vault_held_accounts. Body: {"accountId":"123..."} or {"email":"jsmith@example.com"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body: {"accountId":"..."} or {"email":"..."}.
holdIdstringyesThe hold's holdId.
matterIdstringyesThe matter's matterId.

[Google Workspace] Create a legal hold, which starts preserving the covered data and overrides the customer's ordinary retention rules. Additive and the safe direction of travel — it preserves rather than removes. Body: {"name":"Smith mail hold","corpus":"MAIL","accounts":[{"accountId":"123..."}]}, or use orgUnit instead of accounts to cover a whole organizational unit including people added to it later. Put the hold in place BEFORE anyone starts deleting accounts.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON hold object with name, corpus and accounts or orgUnit.
matterIdstringyesThe matter's matterId.

[Google Workspace] Create a Vault matter. Additive — an empty container that preserves nothing until a hold is created inside it. Body: {"name":"Smith v. Acme","description":"Litigation hold, opened 2026-08-13"}. Name it so a colleague can tell later what it is for; matters outlive the people who create them.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON matter object with name and description.

[Google Workspace] Save a search definition in a matter for reuse. Additive; it stores terms and searches nothing by itself. Body: {"displayName":"Smith mail, Q1","query":{"corpus":"MAIL","dataScope":"ALL_DATA","searchMethod":"ACCOUNT",...}}. Worth doing before a series of exports, so every one of them provably ran the same search.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON saved-query object with displayName and query.
matterIdstringyesThe matter's matterId.

[Google Workspace] Delete an export and the exported files it produced. Destructive and not recoverable: an export that took hours to produce has to be re-run from scratch, and if the underlying data has since been released from hold or purged, re-running it will not produce the same result. Deleting exports IS good hygiene once they have been collected — privileged material should not sit in Cloud Storage indefinitely — but confirm the files were downloaded first.

ParamTypeRequiredDefaultDescription
exportIdstringyesThe export's exportId.
matterIdstringyesThe matter's matterId.

[Google Workspace] Remove one account from a legal hold. Destructive: that person's data stops being preserved and can be purged if nothing else holds it. The single-account counterpart to gws_remove_vault_held_accounts, and the same caution applies — this is a legal-obligation decision, not an IT tidy-up.

ParamTypeRequiredDefaultDescription
accountIdstringyesThe held account's accountId.
holdIdstringyesThe hold's holdId.
matterIdstringyesThe matter's matterId.

[Google Workspace] Release a legal hold. THE MOST CONSEQUENTIAL OPERATION IN THIS CONNECTOR. Google's own reference: this "releases the accounts or organizational unit covered by the hold. If the data is not preserved by another hold or retention rule, IT MIGHT BE PURGED." Evidence under a litigation hold can therefore start being deleted as a result of this call, which is a legal exposure and not merely a data one. Do not release a hold to tidy up, to reduce a list, or because a matter looks finished — releasing is a decision for whoever owns the legal obligation, not for whoever is doing the IT work.

ParamTypeRequiredDefaultDescription
holdIdstringyesThe hold's holdId.
matterIdstringyesThe matter's matterId.

[Google Workspace] Delete a Vault matter. Destructive and wide: the matter and everything in it — its holds, exports and saved queries — stop being active, and any data that was preserved ONLY by this matter's holds is no longer preserved. Google keeps the matter in a DELETED state so gws_undelete_vault_matter can bring it back, but the preservation gap in between is real. A matter must be CLOSED before it can be deleted.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.

[Google Workspace] Delete a saved query. Destructive but limited in blast radius: no message data is touched and no hold is affected — what is lost is the definition itself, which on a matter that has run several exports is the record of exactly what was searched for. Exports already produced are unaffected.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.
savedQueryIdstringyesThe saved query's savedQueryId.

[Google Workspace] Retrieve one export by its exportId — its status, the query it ran, and once complete the Cloud Storage objects holding the results plus their MD5 hashes. The files themselves are not returned here; they are downloaded from Cloud Storage by whoever is authorized to, and the hashes are what proves the download is intact for an evidential chain.

ParamTypeRequiredDefaultDescription
exportIdstringyesThe export's exportId.
matterIdstringyesThe matter's matterId.

[Google Workspace] Retrieve one legal hold by its holdId — the service it covers (MAIL, DRIVE, GROUPS, HANGOUTS_CHAT, VOICE), any query restricting it, and whether it applies to named accounts or a whole organizational unit. An org-unit hold covers everyone in that unit including people added later, which is a materially different scope from a list of accounts.

ParamTypeRequiredDefaultDescription
holdIdstringyesThe hold's holdId.
matterIdstringyesThe matter's matterId.
viewstringnonullOptional. "BASIC_HOLD" or "FULL_HOLD".

[Google Workspace] Retrieve one Vault matter by its matterId — its name, description, state and, with view="FULL", the accounts that can collaborate on it. Read this before any hold operation: whether a matter is OPEN or CLOSED determines what can be done inside it.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.
viewstringnonullOptional. "BASIC" or "FULL" (adds collaborators).

[Google Workspace] Retrieve one saved query by its savedQueryId, with the full query definition — corpus, date range, accounts or org unit, and search terms. Copy this into gws_create_vault_export to run exactly the search the team agreed on rather than an approximation of it.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.
savedQueryIdstringyesThe saved query's savedQueryId.

[Google Workspace] List the exports in a matter, with each one's status and, once complete, the Cloud Storage location of the files it produced. Exports run asynchronously and can take hours for a large date range, so this is how to find out whether one has finished.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.
pageSizeintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the accounts covered by one hold. UNPAGINATED. Note this returns only accounts named INDIVIDUALLY: a hold scoped to an organizational unit covers everyone in that unit without listing them here, so an empty response does not mean nobody is being preserved. Check the hold itself with gws_get_vault_hold to see which kind it is.

ParamTypeRequiredDefaultDescription
holdIdstringyesThe hold's holdId.
matterIdstringyesThe matter's matterId.

[Google Workspace] List the legal holds in a matter — what each one covers (which service, which accounts or organizational unit) and when it was last updated. view="FULL_HOLD" includes the held accounts inline. This is the answer to "is this person's data being preserved?", and it is worth checking before any account deletion or retention change.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.
pageSizeintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.
viewstringnonullOptional. "BASIC_HOLD" or "FULL_HOLD" (includes held accounts).

[Google Workspace] List Vault matters. state filters to "OPEN", "CLOSED" or "DELETED"; view takes "BASIC" or "FULL", where FULL adds the collaborator list. Note the default excludes deleted matters, so a missing matter may have been deleted rather than never created.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.
statestringnonullOptional. "OPEN", "CLOSED" or "DELETED".
viewstringnonullOptional. "BASIC" or "FULL" (adds collaborators).

[Google Workspace] List the saved queries in a matter — the stored search definitions a team reuses so that repeated searches stay identical. Reading these is also the quickest way to understand what a matter is actually looking for.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.
pageSizeintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] Remove accounts from a legal hold. Destructive for the same reason as releasing the hold, narrowed to the named people: their data stops being preserved and, if nothing else preserves it, it can be purged. The response carries a status per account. Removing someone from a hold because they have left the company is exactly backwards — a departed employee's data is usually the reason the hold exists.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body: {"accountIds":["..."]}.
holdIdstringyesThe hold's holdId.
matterIdstringyesThe matter's matterId.

[Google Workspace] Remove an account's collaborator access to a matter. Destructive as an access revocation: that person immediately loses the ability to search or export the matter, and if they are the one running the investigation the work stops. Body: {"accountId":"123..."} — the NUMERIC user id.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body: {"accountId":"<numeric user id>"}.
matterIdstringyesThe matter's matterId.

[Google Workspace] Reopen a closed Vault matter so work can continue in it. Not destructive — it restores the matter to OPEN.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.

[Google Workspace] Restore a deleted Vault matter, returning it to the CLOSED state. Not destructive — it recovers. Reopen it afterwards with gws_reopen_vault_matter if holds need to be active again.

ParamTypeRequiredDefaultDescription
matterIdstringyesThe matter's matterId.

[Google Workspace] REPLACE a legal hold wholesale. Google's PUT, and on a hold the omission rule has legal weight: accounts left out of the body are no longer covered, and Google's reference is explicit that data released from a hold "might be purged" if nothing else preserves it. A partial body here is not a formatting mistake, it is a preservation failure. Read the hold with gws_get_vault_hold using view="FULL_HOLD" and send it back complete, or use the account-level tools instead.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON hold object. Omitted accounts stop being held.
holdIdstringyesThe hold's holdId.
matterIdstringyesThe matter's matterId.

[Google Workspace] REPLACE a matter's name and description wholesale. Google's PUT, so an omitted field is cleared — and on a legal matter the description is often the only record of why it exists and what it covers. Read the current record with gws_get_vault_matter and send it back complete.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON matter object. Omitted fields are cleared.
matterIdstringyesThe matter's matterId.

Licences

ToolPlanAccessSummary
gws_create_license_assignmentProDestructiveAssign a licence to a user.
gws_delete_license_assignmentProDestructiveRevoke a user's licence.
gws_get_license_assignmentFreeRead-onlyCheck whether one specific user holds one specific SKU.
gws_list_license_assignments_for_productFreeRead-onlyList everyone holding a licence for one product, across all of its SKUs.
gws_list_license_assignments_for_skuFreeRead-onlyList everyone holding one specific SKU.
gws_patch_license_assignmentProWriteMove a user to a different SKU, merging rather than replacing.
gws_update_license_assignmentProDestructiveREPLACE a licence assignment wholesale — the route Google provides for moving a user from one SKU to another.

[Google Workspace] Assign a licence to a user. MARKED AS CHANGING THINGS BECAUSE IT SPENDS THE CUSTOMER'S MONEY: taking up a seat the customer has not already paid for adds a charge to their next Google bill, and on an annual commitment it can extend the commitment rather than simply adding a month. Nothing is deleted and it is reversible with gws_delete_license_assignment, but the billing consequence is real and immediate. Confirm the customer has spare seats before assigning — the count of ASSIGNED seats is gws_list_license_assignments_for_sku; the count of PURCHASED seats lives in their Google billing account and is not in this API.

ParamTypeRequiredDefaultDescription
productIdstringyesGoogle's product code, e.g. "Google-Apps".
skuIdstringyesThe SKU code to assign.
userIdstringyesThe user's current primary email address.

[Google Workspace] Revoke a user's licence. Destructive: THE USER LOSES THE PAID SERVICE, which for the main Workspace SKU means losing access to their mail and Drive while the account still exists — an outage that looks nothing like a licensing change from their side. Revoking also frees the seat, which is the point when offboarding, but do the data transfer first (gws_create_data_transfer) because a user without a licence is not a user you can still move data from.

ParamTypeRequiredDefaultDescription
productIdstringyesGoogle's product code, e.g. "Google-Apps".
skuIdstringyesThe SKU code to revoke.
userIdstringyesThe user's current primary email address.

[Google Workspace] Check whether one specific user holds one specific SKU. Returns the assignment or a 404 if they do not have it, so a 404 here is an answer rather than a fault. userId is the user's CURRENT primary email address.

ParamTypeRequiredDefaultDescription
productIdstringyesGoogle's product code, e.g. "Google-Apps".
skuIdstringyesThe SKU code.
userIdstringyesThe user's current primary email address.

[Google Workspace] List everyone holding a licence for one product, across all of its SKUs. productId is Google's product code — "Google-Apps" for Workspace itself, "101031" for Workspace Enterprise, "Google-Vault" for Vault. IMPORTANT: this API requires the NUMERIC customer id in the C00000000 form and does not accept the "my_customer" shorthand the other Google Workspace tools take; read the real id from gws_get_customer and pass it if the call is rejected. Caps at 1000 per page.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. Numeric customer id, e.g. "C00000000", from gws_get_customer.
maxResultsintegernonullOptional. Page size, maximum 1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.
productIdstringyesGoogle's product code, e.g. "Google-Apps" or "Google-Vault".

[Google Workspace] List everyone holding one specific SKU. This is the count that matters for a licence audit — how many seats of THIS edition are actually assigned, as opposed to how many the customer is paying for, which lives in their Google billing account and not in this API. Requires the numeric customer id in the C00000000 form, as above. Caps at 1000 per page.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. Numeric customer id, e.g. "C00000000", from gws_get_customer.
maxResultsintegernonullOptional. Page size, maximum 1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.
productIdstringyesGoogle's product code, e.g. "Google-Apps".
skuIdstringyesThe SKU code, e.g. "1010020020" for Workspace Business Standard.

[Google Workspace] Move a user to a different SKU, merging rather than replacing. The right tool for an upgrade or downgrade between editions. Not marked destructive because nothing is removed and the user keeps a licence throughout — but it still changes what the customer is billed for, so confirm the target SKU is one they have seats for. Body: {"productId":"Google-Apps","skuId":"1010020027","userId":"jsmith@example.com"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object naming the new SKU.
productIdstringyesThe CURRENT product code.
skuIdstringyesThe CURRENT SKU code.
userIdstringyesThe user's current primary email address.

[Google Workspace] REPLACE a licence assignment wholesale — the route Google provides for moving a user from one SKU to another. Destructive on both counts that matter: it is a PUT, so omitted fields are cleared, and it changes what the customer is billed for, potentially in both directions at once. Body: {"productId":"Google-Apps","skuId":"1010020027","userId":"jsmith@example.com"}, where the path names the CURRENT assignment and the body names the new SKU. Prefer gws_patch_license_assignment.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON assignment object naming the new SKU.
productIdstringyesThe CURRENT product code.
skuIdstringyesThe CURRENT SKU code.
userIdstringyesThe user's current primary email address.

Alert Center

ToolPlanAccessSummary
gws_batch_delete_alertsProDestructiveSoft-delete many alerts at once.
gws_batch_undelete_alertsProWriteRestore many soft-deleted alerts at once.
gws_create_alert_feedbackProWriteRecord feedback on an alert.
gws_delete_alertProDestructiveDelete one alert.
gws_get_alertFreeRead-onlyRetrieve one alert by its alertId, with its full payload — the affected users, the detection detail, and the timestamps.
gws_get_alert_metadataFreeRead-onlyRead one alert's workflow metadata — its assignee, severity and current status — as distinct from the alert's own detection payload.
gws_get_alert_settingsFreeRead-onlyRead the domain's Alert Center notification settings — which alert types raise an email notification and to which addresses.
gws_list_alert_feedbackFreeRead-onlyList the feedback recorded against one alert — whether an administrator marked it a real threat, not useful, or a false positive, and when.
gws_list_alertsFreeRead-onlyList security and compliance alerts for the domain.
gws_patch_alert_settingsProWriteUpdate the domain's Alert Center notification settings — which alert types email a human, and which addresses.
gws_undelete_alertProWriteRestore a soft-deleted alert, putting it back in the default list.

[Google Workspace] Soft-delete many alerts at once. Body: {"alertId":["id1","id2"]}. Recoverable with gws_batch_undelete_alerts, but the scale is the risk: a filter that matched more alerts than expected clears a security queue in one call, and the response's failedAlertStatus map is the only record of which ones did not go. Read the list you intend to delete before sending it.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object: {"alertId":["..."]}.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Restore many soft-deleted alerts at once. Body: {"alertId":["id1","id2"]}. Not destructive — it recovers. The counterpart to gws_batch_delete_alerts, and the way back from a bulk delete that matched too much.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object: {"alertId":["..."]}.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Record feedback on an alert. Additive — feedback accumulates and nothing is overwritten. feedbackType is one of "VERY_USEFUL", "SOMEWHAT_USEFUL", "NOT_USEFUL". This is how a team marks an alert as triaged, and Google also uses it to tune future detections for the domain.

ParamTypeRequiredDefaultDescription
alertIdstringyesThe alert's alertId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
feedbackTypestringyes"VERY_USEFUL", "SOMEWHAT_USEFUL" or "NOT_USEFUL".

[Google Workspace] Delete one alert. RECOVERABLE — this is a soft delete, and gws_undelete_alert restores it within Google's retention window — but it removes the alert from the default list, so it becomes an alert nobody reviews. Marked as changing things for that reason rather than because anything is permanently lost. Prefer recording feedback with gws_create_alert_feedback over deleting: the alert stays auditable and still counts as triaged.

ParamTypeRequiredDefaultDescription
alertIdstringyesThe alert's alertId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Retrieve one alert by its alertId, with its full payload — the affected users, the detection detail, and the timestamps. The payload shape differs per alert type, which is why it passes through exactly as Google sends it rather than being reshaped into a common form that would lose the type-specific fields.

ParamTypeRequiredDefaultDescription
alertIdstringyesThe alert's alertId, from gws_list_alerts.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Read one alert's workflow metadata — its assignee, severity and current status — as distinct from the alert's own detection payload. This is the triage state a team maintains around an alert, not what Google detected.

ParamTypeRequiredDefaultDescription
alertIdstringyesThe alert's alertId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Read the domain's Alert Center notification settings — which alert types raise an email notification and to which addresses. Worth checking when a customer says they were never told about an incident: the alert may have been raised correctly and simply notified nobody.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] List the feedback recorded against one alert — whether an administrator marked it a real threat, not useful, or a false positive, and when. Useful for seeing whether an alert has already been triaged by someone before acting on it again.

ParamTypeRequiredDefaultDescription
alertIdstringyesThe alert's alertId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter on feedback type.

[Google Workspace] List security and compliance alerts for the domain. filter accepts terms such as "type='Suspicious login'", "source='Google Identity'", "createTime >= "2026-08-01T00:00:00Z"" and "isState=false"; orderBy takes "create_time desc" for newest first. Alert types worth knowing by name: "Suspicious login", "Government backed attack", "Leaked password", "Malware reclassification", "Suspicious message reported" and "Device compromised". Note that deleted alerts are excluded by default, so a missing alert may have been deleted rather than never raised.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter, e.g. "type='Suspicious login'" or a createTime comparison.
orderBystringnonullOptional. Sort, e.g. "create_time desc".
pageSizeintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] Update the domain's Alert Center notification settings — which alert types email a human, and which addresses. A merging PATCH, so named settings change and the rest are left alone. Body: {"notifications":[{"cloudPubsubTopic":}]}. Take care that removing an address here silently stops someone being told about incidents.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the settings to change.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Restore a soft-deleted alert, putting it back in the default list. Not destructive — it recovers something. Only works within Google's retention window; an alert deleted long enough ago cannot be brought back.

ParamTypeRequiredDefaultDescription
alertIdstringyesThe alert's alertId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

Reports

ToolPlanAccessSummary
gws_get_customer_usage_reportFreeRead-onlyDomain-wide usage figures for a single day — account counts, storage consumed, and per-service activity totals across Gmail, Drive, Calendar, Meet and Classroom.
gws_get_entity_usage_reportFreeRead-onlyUsage for non-user entities on a single day.
gws_get_user_usage_reportFreeRead-onlyPer-user usage for a single day — last sign-in, whether 2-step verification is enrolled, mailbox and Drive storage used, and per-service activity.
gws_list_audit_activitiesFreeRead-onlyRead the audit log for one application.

[Google Workspace] Domain-wide usage figures for a single day — account counts, storage consumed, and per-service activity totals across Gmail, Drive, Calendar, Meet and Classroom. date is "yyyy-mm-dd" and must be a COMPLETED day; today's report does not exist, and the most recent complete day may still be a day or two from being available. Narrow the response with parameters, e.g. "accounts:num_users,drive:num_items_created", since the default report is very large.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
datestringyesThe day, "yyyy-mm-dd". Must be a completed day.
pageTokenstringnonullOptional. nextPageToken from the previous page.
parametersstringnonullOptional. Comma-separated parameters, e.g. "accounts:num_users".

[Google Workspace] Usage for non-user entities on a single day. entityType is the entity class — Google's supported value here is "gplus_communities" — and entityKey names one entity or is left empty for all of them. This is the narrowest of the three usage reports and the one most likely to return nothing for an ordinary business domain; gws_get_customer_usage_report and gws_get_user_usage_report answer almost every real question. date is "yyyy-mm-dd" and must be a completed day.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
datestringyesThe day, "yyyy-mm-dd". Must be a completed day.
entityKeystringnonullOptional. One entity's key. Defaults to all entities of the type.
entityTypestringyesThe entity class, e.g. "gplus_communities".
filtersstringnonullOptional. Parameter filter.
maxResultsintegernonullOptional. Page size, maximum 1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.
parametersstringnonullOptional. Comma-separated parameters.

[Google Workspace] Per-user usage for a single day — last sign-in, whether 2-step verification is enrolled, mailbox and Drive storage used, and per-service activity. Leave userKey empty for every user in the domain, which is how to answer questions like "who has not signed in for months?" or "who is not on 2SV?" in one call rather than per person. date is "yyyy-mm-dd" and must be a completed day. Narrow with parameters, e.g. "accounts:last_login_time,accounts:is_2sv_enrolled". Caps at 1000 per page.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
datestringyesThe day, "yyyy-mm-dd". Must be a completed day.
filtersstringnonullOptional. Parameter filter, e.g. "accounts:is_2sv_enrolled==false".
groupIdFilterstringnonullOptional. Only members of these group ids, comma-separated.
maxResultsintegernonullOptional. Page size, maximum 1000.
orgUnitIdstringnonullOptional. Only users in this org unit id.
pageTokenstringnonullOptional. nextPageToken from the previous page.
parametersstringnonullOptional. Comma-separated parameters, e.g. "accounts:last_login_time".
userKeystringnonullOptional. One user's email or id. Defaults to every user in the domain.

[Google Workspace] Read the audit log for one application. applicationName selects which log: "login" (sign-ins, including failures and suspicious-login flags), "admin" (every administrative change and who made it), "drive", "token" (third-party app authorizations), "user_accounts", "groups", "mobile", "saml", "rules", "chrome", "calendar", "meet" and more. Leave userKey empty for the whole domain or pass an address to follow one person. Narrow with startTime and endTime (RFC 3339, e.g. "2026-08-01T00:00:00Z"), eventName, or actorIpAddress. IMPORTANT: this data lags — usually hours, occasionally up to three days — so an empty result may mean "not indexed yet" rather than "did not happen". Caps at 1000 per page.

ParamTypeRequiredDefaultDescription
actorIpAddressstringnonullOptional. Only events from this IP address.
applicationNamestringyesWhich log: "login", "admin", "drive", "token", "groups", "mobile", "saml", "chrome", etc.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
endTimestringnonullOptional. RFC 3339 end.
eventNamestringnonullOptional. One event name, e.g. "login_failure", "CREATE_USER".
filtersstringnonullOptional. Event-parameter filter, e.g. "login_type==google_password".
groupIdFilterstringnonullOptional. Only events for members of these group ids, comma-separated.
maxResultsintegernonullOptional. Page size, maximum 1000.
orgUnitIdstringnonullOptional. Only events for users in this org unit id.
pageTokenstringnonullOptional. nextPageToken from the previous page.
startTimestringnonullOptional. RFC 3339 start, e.g. "2026-08-01T00:00:00Z".
userKeystringnonullOptional. One user's email or id. Defaults to every user in the domain.

Group Settings

ToolPlanAccessSummary
gws_get_group_settingsFreeRead-onlyRead a group's policy — who can post, who can join, who can view the member list and the archive, whether messages are moderated, and whether people outside the organization can email it.
gws_patch_group_settingsProWriteChange named group settings, leaving the rest alone.
gws_update_group_settingsProDestructiveREPLACE a group's policy wholesale.

[Google Workspace] Read a group's policy — who can post, who can join, who can view the member list and the archive, whether messages are moderated, and whether people outside the organization can email it. Keyed by the group's EMAIL ADDRESS, e.g. "support@example.com", not by the id the Directory tools return. This is where to look when mail from outside is bouncing off a group: whoCanPostMessage is usually the answer, and it is invisible in gws_get_group.

ParamTypeRequiredDefaultDescription
groupUniqueIdstringyesThe group's email address, e.g. "support@example.com".

[Google Workspace] Change named group settings, leaving the rest alone. The right tool for the common jobs: letting outsiders email a support alias ({"whoCanPostMessage":"ANYONE_CAN_POST"}), turning off moderation ({"messageModerationLevel":"MODERATE_NONE"}), or restricting who can see the member list ({"whoCanViewMembership":"ALL_MANAGERS_CAN_VIEW"}). Values are Google's enum strings and are case-sensitive. Read the current settings first if you are unsure which of the several similarly-named whoCan* settings governs the behaviour you mean.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the settings to change.
groupUniqueIdstringyesThe group's email address.

[Google Workspace] REPLACE a group's policy wholesale. Google's PUT: every setting omitted from the body reverts to its default, which on this API means a partial body can quietly OPEN A GROUP UP — posting rights, membership approval and archive visibility all fall back to defaults that may be more permissive than what the customer configured. Prefer gws_patch_group_settings for every ordinary change; if this really is the right tool, read the current settings with gws_get_group_settings and send them back complete.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON settings object. Omitted settings revert to defaults.
groupUniqueIdstringyesThe group's email address.

Data Transfer

ToolPlanAccessSummary
gws_create_data_transferProWriteStart transferring a departing user's application data to another user.
gws_get_data_transferFreeRead-onlyRetrieve one data transfer by its id, with the per-application status of each part of it.
gws_get_transfer_applicationFreeRead-onlyRetrieve one transferable application by its numeric applicationId, with the exact transferParams it accepts and the legal values for each — for Drive, for example, the privacy level controlling…
gws_list_data_transfersFreeRead-onlyList data transfers, most recent first.
gws_list_transfer_applicationsFreeRead-onlyList the applications whose data can be transferred between users — typically Drive and Docs, Calendar, and Google+ where still present.

[Google Workspace] Start transferring a departing user's application data to another user. Additive — the receiving user GAINS copies and the original owner keeps theirs, so nothing is destroyed — but it is not instant, and it must complete BEFORE the source account is deleted or the data goes with the account. Body: {"oldOwnerUserId":"123...","newOwnerUserId":"456...","applicationDataTransfers":[{"applicationId":"55656082996","applicationTransferParams":[{"key":"PRIVACY_LEVEL","value":["PRIVATE","SHARED"]}]}]}. Both user ids are NUMERIC, from gws_get_user; applicationId and the parameter names come from gws_list_transfer_applications. Poll gws_get_data_transfer until it completes.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON transfer object with oldOwnerUserId, newOwnerUserId and applicationDataTransfers.

[Google Workspace] Retrieve one data transfer by its id, with the per-application status of each part of it. A transfer can be partly done — Drive completed while Calendar failed — so the overall status is not the whole story, and this is the tool that shows the breakdown.

ParamTypeRequiredDefaultDescription
dataTransferIdstringyesThe transfer's dataTransferId.

[Google Workspace] Retrieve one transferable application by its numeric applicationId, with the exact transferParams it accepts and the legal values for each — for Drive, for example, the privacy level controlling whether private files move along with shared ones.

ParamTypeRequiredDefaultDescription
applicationIdstringyesThe application's numeric applicationId.

[Google Workspace] List data transfers, most recent first. Filter by oldOwnerUserId or newOwnerUserId (both are NUMERIC user ids, not email addresses — take them from gws_get_user) or by status: "inProgress", "completed" or "failed". The way to confirm that an offboarding actually finished before the departing account is deleted.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
maxResultsintegernonullOptional. Page size.
newOwnerUserIdstringnonullOptional. Numeric id of the user data is moving TO.
oldOwnerUserIdstringnonullOptional. Numeric id of the user data is moving FROM.
pageTokenstringnonullOptional. nextPageToken from the previous page.
statusstringnonullOptional. "inProgress", "completed" or "failed".

[Google Workspace] List the applications whose data can be transferred between users — typically Drive and Docs, Calendar, and Google+ where still present. Each entry carries its numeric applicationId and the transferParams it accepts, both of which gws_create_data_transfer needs. Start here: the parameter names and values are per-application and cannot be guessed.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
maxResultsintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.

Calendar Resources

ToolPlanAccessSummary
gws_create_buildingProWriteCreate a building.
gws_create_calendar_featureProWriteCreate a resource feature.
gws_create_calendar_resourceProWriteCreate a bookable resource.
gws_delete_buildingProDestructiveDelete a building.
gws_delete_calendar_featureProDestructiveDelete a resource feature.
gws_delete_calendar_resourceProDestructiveDelete a bookable resource.
gws_get_buildingFreeRead-onlyRetrieve one building by its buildingId, including its floor list and postal address.
gws_get_calendar_featureFreeRead-onlyRetrieve one resource feature by name.
gws_get_calendar_resourceFreeRead-onlyRetrieve one bookable resource by its resourceId — its name, category, capacity, building and floor, the features it is tagged with, and its resourceEmail.
gws_list_buildingsFreeRead-onlyList the buildings defined for the domain, with their floor names, addresses and map coordinates.
gws_list_calendar_featuresFreeRead-onlyList the resource features defined for the domain — the tags such as "Whiteboard", "Video conferencing" or "Step-free access" that rooms are marked with and that people filter on when booking.
gws_list_calendar_resourcesFreeRead-onlyList bookable calendar resources — meeting rooms, equipment, and anything else people can book.
gws_patch_buildingProWriteUpdate named fields on a building, merging rather than replacing.
gws_patch_calendar_featureProWriteUpdate named fields on a resource feature, merging rather than replacing.
gws_patch_calendar_resourceProWriteUpdate named fields on a bookable resource, merging rather than replacing.
gws_rename_calendar_featureProWriteRename a resource feature, keeping every room tagged with it attached.
gws_update_buildingProDestructiveREPLACE a building wholesale.
gws_update_calendar_featureProDestructiveREPLACE a resource feature wholesale.
gws_update_calendar_resourceProDestructiveREPLACE a bookable resource wholesale.

[Google Workspace] Create a building. Additive; it holds no rooms until rooms name it. Body: {"buildingId":"NYC-01","buildingName":"New York HQ","floorNames":["G","1","2"],"address":{"addressLines":["..."],"regionCode":"US"}}. buildingId is chosen by you and immutable afterwards, so pick something the customer will still recognize in two years. Set coordinatesSource to RESOLVED_FROM_ADDRESS to let Google geocode the address rather than supplying coordinates yourself.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON building object with buildingId, buildingName and floorNames.
coordinatesSourcestringnonullOptional. "RESOLVED_FROM_ADDRESS", "CLIENT_SPECIFIED" or "SOURCE_UNSPECIFIED".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Create a resource feature. Additive; it tags nothing until a room names it. Body: {"name":"Whiteboard"}. The name is what users see in the room picker's filters, so write it the way they would look for it.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object body: {"name":"Whiteboard"}.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Create a bookable resource. Additive; Google generates its resourceEmail and it becomes bookable straight away. Body: {"resourceId":"nyc-1-conf-a","resourceName":"Conference A","resourceCategory":"CONFERENCE_ROOM","capacity":10,"buildingId":"NYC-01","floorName":"1"}. resourceId is chosen by you and immutable. floorName must exactly match one of the building's floorNames or the room will not group correctly, and buildingId must name a building that already exists.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON resource object with resourceId, resourceName and resourceCategory.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Delete a building. Destructive: Google refuses while rooms still reference it, so clear or move those first — and be aware that reassigning rooms to a different building changes where they appear in everyone's room picker. Existing bookings are unaffected either way; this is directory data, not calendar data.

ParamTypeRequiredDefaultDescription
buildingIdstringyesThe building's buildingId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Delete a resource feature. Destructive: every room tagged with it loses the tag, so rooms that were findable by filtering on this feature stop appearing in those searches — an accessibility or video-conferencing tag is exactly the kind whose loss strands the people who depend on it. To change a label, use gws_rename_calendar_feature rather than deleting and recreating.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
featureKeystringyesThe feature's name.

[Google Workspace] Delete a bookable resource. Destructive, and the failure mode is quiet rather than loud: the room's calendar and its resourceEmail go, so EXISTING MEETINGS BOOKED INTO IT KEEP THEIR ROOM LINE BUT THE ROOM NO LONGER EXISTS — organizers are not notified and nobody finds out until they turn up. Check for future bookings before deleting a room that is in use, and prefer renaming or re-tagging when the room is merely being repurposed.

ParamTypeRequiredDefaultDescription
calendarResourceIdstringyesThe resource's resourceId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Retrieve one building by its buildingId, including its floor list and postal address. The floor names matter beyond labelling: a room's floorName has to match one of the strings here for the room to appear in the right place when people book.

ParamTypeRequiredDefaultDescription
buildingIdstringyesThe building's buildingId, from gws_list_buildings.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Retrieve one resource feature by name. Features are identified BY THEIR NAME rather than by a generated id, which is why renaming one has its own tool — see gws_rename_calendar_feature.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
featureKeystringyesThe feature's name, e.g. "Whiteboard".

[Google Workspace] Retrieve one bookable resource by its resourceId — its name, category, capacity, building and floor, the features it is tagged with, and its resourceEmail. Note the two names: resourceName is what you set, while generatedResourceName is the composed display name Google shows in the room picker, and only the second is what users will recognize.

ParamTypeRequiredDefaultDescription
calendarResourceIdstringyesThe resource's resourceId, from gws_list_calendar_resources.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] List the buildings defined for the domain, with their floor names, addresses and map coordinates. Buildings are the geography that rooms are organized under — Google groups room suggestions by building and floor when someone books a meeting, so a domain with rooms but no buildings gives people a flat list to hunt through.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
maxResultsintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the resource features defined for the domain — the tags such as "Whiteboard", "Video conferencing" or "Step-free access" that rooms are marked with and that people filter on when booking. A feature must exist here before any room can be tagged with it.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
maxResultsintegernonullOptional. Page size.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List bookable calendar resources — meeting rooms, equipment, and anything else people can book. query filters on resource fields, e.g. "resourceCategory=CONFERENCE_ROOM", "buildingId=NYC-01" or "capacity>=10"; orderBy sorts on fields such as "buildingId,capacity". Each entry carries the generated resourceEmail, which is the address a meeting invitation has to be sent to for the room to be booked.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
maxResultsintegernonullOptional. Page size.
orderBystringnonullOptional. Sort, e.g. "buildingId,capacity desc".
pageTokenstringnonullOptional. nextPageToken from the previous page.
querystringnonullOptional. Filter, e.g. "resourceCategory=CONFERENCE_ROOM" or "capacity>=10".

[Google Workspace] Update named fields on a building, merging rather than replacing. The right tool for renaming it, correcting its address, or adding a floor — though note that supplying floorNames replaces the whole array, so build the complete floor list from gws_get_building first.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
buildingIdstringyesThe building's buildingId.
coordinatesSourcestringnonullOptional. "RESOLVED_FROM_ADDRESS", "CLIENT_SPECIFIED" or "SOURCE_UNSPECIFIED".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Update named fields on a resource feature, merging rather than replacing. There is little to change on a feature beyond its name, and gws_rename_calendar_feature is the right tool for that — this exists for completeness and for any field Google adds later.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
featureKeystringyesThe feature's current name.

[Google Workspace] Update named fields on a bookable resource, merging rather than replacing. The right tool for correcting a capacity, moving a room to another floor, or re-tagging its features ({"featureInstances":[{"feature":{"name":"Whiteboard"}}]}) — bearing in mind that featureInstances, being a list, is replaced as a whole rather than merged.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
calendarResourceIdstringyesThe resource's resourceId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Rename a resource feature, keeping every room tagged with it attached. This exists as its own operation because features are keyed by name: deleting and recreating one to change its label would untag every room in the domain, whereas this changes the label in place.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
newNamestringyesThe new name, e.g. "Interactive whiteboard".
oldNamestringyesThe feature's current name.

[Google Workspace] REPLACE a building wholesale. Google's PUT: omitted fields are cleared, and an omitted floorNames array empties the floor list — which detaches every room whose floorName referred to one of them. Prefer gws_patch_building, and read the current record with gws_get_building before sending a complete one.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON building object. Omitted fields are cleared.
buildingIdstringyesThe building's buildingId.
coordinatesSourcestringnonullOptional. "RESOLVED_FROM_ADDRESS", "CLIENT_SPECIFIED" or "SOURCE_UNSPECIFIED".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] REPLACE a resource feature wholesale. Google's PUT, so it carries the usual clear-what-is-omitted semantics. For the one thing anyone actually wants to do here — changing a feature's name — use gws_rename_calendar_feature instead: it is the operation Google provides for it, and it keeps the rooms tagged with the feature attached to it.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON feature object. Omitted fields are cleared.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
featureKeystringyesThe feature's current name.

[Google Workspace] REPLACE a bookable resource wholesale. Google's PUT: omitted fields are cleared, so a body that names only the capacity strips the building, floor and feature tags — leaving a room that still exists and still takes bookings but has fallen out of every filtered room picker. Prefer gws_patch_calendar_resource; read the current record first if this is genuinely the right tool.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON resource object. Omitted fields are cleared.
calendarResourceIdstringyesThe resource's resourceId.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

Custom User Schemas

ToolPlanAccessSummary
gws_create_schemaProWriteCreate a custom user schema.
gws_delete_schemaProDestructiveDelete a custom user schema.
gws_get_schemaFreeRead-onlyRetrieve one custom schema by name or id, with its full field list — each field's type, whether it accepts multiple values, and its read-access setting (ADMINS_AND_SELF keeps a field private to…
gws_list_schemasFreeRead-onlyList the custom schemas defined for the domain — the extra user fields a customer has added, such as employee number, start date or cost centre.
gws_patch_schemaProWriteUpdate named properties of a custom schema, merging rather than replacing.
gws_update_schemaProDestructiveREPLACE a custom schema wholesale.

[Google Workspace] Create a custom user schema. Additive — it defines fields, sets no values, and changes nothing about existing users. Body: {"schemaName":"EmployeeInfo","displayName":"Employee Info","fields":[{"fieldName":"employeeNumber","fieldType":"STRING","multiValued":false,"readAccessType":"ADMINS_AND_SELF"}]}. Field types are STRING, INT64, BOOL, DATE, DOUBLE, EMAIL and PHONE. Choose fieldType carefully: it cannot be changed later, so a field created as STRING stays STRING even if it only ever holds numbers.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON schema object with schemaName and fields.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Delete a custom user schema. Destructive well beyond the definition itself: EVERY user's stored values for every field in this schema are deleted with it, across the entire directory, and there is no undo and no export on the way out. If those values are the customer's only record of employee numbers or start dates, they are gone. Export them first by reading users with projection="FULL".

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
schemaKeystringyesThe schema's name or immutable id.

[Google Workspace] Retrieve one custom schema by name or id, with its full field list — each field's type, whether it accepts multiple values, and its read-access setting (ADMINS_AND_SELF keeps a field private to administrators and the user themselves, rather than visible across the directory).

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
schemaKeystringyesThe schema's name or immutable id, e.g. "EmployeeInfo".

[Google Workspace] List the custom schemas defined for the domain — the extra user fields a customer has added, such as employee number, start date or cost centre. UNPAGINATED. Read this before querying users by a custom field: gws_list_users accepts a query like "EmployeeInfo.employeeNumber=12345", and both halves of that name have to match a real schema and field exactly.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Update named properties of a custom schema, merging rather than replacing. The right tool for changing a display name. Be aware that the fields array is still replaced as a whole when supplied — merging applies to top-level properties, not to list contents — so to add a field, read the existing definition with gws_get_schema, append to its fields array, and send the complete array back.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the properties to change.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
schemaKeystringyesThe schema's name or immutable id.

[Google Workspace] REPLACE a custom schema wholesale. Google's PUT: any field omitted from the body is removed from the schema, and removing a field DELETES the value every user had stored in it. That makes an incomplete body a silent data loss across the whole directory rather than a rejected request. Read the current definition with gws_get_schema and send it back complete, or use gws_patch_schema instead.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON schema object. Omitted fields are removed, and their stored values with them.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
schemaKeystringyesThe schema's name or immutable id.

Account Security

ToolPlanAccessSummary
gws_delete_user_app_passwordProDestructiveRevoke one of a user's application-specific passwords.
gws_delete_user_tokenProDestructiveRevoke a third-party application's access to a user's Google account.
gws_generate_user_verification_codesProWriteGenerate a fresh set of 2-step verification backup codes for a user.
gws_get_user_app_passwordFreeRead-onlyRetrieve one application-specific password record by its codeId — the name the user gave it, when it was created and when it was last used.
gws_get_user_tokenFreeRead-onlyRetrieve one third-party application grant for a user, keyed by the application's OAuth client id, including the exact scopes it holds and whether it is a native application.
gws_invalidate_user_verification_codesProDestructiveInvalidate every one of a user's 2-step verification backup codes without issuing new ones.
gws_list_user_app_passwordsFreeRead-onlyList a user's application-specific passwords — the single-purpose passwords issued for older clients that cannot complete 2-step verification.
gws_list_user_tokensFreeRead-onlyList the third-party applications a user has granted access to their Google account, with the scopes each was given.
gws_list_user_verification_codesFreeRead-onlyList a user's current 2-step verification backup codes.
gws_turn_off_user_two_step_verificationProDestructiveTurn off 2-step verification for a user, unenrolling them entirely.

[Google Workspace] Revoke one of a user's application-specific passwords. Destructive: whatever was using it stops authenticating immediately, and because these are typically old mail clients, scanners and copiers, the breakage often shows up somewhere nobody connected to this change. It cannot be restored — the user has to create a new one and reconfigure the device. Check the last-used time with gws_get_user_app_password first; a password unused for months is a safe revocation, one used this morning is not.

ParamTypeRequiredDefaultDescription
codeIdstringyesThe password's codeId, from gws_list_user_app_passwords.
userKeystringyesThe user's email address or numeric id.

[Google Workspace] Revoke a third-party application's access to a user's Google account. Destructive and it can reach further than intended: the same mechanism that removes an attacker's app also removes the customer's own integrations, so revoking a token can silently break a backup tool, a CRM sync or a signature manager that nobody associates with this action. Read the grant with gws_get_user_token first and confirm what the application is. To cut off everything at once during an incident, gws_sign_out_user plus a password reset is the broader hammer.

ParamTypeRequiredDefaultDescription
clientIdstringyesThe application's OAuth client id, from gws_list_user_tokens.
userKeystringyesThe user's email address or numeric id.

[Google Workspace] Generate a fresh set of 2-step verification backup codes for a user. Not destructive — the user ends up with working codes — but note the side effect: this REPLACES the existing set, so any codes the user has printed or saved stop working the moment it runs. Read the new set with gws_list_user_verification_codes afterwards. The user must already be enrolled in 2-step verification for this to succeed.

ParamTypeRequiredDefaultDescription
userKeystringyesThe user's email address or numeric id.

[Google Workspace] Retrieve one application-specific password record by its codeId — the name the user gave it, when it was created and when it was last used. The password value is never returned by the API and cannot be recovered; a lost app password has to be revoked and reissued by the user.

ParamTypeRequiredDefaultDescription
codeIdstringyesThe password's codeId, from gws_list_user_app_passwords.
userKeystringyesThe user's email address or numeric id.

[Google Workspace] Retrieve one third-party application grant for a user, keyed by the application's OAuth client id, including the exact scopes it holds and whether it is a native application. Read the scopes before revoking: a grant with a mail scope is a very different thing from one with a calendar-read scope.

ParamTypeRequiredDefaultDescription
clientIdstringyesThe application's OAuth client id, from gws_list_user_tokens.
userKeystringyesThe user's email address or numeric id.

[Google Workspace] Invalidate every one of a user's 2-step verification backup codes without issuing new ones. Destructive: the codes are gone, and a user who then loses their phone has no backup route into the account and will need an administrator to help them recover it. The right response to backup codes having been exposed — in a shared document, a screenshot or a compromised mailbox. If the user still needs codes, gws_generate_user_verification_codes both invalidates the old set and issues a new one in a single step.

ParamTypeRequiredDefaultDescription
userKeystringyesThe user's email address or numeric id.

[Google Workspace] List a user's application-specific passwords — the single-purpose passwords issued for older clients that cannot complete 2-step verification. The response names each one and when it was last used, never the password itself. Worth auditing: an app password bypasses 2SV by design, so a forgotten one on a decommissioned device is a standing way into the account. UNPAGINATED.

ParamTypeRequiredDefaultDescription
userKeystringyesThe user's email address or numeric id.

[Google Workspace] List the third-party applications a user has granted access to their Google account, with the scopes each was given. The first place to look after a phishing report or a suspicious-login alert: an attacker who has authorized their own OAuth app keeps access even after a password reset, because the token is independent of the password. Also the honest inventory for an offboarding — every entry is something still able to read that person's data. UNPAGINATED.

ParamTypeRequiredDefaultDescription
userKeystringyesThe user's email address or numeric id.

[Google Workspace] List a user's current 2-step verification backup codes. HANDLE THE RESPONSE AS A CREDENTIAL: it contains the usable codes themselves, each of which completes 2SV for that account once. This exists so an administrator can read a code to a locked-out user over a verified phone call — do not paste the response anywhere it will persist, such as a ticket note or a chat channel. UNPAGINATED.

ParamTypeRequiredDefaultDescription
userKeystringyesThe user's email address or numeric id.

[Google Workspace] Turn off 2-step verification for a user, unenrolling them entirely. Destructive in the security sense rather than the data sense: it LOWERS THE CUSTOMER'S SECURITY POSTURE, leaving that account protected by its password alone, and it may breach a policy or an insurance requirement the customer has signed up to. The legitimate use is a user who has lost every second factor and has no backup codes; the safer alternatives are reading them a backup code with gws_list_user_verification_codes or issuing a new set. If it is used for a recovery, re-enrollment is the user's own action — nothing here turns it back on.

ParamTypeRequiredDefaultDescription
userKeystringyesThe user's email address or numeric id.

Admin Roles

ToolPlanAccessSummary
gws_create_roleProWriteCreate a custom administrator role.
gws_create_role_assignmentProDestructiveGrant an administrator role to a user.
gws_delete_roleProDestructiveDelete a custom administrator role.
gws_delete_role_assignmentProDestructiveRevoke an administrator role from a user.
gws_get_roleFreeRead-onlyRetrieve one administrator role by its numeric roleId, including the full list of privileges it carries.
gws_get_role_assignmentFreeRead-onlyRetrieve one role assignment by its id — which role, which user, and the scope it applies to (the whole customer, or a single organizational unit).
gws_list_privilegesFreeRead-onlyList every privilege that can be put into a custom administrator role, as a tree of privilege names and the service each belongs to.
gws_list_role_assignmentsFreeRead-onlyList who holds which administrator roles.
gws_list_rolesFreeRead-onlyList the administrator roles defined for the domain, both Google's built-in ones (Super Admin, User Management, Help Desk and the rest) and any custom roles.
gws_patch_roleProWriteUpdate named fields on a custom administrator role, merging rather than replacing.
gws_update_roleProDestructiveREPLACE an administrator role wholesale.

[Google Workspace] Create a custom administrator role. Additive and it grants nobody anything on its own — a role only takes effect once gws_create_role_assignment binds it to someone. Body: {"roleName":"Help Desk (read only)","roleDescription":"...","rolePrivileges":[{"privilegeName":"USERS_RETRIEVE","serviceId":"00haapch16h1ysv"}]}. Take both privilegeName and serviceId from gws_list_privileges; they are a pair and a mismatched serviceId is rejected.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON role object with roleName and rolePrivileges.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Grant an administrator role to a user. Marked as changing things because it GRANTS ADMINISTRATIVE POWER — assigning the Super Admin role hands over total control of the domain, exactly as gws_make_user_admin does, and nothing about the tool name says so. Body: {"roleId":"12345","assignedTo":"<numeric user id>","scopeType":"CUSTOMER"}. assignedTo is the user's NUMERIC id, not their email — take it from gws_get_user. Use scopeType "ORG_UNIT" with orgUnitId to confine the role to part of the tree. Confirm what the role can do with gws_get_role first.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with roleId, assignedTo (numeric user id) and scopeType.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Delete a custom administrator role. Destructive twice over: the privilege list is not recoverable, and every assignment of the role goes with it, so each of its assignees loses that administrative access immediately. Check who is affected with gws_list_role_assignments filtered by roleId before running this. Built-in system roles cannot be deleted.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
roleIdstringyesThe role's numeric roleId.

[Google Workspace] Revoke an administrator role from a user. Destructive: that person loses the access immediately, and if the role was their only administrative grant they lose the admin console with it. Two cautions worth checking first — revoking the last Super Admin assignment can leave the domain without a full administrator, and this connector's own service account acts as a named super-admin, so revoking that person's role breaks every Google Workspace tool here.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
roleAssignmentIdstringyesThe assignment's roleAssignmentId, from gws_list_role_assignments.

[Google Workspace] Retrieve one administrator role by its numeric roleId, including the full list of privileges it carries. Read this before editing a role or assigning it to anyone: the privilege list is the only accurate statement of what the role can do, and role names in Workspace are free text that often outlive what they describe.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
roleIdstringyesThe role's numeric roleId, from gws_list_roles.

[Google Workspace] Retrieve one role assignment by its id — which role, which user, and the scope it applies to (the whole customer, or a single organizational unit). The scope matters: the same role assigned at an org-unit scope gives that administrator power over only that part of the tree.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
roleAssignmentIdstringyesThe assignment's roleAssignmentId, from gws_list_role_assignments.

[Google Workspace] List every privilege that can be put into a custom administrator role, as a tree of privilege names and the service each belongs to. This is the vocabulary gws_create_role expects — a role body must name privileges exactly as they appear here, and an invalid name fails the whole call rather than being ignored. UNPAGINATED.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] List who holds which administrator roles. The core question of an admin-access audit: filter by userKey to answer "what can this person do?", or by roleId to answer "who holds this role?". Set includeIndirectRoleAssignments=true to include roles granted through a group rather than directly — a person can be a Super Admin purely through group membership, and the default view does not show it. Caps at 100 per page.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
includeIndirectRoleAssignmentsbooleannonullOptional. Include roles granted via group membership.
maxResultsintegernonullOptional. Page size, maximum 100.
pageTokenstringnonullOptional. nextPageToken from the previous page.
roleIdstringnonullOptional. Only assignments of this roleId.
userKeystringnonullOptional. Only assignments held by this user (email or id).

[Google Workspace] List the administrator roles defined for the domain, both Google's built-in ones (Super Admin, User Management, Help Desk and the rest) and any custom roles. Each entry carries its privilege list and whether it is a system role. Built-in roles cannot be edited or deleted; isSystemRole in the response is how to tell before trying. Caps at 100 per page.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
maxResultsintegernonullOptional. Page size, maximum 100.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] Update named fields on a custom administrator role, merging rather than replacing. The right tool for renaming a role or editing its description. Note that supplying rolePrivileges here still replaces the whole privilege ARRAY — merging applies to top-level fields, not to the contents of a list — so build the intended full privilege set from gws_get_role before sending one. Built-in system roles cannot be modified.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
roleIdstringyesThe role's numeric roleId.

[Google Workspace] REPLACE an administrator role wholesale. Google's PUT: privileges omitted from the body are removed from the role, and that change reaches EVERY user the role is assigned to at once — a body that lists two privileges where the role had ten silently strips eight administrators' access. Prefer gws_patch_role, and read the current privilege list with gws_get_role first either way. Built-in system roles cannot be modified.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON role object. Omitted privileges are removed.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
roleIdstringyesThe role's numeric roleId.

Customer

ToolPlanAccessSummary
gws_get_customerFreeRead-onlyRetrieve the Workspace account's own profile — organization name, postal address, primary domain, alternate contact email, language and the account creation date.
gws_patch_customerProWriteUpdate named fields on the customer profile, merging rather than replacing.
gws_update_customerProDestructiveREPLACE the customer profile wholesale.

[Google Workspace] Retrieve the Workspace account's own profile — organization name, postal address, primary domain, alternate contact email, language and the account creation date. Also returns the numeric customer id, which some other Google APIs require in a form that the usual "my_customer" shorthand does not satisfy. Leave customerKey empty to read the account the stored administrator belongs to, which is almost always what is wanted.

ParamTypeRequiredDefaultDescription
customerKeystringnonullOptional. A specific customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Update named fields on the customer profile, merging rather than replacing. The right tool for correcting an organization name, a postal address, the language, or the alternate contact email ({"alternateEmail":"it@example.com"}). Changing the alternate email changes where Google sends account-recovery mail, so point it somewhere the customer actually monitors.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
customerKeystringnonullOptional. A specific customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] REPLACE the customer profile wholesale. Google's PUT: fields omitted from the body are cleared, so an incomplete body silently erases the organization's postal address or alternate contact email — and the alternate email is where Google sends account-recovery and security notices, which makes losing it worse than it looks. Prefer gws_patch_customer for every ordinary edit; read the current record with gws_get_customer first if this tool really is the right one.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON customer object. Omitted fields are cleared.
customerKeystringnonullOptional. A specific customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

Shared Drives

ToolPlanAccessSummary
gws_create_shared_driveProWriteCreate a shared drive.
gws_delete_shared_driveProDestructiveDelete a shared drive.
gws_get_shared_driveFreeRead-onlyRetrieve one shared drive by its driveId — its name, creation time, restrictions and capabilities.
gws_hide_shared_driveProWriteHide a shared drive from the impersonated user's own Drive list.
gws_list_shared_drivesFreeRead-onlyList shared drives.
gws_patch_shared_driveProWriteUpdate a shared drive's name, theme or restrictions, merging rather than replacing.
gws_unhide_shared_driveProWriteRestore a hidden shared drive to the impersonated user's Drive list.

[Google Workspace] Create a shared drive. Additive; it starts empty with the impersonated user as its organizer, so act as the person who should own it. requestId is REQUIRED and is an idempotency key: send a random UUID, and if the same user repeats the same requestId Google returns the drive already created rather than making a second one — so on a timeout, retry with the SAME value rather than a new one. Body: {"name":"Finance"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body: {"name":"Finance"}.
requestIdstringyesA random UUID. Idempotency key — reuse it verbatim when retrying.
userEmailstringyesThe email address to act as. Becomes the drive's organizer.

[Google Workspace] Delete a shared drive. Destructive, and one parameter changes it from a safe operation into a data-loss one: by default Google REFUSES to delete a drive that still contains anything, but allowItemDeletion=true overrides that and DELETES EVERY FILE IN THE DRIVE ALONG WITH IT — an entire team's documents, in one call, with no per-file confirmation. Leave allowItemDeletion unset unless the customer has explicitly agreed to lose the contents, and confirm the drive is the one you mean with gws_get_shared_drive first. Requires useDomainAdminAccess=true unless the impersonated user is an organizer of the drive.

ParamTypeRequiredDefaultDescription
allowItemDeletionbooleannonullOptional. TRUE ALSO DELETES EVERY FILE IN THE DRIVE. Leave unset to have Google refuse a non-empty drive.
driveIdstringyesThe shared drive's driveId.
useDomainAdminAccessbooleannonullOptional. True to act as a domain administrator rather than an organizer.
userEmailstringyesThe email address to act as.

[Google Workspace] Retrieve one shared drive by its driveId — its name, creation time, restrictions and capabilities. The capabilities block is the useful part: it states what the impersonated user can actually do with this drive, which is the quickest way to explain why an action was refused. Pass useDomainAdminAccess=true to read a drive the user is not a member of.

ParamTypeRequiredDefaultDescription
driveIdstringyesThe shared drive's driveId.
useDomainAdminAccessbooleannonullOptional. True to read a drive the user is not a member of.
userEmailstringyesThe email address to act as.

[Google Workspace] Hide a shared drive from the impersonated user's own Drive list. Not destructive and affects nobody else: nothing is deleted, no permissions change, and every other member still sees the drive. This is a per-user view preference, and gws_unhide_shared_drive reverses it.

ParamTypeRequiredDefaultDescription
driveIdstringyesThe shared drive's driveId.
userEmailstringyesThe email address to act as. Only this person's view changes.

[Google Workspace] List shared drives. Pass useDomainAdminAccess=true to see every shared drive in the domain rather than only the ones the impersonated user belongs to — without it the response is usually short or empty and looks like a permissions problem. query filters with Drive syntax, e.g. "name contains 'Finance'" or "memberCount = 0" to find abandoned drives. Caps at 100 per page. userEmail should be an administrator when useDomainAdminAccess is true.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Page size, maximum 100.
pageTokenstringnonullOptional. nextPageToken from the previous page.
querystringnonullOptional. Drive query, e.g. "name contains 'Finance'".
useDomainAdminAccessbooleannonullOptional. True to see every shared drive in the domain.
userEmailstringyesThe email address to act as. Use an administrator with useDomainAdminAccess.

[Google Workspace] Update a shared drive's name, theme or restrictions, merging rather than replacing. Drive offers no wholesale-replace form at all, which is why there is no gws_update_shared_drive alongside this one. The restrictions block is the consequential part — {"restrictions":{"domainUsersOnly":true}} stops the drive being shared outside the organization, and setting it on a drive already shared with external collaborators cuts off their access.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object with only the fields to change.
driveIdstringyesThe shared drive's driveId.
useDomainAdminAccessbooleannonullOptional. True to act on a drive the user is not a member of.
userEmailstringyesThe email address to act as.

[Google Workspace] Restore a hidden shared drive to the impersonated user's Drive list. Not destructive; the counterpart to gws_hide_shared_drive and, like it, affects only that one person's view.

ParamTypeRequiredDefaultDescription
driveIdstringyesThe shared drive's driveId.
userEmailstringyesThe email address to act as. Only this person's view changes.

Gmail Settings

ToolPlanAccessSummary
gws_create_gmail_cse_identityProWriteConfigure a send-as address to send client-side-encrypted mail using one of the user's existing CSE key pairs.
gws_create_gmail_cse_keypairProWriteUpload a client-side encryption key pair for one user.
gws_create_gmail_delegateProDestructiveGive another user delegated access to one mailbox.
gws_create_gmail_filterProDestructiveCreate a filter in one user's mailbox that acts automatically on matching incoming mail.
gws_create_gmail_forwarding_addressProDestructiveRegister a forwarding destination on one user's mailbox.
gws_create_gmail_send_as_aliasProDestructiveAdd a send-as alias to one user's mailbox, letting them put that address in the From line.
gws_delete_gmail_cse_identityProDestructiveRemove a client-side encryption identity from a user, so that address stops sending encrypted mail.
gws_delete_gmail_delegateProDestructiveRemove a delegate's access to one mailbox.
gws_delete_gmail_filterProDestructiveDelete a filter from one user's mailbox.
gws_delete_gmail_forwarding_addressProDestructiveRemove a forwarding destination from one user's mailbox.
gws_delete_gmail_send_as_aliasProDestructiveRemove a send-as alias from one user's mailbox.
gws_delete_gmail_smime_infoProDestructiveDelete an S/MIME certificate from one of a user's send-as addresses.
gws_disable_gmail_cse_keypairProDestructiveTurn off a client-side encryption key pair.
gws_enable_gmail_cse_keypairProWriteTurn a disabled client-side encryption key pair back on, restoring the user's ability to read the mail encrypted under it.
gws_get_gmail_auto_forwardingFreeRead-onlyRead one user's Gmail auto-forwarding configuration — whether all incoming mail is being forwarded, to which address, and what happens to the original copy.
gws_get_gmail_cse_identityFreeRead-onlyRead one client-side encryption identity belonging to a user, including the id of the key pair it sends with.
gws_get_gmail_cse_keypairFreeRead-onlyRead one client-side encryption key pair belonging to a user — its certificate chain, the addresses it covers, whether it is enabled, and its expiry.
gws_get_gmail_delegateFreeRead-onlyRead one delegate entry on a user's mailbox and its verification status.
gws_get_gmail_filterFreeRead-onlyRead one filter from a user's mailbox — its full criteria (from, to, subject, query, size, attachment tests) and its actions (labels added or removed, forwarding address, whether it marks read or…
gws_get_gmail_forwarding_addressFreeRead-onlyRead one forwarding address registered on a user's mailbox and its verification status.
gws_get_gmail_imap_settingsFreeRead-onlyRead one user's Gmail IMAP settings — whether IMAP access is enabled, what happens in the mail client when a message is expunged, and any folder size limit.
gws_get_gmail_language_settingsFreeRead-onlyRead one user's Gmail display language, as an IETF BCP 47 tag such as "en-GB" or "fr".
gws_get_gmail_pop_settingsFreeRead-onlyRead one user's Gmail POP settings — whether POP is enabled, which messages it covers (all mail, or only mail arriving from now on), and what Gmail does with a message after a POP client downloads it.
gws_get_gmail_send_as_aliasFreeRead-onlyRead one send-as alias belonging to a user, including its display name, reply-to address, signature HTML, whether it is the default, and its verification status.
gws_get_gmail_smime_infoFreeRead-onlyRead one S/MIME certificate attached to a user's send-as address — its issuer chain, validity dates and whether it is the default for signing.
gws_get_gmail_vacation_settingsFreeRead-onlyRead one user's Gmail vacation responder — whether the auto-reply is on, its subject and body, the start and end times, and whether it answers only contacts or only people inside the domain.
gws_insert_gmail_smime_infoProWriteUpload an S/MIME certificate for one of a user's send-as addresses.
gws_list_gmail_cse_identitiesFreeRead-onlyList one user's client-side encryption (CSE) identities — the send-as addresses configured to send encrypted mail, each naming the key pair it uses.
gws_list_gmail_cse_keypairsFreeRead-onlyList one user's client-side encryption key pairs, each with its certificate chain, subject addresses, enablement state and — for a disabled pair — the time after which it could be permanently…
gws_list_gmail_delegatesFreeRead-onlyList everyone who has delegated access to one user's mailbox, with each delegate's verification status.
gws_list_gmail_filtersFreeRead-onlyList every filter in one user's mailbox, each with its matching criteria and the actions it takes on a matching message.
gws_list_gmail_forwarding_addressesFreeRead-onlyList the addresses one user has registered as forwarding destinations, each with its verification status.
gws_list_gmail_send_as_aliasesFreeRead-onlyList every address one user can send mail AS — their own primary address, any group or alias address they have been given, and any external address they have added and verified.
gws_list_gmail_smime_infoFreeRead-onlyList the S/MIME certificates uploaded for one of a user's send-as addresses, with each certificate's issuer, expiry and whether it is the default for signing.
gws_patch_gmail_cse_identityProWriteAssociate a different key pair with an existing client-side encryption identity — the normal way to move a user onto a renewed certificate.
gws_patch_gmail_send_as_aliasProWriteUpdate selected fields on one of a user's send-as aliases, leaving every field you do not send exactly as it was.
gws_set_default_gmail_smime_infoProWriteChoose which of the certificates already uploaded for a send-as address is used to sign outgoing mail.
gws_update_gmail_auto_forwardingProDestructiveReplace one user's Gmail auto-forwarding configuration WHOLESALE.
gws_update_gmail_imap_settingsProDestructiveReplace one user's Gmail IMAP settings WHOLESALE.
gws_update_gmail_language_settingsProDestructiveReplace one user's Gmail display language.
gws_update_gmail_pop_settingsProDestructiveReplace one user's Gmail POP settings WHOLESALE — Google's PUT overwrites the whole object, so omitted fields revert to their defaults.
gws_update_gmail_send_as_aliasProDestructiveReplace one of a user's send-as aliases WHOLESALE.
gws_update_gmail_vacation_settingsProDestructiveReplace one user's Gmail vacation responder WHOLESALE, and switch it on or off.
gws_verify_gmail_send_as_aliasProDestructiveSend a verification email for a pending send-as alias.

[Google Workspace] Configure a send-as address to send client-side-encrypted mail using one of the user's existing CSE key pairs. Additive — it creates a new identity and changes no existing one — which is why it is not destructive. The key pair named in primaryKeyPairId must already exist and be enabled; create it with gws_create_gmail_cse_keypair first.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe CseIdentity object as JSON, e.g. {"emailAddress":"jsmith@example.com","primaryKeyPairId":"<key pair id>"}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Upload a client-side encryption key pair for one user. Additive — it adds a key pair alongside any already present and disturbs no existing one — which is why it is not destructive; the new pair is not used for anything until an identity points at it. The body carries the PEM certificate chain plus the private key METADATA that tells Gmail which external key service holds the actual key; Google never receives the private key itself. Leave chainValidation unset unless you are deliberately loading an out-of-date chain to decrypt historical mail.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe CseKeyPair object as JSON, carrying pkcs7 (the PEM certificate chain) and privateKeyMetadata.
chainValidationstringnonullCertificate chain validation at creation. Exactly two values: "all" (the default — full chain and revocation checks) or "none" (skip them, for deliberately loading an out-of-use chain to decrypt historical mail). Any other value is rejected.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Give another user delegated access to one mailbox. Destructive because it GRANTS STANDING ACCESS TO SOMEONE ELSE'S MAIL: a delegate can read every message, search the whole mailbox, and send mail that appears to come from the owner. That makes it an exfiltration and impersonation route as well as a convenience feature, and adding a delegate is how an intruder keeps reading a mailbox after the owner's password is reset. The delegate must be in the same Workspace account. Confirm the mailbox owner actually asked for this before running it.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe Delegate object as JSON, e.g. {"delegateEmail":"assistant@example.com"}.
userEmailstringyesThe mailbox owner's email address — the mailbox being GIVEN AWAY access to, e.g. "jsmith@example.com".

[Google Workspace] Create a filter in one user's mailbox that acts automatically on matching incoming mail. Destructive because of what the ACTION can be, not because anything is deleted here: a filter whose addLabelIds contains TRASH silently deletes every matching message from then on, one that removes INBOX hides them, and one with a forward action sends copies elsewhere. Those are the standard business-email-compromise persistence techniques, and the filter keeps running unattended. Nothing warns the mailbox owner. Read back what you created with gws_list_gmail_filters. Body: criteria (from, to, subject, query, hasAttachment, size) plus action (addLabelIds, removeLabelIds, forward).

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe Filter object as JSON, e.g. {"criteria":{"from":"newsletter@example.com"},"action":{"addLabelIds":["Label_12"],"removeLabelIds":["INBOX"]}}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Register a forwarding destination on one user's mailbox. Destructive for two reasons: it is the PREREQUISITE STEP for turning auto-forwarding on, so it is the first half of the standard business-email-compromise exfiltration route, and for an address outside this Workspace account Google IMMEDIATELY EMAILS A VERIFICATION MESSAGE TO A REAL HUMAN there, which cannot be recalled. Registering an address does not by itself start forwarding — gws_update_gmail_auto_forwarding does that — but it removes the obstacle. Do not add an address the mailbox owner has not asked for.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe ForwardingAddress object as JSON, e.g. {"forwardingEmail":"archive@example.com"}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Add a send-as alias to one user's mailbox, letting them put that address in the From line. Destructive because of what it does OUTSIDE Google: if the address is not one this Workspace account owns, Google IMMEDIATELY EMAILS A VERIFICATION MESSAGE TO A REAL HUMAN at that address, which cannot be recalled. It also grants the mailbox a new sending identity, so an alias added without the owner's knowledge lets that account send mail appearing to come from somewhere else. Body fields: sendAsEmail, displayName, replyToAddress, signature, isDefault, treatAsAlias.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe SendAs object as JSON, e.g. {"sendAsEmail":"support@example.com","displayName":"Support","treatAsAlias":true}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Remove a client-side encryption identity from a user, so that address stops sending encrypted mail. Destructive as a capability removal: the user silently loses the ability to send CSE mail from that address, and anyone expecting encrypted correspondence from them starts receiving it in the clear instead. The key pair itself is NOT deleted and previously received encrypted mail stays readable, so this is reversible by recreating the identity against the same key pair.

ParamTypeRequiredDefaultDescription
cseEmailAddressstringyesThe CSE identity's email address to remove, e.g. "jsmith@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Remove a delegate's access to one mailbox. Destructive as an access revocation: the delegate loses the ability to read and send immediately, which breaks an assistant's or a shared-mailbox team's day-to-day work if the wrong entry is removed. Check gws_list_gmail_delegates first. This is the tool that cuts off unauthorised delegated access found during incident response.

ParamTypeRequiredDefaultDescription
delegateEmailstringyesThe delegate's email address to remove, e.g. "assistant@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Delete a filter from one user's mailbox. The filter's criteria and actions are gone with no undo — recreating it means knowing exactly what it contained, so read it with gws_get_gmail_filter first if it might need to come back. Deleting only stops the filter acting on FUTURE mail; messages it has already labelled, archived or deleted stay as they are. This is the tool that removes a malicious filter found during incident response.

ParamTypeRequiredDefaultDescription
filterIdstringyesThe filter id to delete, from gws_list_gmail_filters.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Remove a forwarding destination from one user's mailbox. If auto-forwarding is currently pointing at this address, forwarding stops. The verification is lost with the record, so re-adding the address means the owner of it has to click a fresh verification email again. This is the tool that closes an exfiltration route found during incident response — pair it with gws_update_gmail_auto_forwarding to switch forwarding off as well.

ParamTypeRequiredDefaultDescription
forwardingEmailstringyesThe forwarding address to remove, e.g. "archive@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Remove a send-as alias from one user's mailbox. The alias's signature and reply-to settings go with it and are not recoverable — re-adding the address means verifying it again and rewriting the signature. Google refuses to delete the user's own primary address. Legitimate during offboarding, when a shared identity should stop being available to a departing person.

ParamTypeRequiredDefaultDescription
sendAsEmailstringyesThe send-as address to remove, e.g. "support@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Delete an S/MIME certificate from one of a user's send-as addresses. StackJack cannot put it back: Google stores the private key and never returns it, so restoring means obtaining the original PKCS#12 bundle again from wherever it was issued. If the deleted certificate was the default, the user stops signing outgoing mail. Check gws_list_gmail_smime_info first to confirm which certificate the id refers to.

ParamTypeRequiredDefaultDescription
idstringyesThe certificate id to delete, from gws_list_gmail_smime_info.
sendAsEmailstringyesThe send-as address the certificate belongs to, e.g. "jsmith@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Turn off a client-side encryption key pair. Destructive on two counts, and it does not look like it from the name. First, EVERY MESSAGE ENCRYPTED UNDER THIS KEY PAIR BECOMES UNREADABLE while it is disabled — an existing archive of mail stops opening, not just future mail. Second, disabling is Google's REQUIRED FIRST STEP toward permanently destroying the key pair, and starts the waiting period after which that becomes possible. Google refuses to disable a key pair an identity still points at, so move the identity to another key pair with gws_patch_gmail_cse_identity first. Reversible with gws_enable_gmail_cse_keypair.

ParamTypeRequiredDefaultDescription
keyPairIdstringyesThe key pair id to disable, from gws_list_gmail_cse_keypairs.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Turn a disabled client-side encryption key pair back on, restoring the user's ability to read the mail encrypted under it. Explicitly NOT destructive: it RESTORES access rather than removing it, and it also takes the key pair back out of the window in which it could be permanently destroyed. This is the undo for gws_disable_gmail_cse_keypair.

ParamTypeRequiredDefaultDescription
keyPairIdstringyesThe key pair id to enable, from gws_list_gmail_cse_keypairs.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one user's Gmail auto-forwarding configuration — whether all incoming mail is being forwarded, to which address, and what happens to the original copy. Takes the TARGET user's email address. This is the first thing to check on a suspected business email compromise: an attacker who has held an account commonly leaves forwarding switched on to keep reading the mail after the password is reset.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one client-side encryption identity belonging to a user, including the id of the key pair it sends with. Takes the TARGET user's email address and the identity's email address.

ParamTypeRequiredDefaultDescription
cseEmailAddressstringyesThe CSE identity's email address, e.g. "jsmith@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one client-side encryption key pair belonging to a user — its certificate chain, the addresses it covers, whether it is enabled, and its expiry. Takes the TARGET user's email address and the key pair id from gws_list_gmail_cse_keypairs. Use it to check an expiry date before mail starts failing to encrypt.

ParamTypeRequiredDefaultDescription
keyPairIdstringyesThe key pair id, from gws_list_gmail_cse_keypairs.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one delegate entry on a user's mailbox and its verification status. Takes the TARGET user's email address and the delegate's address. Only an accepted delegation is actually in force.

ParamTypeRequiredDefaultDescription
delegateEmailstringyesThe delegate's email address, e.g. "assistant@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one filter from a user's mailbox — its full criteria (from, to, subject, query, size, attachment tests) and its actions (labels added or removed, forwarding address, whether it marks read or skips the inbox). Takes the TARGET user's email address and the filter id from gws_list_gmail_filters.

ParamTypeRequiredDefaultDescription
filterIdstringyesThe filter id, from gws_list_gmail_filters.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one forwarding address registered on a user's mailbox and its verification status. Takes the TARGET user's email address and the forwarding address. Only a verified address can actually receive forwarded mail.

ParamTypeRequiredDefaultDescription
forwardingEmailstringyesThe forwarding address to read, e.g. "archive@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one user's Gmail IMAP settings — whether IMAP access is enabled, what happens in the mail client when a message is expunged, and any folder size limit. Takes the TARGET user's email address: this acts on that person's own mailbox, not on the administrator's. Useful when diagnosing why a desktop or phone mail client cannot connect, since IMAP being switched off at the account level looks identical to a wrong password from the client's side.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one user's Gmail display language, as an IETF BCP 47 tag such as "en-GB" or "fr". Takes the TARGET user's email address. An empty value means the user has never chosen one and Gmail is following the browser.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one user's Gmail POP settings — whether POP is enabled, which messages it covers (all mail, or only mail arriving from now on), and what Gmail does with a message after a POP client downloads it. Takes the TARGET user's email address. The disposition matters when diagnosing 'my mail disappears from the web interface': a POP client set to delete on download does exactly that.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one send-as alias belonging to a user, including its display name, reply-to address, signature HTML, whether it is the default, and its verification status. Takes the TARGET user's email address and the alias address.

ParamTypeRequiredDefaultDescription
sendAsEmailstringyesThe send-as address to read, e.g. "support@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one S/MIME certificate attached to a user's send-as address — its issuer chain, validity dates and whether it is the default for signing. Takes the TARGET user's email address, the send-as address and the certificate id from gws_list_gmail_smime_info.

ParamTypeRequiredDefaultDescription
idstringyesThe certificate id, from gws_list_gmail_smime_info.
sendAsEmailstringyesThe send-as address the certificate belongs to, e.g. "jsmith@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Read one user's Gmail vacation responder — whether the auto-reply is on, its subject and body, the start and end times, and whether it answers only contacts or only people inside the domain. Takes the TARGET user's email address. Commonly checked when a departed employee's mailbox is still answering senders.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Upload an S/MIME certificate for one of a user's send-as addresses. Additive — it adds a certificate alongside any already present and replaces nothing, which is why it is not destructive. The body carries the PKCS#12 bundle base64-encoded in pkcs12, plus encryptedKeyPassword if the bundle is password-protected. Note that the bundle contains the user's PRIVATE KEY: treat the value you pass as a secret and do not paste it into a ticket.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe SmimeInfo object as JSON, e.g. {"pkcs12":"<base64 PKCS#12 bundle>","encryptedKeyPassword":"..."}.
sendAsEmailstringyesThe send-as address to attach the certificate to, e.g. "jsmith@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] List one user's client-side encryption (CSE) identities — the send-as addresses configured to send encrypted mail, each naming the key pair it uses. Takes the TARGET user's email address. CSE is a separate feature from S/MIME: with CSE the encryption keys are held by the customer's own key service, so Google itself cannot read the mail. Only available on the Workspace editions that include CSE; other tenants get an error rather than an empty list.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullIdentities per page. Google defaults to 20 and publishes no maximum; StackJack caps this at 100 as a safety limit.
pageTokenstringnonullPagination token from the previous response's nextPageToken.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] List one user's client-side encryption key pairs, each with its certificate chain, subject addresses, enablement state and — for a disabled pair — the time after which it could be permanently destroyed. Takes the TARGET user's email address. Only PUBLIC certificate material is returned; the private keys live in the customer's own key service and Google never holds them.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullKey pairs per page. Google defaults to 20 and publishes no maximum; StackJack caps this at 100 as a safety limit.
pageTokenstringnonullPagination token from the previous response's nextPageToken.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] List everyone who has delegated access to one user's mailbox, with each delegate's verification status. Takes the TARGET user's email address. A delegate can read, search, send and delete on the owner's behalf, so this list answers 'who else can read this person's mail' — an unexpected name here is a serious finding. Legitimate uses are common: an assistant managing an executive's mail, or a shared team mailbox.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] List every filter in one user's mailbox, each with its matching criteria and the actions it takes on a matching message. Takes the TARGET user's email address. Read this during any account-compromise investigation: a filter that archives, deletes or forwards mail matching words like "invoice" or "payment" is the classic way an intruder hides their activity from the account owner, and it keeps working long after the password is changed.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] List the addresses one user has registered as forwarding destinations, each with its verification status. Takes the TARGET user's email address. A verified EXTERNAL address here is a standing exfiltration route: it is the prerequisite for switching auto-forwarding on, so this list plus gws_get_gmail_auto_forwarding answers 'is this mailbox copying itself somewhere' completely.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] List every address one user can send mail AS — their own primary address, any group or alias address they have been given, and any external address they have added and verified. Takes the TARGET user's email address. The list always includes the primary address, so it is never empty. Each entry carries its display name, reply-to, signature, verification status and whether it is the default From address. An unexpected external entry here is worth investigating: it lets the account send mail that appears to come from somewhere else.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] List the S/MIME certificates uploaded for one of a user's send-as addresses, with each certificate's issuer, expiry and whether it is the default for signing. Takes the TARGET user's email address and the send-as address. Only the PUBLIC certificate details are returned. An expired certificate here is the usual reason signed mail suddenly stops going out.

ParamTypeRequiredDefaultDescription
sendAsEmailstringyesThe send-as address whose certificates to list, e.g. "jsmith@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Associate a different key pair with an existing client-side encryption identity — the normal way to move a user onto a renewed certificate. A merging update that leaves fields you do not send alone, so it is not destructive; mail already sent stays readable because it is still decrypted with the key pair that encrypted it. The new key pair must exist and be enabled.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe CseIdentity fields to change, as JSON, e.g. {"primaryKeyPairId":"<new key pair id>"}.
emailAddressstringyesThe CSE identity's email address, e.g. "jsmith@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Update selected fields on one of a user's send-as aliases, leaving every field you do not send exactly as it was. This is the SAFE way to change a signature or display name — prefer it to gws_update_gmail_send_as_alias, whose PUT would clear the fields you omit. Send only the fields you want changed.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesOnly the SendAs fields to change, as JSON, e.g. {"signature":"<p>Regards,<br>Support</p>"}.
sendAsEmailstringyesThe send-as address to update, e.g. "support@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Choose which of the certificates already uploaded for a send-as address is used to sign outgoing mail. A selection among existing certificates — nothing is uploaded, deleted or overwritten, and setting a different one back is the same call — so it is not destructive. Typically used after uploading a renewal to switch signing over to it.

ParamTypeRequiredDefaultDescription
idstringyesThe certificate id to make default, from gws_list_gmail_smime_info.
sendAsEmailstringyesThe send-as address the certificate belongs to, e.g. "jsmith@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Replace one user's Gmail auto-forwarding configuration WHOLESALE. Destructive on two counts. Google's PUT overwrites the whole object, so omitted fields revert to their defaults. More importantly, SWITCHING FORWARDING ON SENDS A COPY OF EVERY INCOMING MESSAGE TO ANOTHER ADDRESS — it is the standard business-email-compromise persistence technique, and enabling it toward an address the account owner did not choose is an act of data exfiltration. Use it to turn forwarding OFF during incident response; think hard before using it to turn forwarding on. The target must already be a verified forwarding address. Body fields: enabled, emailAddress, disposition (leaveInInbox | archive | trash | markRead).

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe COMPLETE AutoForwarding object as JSON, e.g. {"enabled":false} to switch forwarding off, or {"enabled":true,"emailAddress":"archive@example.com","disposition":"leaveInInbox"}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Replace one user's Gmail IMAP settings WHOLESALE. Google's PUT overwrites the entire settings object, so any field left out of the body reverts to its default rather than staying as it was — send the full object, ideally the one gws_get_gmail_imap_settings just returned with your edit applied. Body fields: enabled, autoExpunge, expungeBehavior, maxFolderSize.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe COMPLETE ImapSettings object as JSON, e.g. {"enabled":true,"autoExpunge":true,"expungeBehavior":"archive","maxFolderSize":0}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Replace one user's Gmail display language. Marked destructive to keep this connector's one visible convention honest — every gws_update_* is a Google PUT that replaces the resource wholesale — rather than because the blast radius is large; this one is a single field and the user can change it back from the Gmail interface. Google may return a different tag from the one sent if it does not offer the exact variant requested, which is not an error.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe COMPLETE LanguageSettings object as JSON, e.g. {"displayLanguage":"en-GB"}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Replace one user's Gmail POP settings WHOLESALE — Google's PUT overwrites the whole object, so omitted fields revert to their defaults. Read the current settings first and send them back with your edit applied. Body fields: accessWindow (disabled | fromNowOn | allMail) and disposition (leaveInInbox | archive | trash | markRead). Setting disposition to trash means downloaded mail stops being retained in Gmail.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe COMPLETE PopSettings object as JSON, e.g. {"accessWindow":"allMail","disposition":"leaveInInbox"}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Replace one of a user's send-as aliases WHOLESALE. Google's PUT overwrites the entire object, so an omitted signature, display name or reply-to is CLEARED rather than left alone — which is how a carefully written signature disappears. Use gws_patch_gmail_send_as_alias unless you genuinely intend to reset every field. Send the full object, ideally the one gws_get_gmail_send_as_alias just returned with your edit applied.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe COMPLETE SendAs object as JSON, e.g. {"displayName":"Support","replyToAddress":"support@example.com","signature":"<p>Regards</p>","isDefault":false,"treatAsAlias":true}.
sendAsEmailstringyesThe send-as address to replace, e.g. "support@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Replace one user's Gmail vacation responder WHOLESALE, and switch it on or off. Destructive on two counts: Google's PUT overwrites the whole object so omitted fields revert to their defaults, AND an enabled responder AUTO-REPLIES TO EVERY INBOUND SENDER in the user's name — text you set here is sent to real people outside the organization. Read the current settings first and send them back with your edit applied. Body fields: enableAutoReply, responseSubject, responseBodyPlainText or responseBodyHtml, restrictToContacts, restrictToDomain, startTime, endTime (epoch ms).

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe COMPLETE VacationSettings object as JSON, e.g. {"enableAutoReply":true,"responseSubject":"Out of office","responseBodyPlainText":"Back Monday.","restrictToDomain":false}.
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

[Google Workspace] Send a verification email for a pending send-as alias. Destructive because IT EMAILS A REAL HUMAN at the alias address the moment it runs, and the message cannot be recalled — running it repeatedly sends repeatedly. Only meaningful for an alias whose verification status is pending; an already-verified alias needs nothing. Nothing in Google changes until the recipient clicks the link in that mail.

ParamTypeRequiredDefaultDescription
sendAsEmailstringyesThe pending send-as address to send verification to, e.g. "support@example.com".
userEmailstringyesThe mailbox owner's email address, e.g. "jsmith@example.com".

Reseller

ToolPlanAccessSummary
gws_activate_reseller_subscriptionProDestructiveReactivate a resold subscription that the reseller suspended.
gws_change_reseller_subscription_planProDestructiveMove a resold subscription onto a different payment plan — flexible to an annual commitment, or between annual monthly and annual yearly payment.
gws_change_reseller_subscription_renewalProDestructiveSet what happens to a resold annual-commitment subscription when its term ends.
gws_change_reseller_subscription_seatsProDestructiveChange how many seats a resold subscription carries.
gws_create_reseller_customerProWriteCreate a resold customer account under this reseller.
gws_create_reseller_subscriptionProDestructiveOrder a new subscription for a resold customer, or move them between EDITIONS of a product they already have.
gws_delete_reseller_subscriptionProDestructiveCancel a resold customer's subscription, or transfer it to a direct billing relationship with Google.
gws_get_reseller_customerFreeRead-onlyGet one resold customer's account record — primary domain, postal address, alternate contact email, and the customer id every other tool in this family takes.
gws_get_reseller_notify_detailsFreeRead-onlyShow which Google Cloud Pub/Sub topic this reseller's subscription-change notifications are published to, if any.
gws_get_reseller_subscriptionFreeRead-onlyGet one resold subscription — its SKU, its plan, its seat counts, its renewal settings, its status and its trial or commitment dates.
gws_list_reseller_subscriptionsFreeRead-onlyList the Google Workspace subscriptions this RESELLER holds for its resold customers — every customer when no filter is given, one customer with customerId, or customers whose primary domain starts…
gws_patch_reseller_customerProWriteChange some fields of a resold customer's record, merging rather than replacing — the right tool for a new postal address, a new contact name or a new alternate email.
gws_register_reseller_notifyProWriteStart publishing this reseller's subscription-change notifications to a Google Cloud Pub/Sub topic.
gws_start_reseller_subscription_paid_serviceProDestructiveEnd a resold subscription's 30-day free trial immediately and start the paid service.
gws_suspend_reseller_subscriptionProDestructiveSuspend a resold subscription.
gws_unregister_reseller_notifyProDestructiveStop publishing this reseller's subscription-change notifications.
gws_update_reseller_customerProDestructiveREPLACE a resold customer's record wholesale.

[Google Workspace] Reactivate a resold subscription that the reseller suspended. MARKED AS CHANGING THINGS BECAUSE IT SPENDS THE CUSTOMER'S MONEY: billing for the subscription's seats restarts the moment it succeeds. It only reverses a reseller suspension — a subscription Google suspended for its own reasons is not reactivated this way. Read gws_get_reseller_subscription for the current status and seat count, and confirm the customer asked to come back.

ParamTypeRequiredDefaultDescription
customerIdstringyesThe resold customer's unique id or primary domain.
subscriptionIdstringyesThe subscription id from gws_list_reseller_subscriptions.

[Google Workspace] Move a resold subscription onto a different payment plan — flexible to an annual commitment, or between annual monthly and annual yearly payment. MARKED AS CHANGING THINGS BECAUSE IT SPENDS THE CUSTOMER'S MONEY, and a commitment is not simply undone: moving onto an annual plan locks the customer into paying for those seats for a full year. Body is Google's ChangePlanRequest, e.g. {"planName":"ANNUAL_MONTHLY_PAY","seats":{"numberOfSeats":25},"purchaseOrderId":"PO-4471"}. planName is one of ANNUAL_MONTHLY_PAY, ANNUAL_YEARLY_PAY, FLEXIBLE, TRIAL or FREE. This moves the PAYMENT PLAN only — it does not move the customer between editions of a product; that is gws_create_reseller_subscription with action='switch'. Read gws_get_reseller_subscription first and confirm the customer asked for the new plan.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON ChangePlanRequest: planName, seats and an optional purchaseOrderId.
customerIdstringyesThe resold customer's unique id or primary domain.
subscriptionIdstringyesThe subscription id from gws_list_reseller_subscriptions.

[Google Workspace] Set what happens to a resold annual-commitment subscription when its term ends. MARKED AS CHANGING THINGS BECAUSE IT DECIDES A FUTURE BILL: one renewalType renews the whole committed seat count for another year, another renews only the seats actually in use, another moves the customer to pay-as-you-go, and the cancelling one ENDS THEIR SERVICE at term end with no further prompt to anybody. Body is Google's RenewalSettings, e.g. {"renewalType":"RENEW_CURRENT_USERS_MONTHLY_PAY"}. Google does not publish the renewalType values in its API reference — that page points at the 'renewal options' article in the Google Workspace Admin help centre, which is the list to read for a value this example does not show. Read gws_get_reseller_subscription first — it returns the renewalSettings in force — and confirm the customer asked for the change.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON RenewalSettings object carrying renewalType.
customerIdstringyesThe resold customer's unique id or primary domain.
subscriptionIdstringyesThe subscription id from gws_list_reseller_subscriptions.

[Google Workspace] Change how many seats a resold subscription carries. MARKED AS CHANGING THINGS BECAUSE IT SPENDS THE CUSTOMER'S MONEY IN BOTH DIRECTIONS: adding seats adds to their bill immediately, and REDUCING seats below the number of licensed users can leave real users without a licence, which for the main Workspace SKU means losing access to their mail and Drive. On an annual commitment plan Google does not allow the seat count to be reduced at all mid-term. Body is Google's Seats resource — {"numberOfSeats":30,"maximumNumberOfSeats":30} on an annual plan, or {"maximumNumberOfSeats":30} on a flexible one. Read gws_get_reseller_subscription for the current counts first.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON Seats object: numberOfSeats and/or maximumNumberOfSeats.
customerIdstringyesThe resold customer's unique id or primary domain.
subscriptionIdstringyesThe subscription id from gws_list_reseller_subscriptions.

[Google Workspace] Create a resold customer account under this reseller. NOT marked as changing things, and the distinction matters: creating the customer record orders nothing and bills nothing — the customer starts paying only when you give them a subscription with gws_create_reseller_subscription. Body is Google's Customer resource, e.g. {"customerDomain":"example.com","alternateEmail":"owner@other.example","postalAddress":{"contactName":"J Smith","organizationName":"Example Ltd","countryCode":"GB"}}. Supply customerAuthToken only when taking over a customer who already buys direct from Google or from another reseller — it is the hexadecimal transfer token they generate for you.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON Customer object: customerDomain, alternateEmail and postalAddress.
customerAuthTokenstringnonullOptional. The hexadecimal transfer token, for a customer moving to this reseller.

[Google Workspace] Order a new subscription for a resold customer, or move them between EDITIONS of a product they already have. MARKED AS CHANGING THINGS BECAUSE IT SPENDS THE CUSTOMER'S MONEY: this is the call that starts the bill, and on an annual commitment plan it commits them to paying for those seats for a full year. Body is Google's Subscription resource, e.g. {"customerId":"C0123","skuId":"1010020027","plan":{"planName":"FLEXIBLE"},"seats":{"numberOfSeats":25,"maximumNumberOfSeats":25}}. planName is one of ANNUAL_MONTHLY_PAY, ANNUAL_YEARLY_PAY, FLEXIBLE, TRIAL or FREE. This is ALSO the only tool that changes a customer's edition — Business Starter to Business Standard, say: pass action='switch' with sourceSkuId set to the SKU they hold now, and the new skuId in the body. gws_change_reseller_subscription_plan moves the payment plan and does NOT move the edition. Leave action unset and Google decides for itself whether to add a subscription or switch the existing one, which Google advises against when the customer already holds a different SKU in the same product. Supply customerAuthToken only when transferring an existing subscription to this reseller.

ParamTypeRequiredDefaultDescription
actionstringnonullOptional. 'buy' to order a new subscription, or 'switch' to move between editions.
bodyJsonstringyesCOMPLETE JSON Subscription object: skuId, plan and seats.
customerAuthTokenstringnonullOptional. The hexadecimal transfer token, for a subscription moving to this reseller.
customerIdstringyesThe resold customer's unique id or primary domain.
sourceSkuIdstringnonullOptional. The SKU the customer holds NOW. Required when action is switch.

[Google Workspace] Cancel a resold customer's subscription, or transfer it to a direct billing relationship with Google. deletionType is required and Google accepts exactly two values: 'cancel' ends the subscription, and 'transfer_to_direct' hands the customer to Google's own billing. Destructive and not undoable through this API: a cancellation ends the customer's paid service, and a transfer to direct takes the customer out of this reseller's management altogether. Read gws_get_reseller_subscription first and confirm the customer asked for it.

ParamTypeRequiredDefaultDescription
customerIdstringyesThe resold customer's unique id or primary domain.
deletionTypestringyescancel or transfer_to_direct.
subscriptionIdstringyesThe subscription id from gws_list_reseller_subscriptions.

[Google Workspace] Get one resold customer's account record — primary domain, postal address, alternate contact email, and the customer id every other tool in this family takes. customerId is either the customer's unique id or their primary domain; the id keeps working after a domain rename and the domain does not, so store the id. Needs a reseller connection: the impersonated administrator must belong to the reseller's own Workspace and hold the Partner Sales Console, and the 'Reseller and Cloud Channel' scope group must be granted. A customer super-admin gets unauthorized_client.

ParamTypeRequiredDefaultDescription
customerIdstringyesThe resold customer's unique id or primary domain.

[Google Workspace] Show which Google Cloud Pub/Sub topic this reseller's subscription-change notifications are published to, if any. Reads the RESELLER's own watch registration and takes no customer — there is nothing to pass. Check this before gws_unregister_reseller_notify, so you know what you are switching off.

[Google Workspace] Get one resold subscription — its SKU, its plan, its seat counts, its renewal settings, its status and its trial or commitment dates. Read this before any subscription write in this family: it is the only way to see what the customer is paying for now, and every write below changes that. Google warns that a subscriptionId CHANGES when the subscription is updated, so do not store it as a key.

ParamTypeRequiredDefaultDescription
customerIdstringyesThe resold customer's unique id or primary domain.
subscriptionIdstringyesThe subscription id from gws_list_reseller_subscriptions.

[Google Workspace] List the Google Workspace subscriptions this RESELLER holds for its resold customers — every customer when no filter is given, one customer with customerId, or customers whose primary domain starts with customerNamePrefix. This is where a subscriptionId comes from, and every subscription tool below needs one. Needs a reseller connection: the impersonated administrator must belong to the reseller's own Workspace and hold the Partner Sales Console, and the 'Reseller and Cloud Channel' scope group must be granted; a customer super-admin gets unauthorized_client. Paginates with pageToken/nextPageToken; maxResults caps at 100 and defaults to 20.

ParamTypeRequiredDefaultDescription
customerAuthTokenstringnonullOptional. The transfer token for a customer being transferred to this reseller.
customerIdstringnonullOptional. A resold customer's unique id or primary domain.
customerNamePrefixstringnonullOptional. Match customers whose primary domain starts with this.
maxResultsintegernonullOptional. Page size, 1-100.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] Change some fields of a resold customer's record, merging rather than replacing — the right tool for a new postal address, a new contact name or a new alternate email. Nothing is ordered, nothing is billed and no field you leave out is touched. Prefer this over gws_update_reseller_customer, which clears every field the body omits. Body carries only the fields to change, e.g. {"alternateEmail":"newowner@other.example"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object carrying ONLY the fields to change.
customerIdstringyesThe resold customer's unique id or primary domain.

[Google Workspace] Start publishing this reseller's subscription-change notifications to a Google Cloud Pub/Sub topic. NOT marked as changing things: it turns a feed on and touches no customer's account and no customer's bill. serviceAccountEmailAddress is the service account that will own the topic Google creates, in the name@project.iam.gserviceaccount.com form.

ParamTypeRequiredDefaultDescription
serviceAccountEmailAddressstringyesThe service account that will own the created Pub/Sub topic.

[Google Workspace] End a resold subscription's 30-day free trial immediately and start the paid service. MARKED AS CHANGING THINGS BECAUSE IT SPENDS THE CUSTOMER'S MONEY: the trial ends there and then, billing starts, and there is no way back to the trial for that subscription. Applies only to a subscription on the TRIAL plan. Read gws_get_reseller_subscription for the trial end date before running it, and confirm the customer asked to convert early.

ParamTypeRequiredDefaultDescription
customerIdstringyesThe resold customer's unique id or primary domain.
subscriptionIdstringyesThe subscription id from gws_list_reseller_subscriptions.

[Google Workspace] Suspend a resold subscription. Destructive on the customer's side rather than the reseller's: THE CUSTOMER'S USERS LOSE THE PAID SERVICE while their accounts still exist, which for the main Workspace SKU means losing access to their mail and Drive — an outage that looks nothing like a billing action from their desk. Google deletes a subscription left suspended long enough, so this is not an indefinite hold. gws_activate_reseller_subscription reverses it and restarts the bill.

ParamTypeRequiredDefaultDescription
customerIdstringyesThe resold customer's unique id or primary domain.
subscriptionIdstringyesThe subscription id from gws_list_reseller_subscriptions.

[Google Workspace] Stop publishing this reseller's subscription-change notifications. Destructive as a SILENT switch-off: no customer account and no bill changes, but every downstream system watching that topic stops hearing about plan changes, cancellations and renewals, and it stops without an error anywhere for anyone to notice. Read gws_get_reseller_notify_details first and confirm nothing depends on the feed.

ParamTypeRequiredDefaultDescription
serviceAccountEmailAddressstringyesThe service account that owns the Pub/Sub topic to stop.

[Google Workspace] REPLACE a resold customer's record wholesale. Destructive because it is a PUT: every field the body omits is cleared, including the postal address Google uses for tax and the alternate email that is the customer's own route back into the account. Read the current record with gws_get_reseller_customer, change what you need and send the whole thing back — or use gws_patch_reseller_customer, which merges. Nothing here changes what the customer is billed; the risk is the record, not the money.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesCOMPLETE JSON Customer object — omitted fields are CLEARED.
customerIdstringyesThe resold customer's unique id or primary domain.

Cloud Channel

ToolPlanAccessSummary
gws_activate_channel_entitlementProDestructiveReactivate an entitlement the RESELLER suspended.
gws_cancel_channel_entitlementProDestructiveCancel an entitlement.
gws_change_channel_entitlement_offerProDestructiveMove an entitlement to a different offer — a different edition, plan or price.
gws_change_channel_entitlement_parametersProDestructiveChange an entitlement's parameters — in practice, the seat count.
gws_change_channel_entitlement_renewalProDestructiveChange what happens when a commitment entitlement reaches the end of its term.
gws_check_channel_cloud_identity_accountsFreeRead-onlyCheck whether a domain already has a Cloud Identity account, before you try to create a Cloud Channel customer for it.
gws_create_channel_customerProWriteCreate a Cloud Channel customer under this reseller.
gws_create_channel_customer_repricing_configProDestructiveSet a repricing adjustment for one customer.
gws_create_channel_entitlementProDestructiveSell a customer a subscription.
gws_create_channel_partner_customerProWriteCreate a customer under one of this account's sub-resellers.
gws_create_channel_partner_linkProWriteInvite a sub-reseller to sell under this reseller account.
gws_create_channel_partner_repricing_configProDestructiveSet a repricing adjustment for one sub-reseller.
gws_delete_channel_customerProDestructiveDelete a Cloud Channel customer from this reseller's account.
gws_delete_channel_customer_repricing_configProDestructiveDelete a customer repricing config.
gws_delete_channel_partner_customerProDestructiveDelete a sub-reseller's customer from this Cloud Channel account.
gws_delete_channel_partner_repricing_configProDestructiveDelete a sub-reseller repricing config.
gws_fetch_channel_report_resultsFreeRead-onlyRead the rows of a finished report job.
gws_get_channel_customerFreeRead-onlyGet one Cloud Channel customer's record — organisation name, domain, Cloud Identity id, primary contact, language and the correlation id.
gws_get_channel_customer_repricing_configFreeRead-onlyGet one customer repricing config — its SKU group, its adjustment, the base it applies to and the invoice month it takes effect in.
gws_get_channel_entitlementFreeRead-onlyGet one entitlement — its offer, its parameters including the seat count, its commitment and renewal settings, its provisioning state and its suspension reasons if any.
gws_get_channel_operationFreeRead-onlyPoll one Cloud Channel long-running operation.
gws_get_channel_partner_customerFreeRead-onlyGet one sub-reseller's customer record — the same fields as gws_get_channel_customer, addressed under the channel partner link that owns it.
gws_get_channel_partner_linkFreeRead-onlyGet one channel partner link — the sub-reseller's Cloud Identity id, its public identity, its link state and the invite link if it has not accepted yet.
gws_get_channel_partner_repricing_configFreeRead-onlyGet one sub-reseller repricing config — its SKU group, its adjustment, the base it applies to and the invoice month it takes effect in.
gws_import_channel_customerProWriteClaim an existing Cloud Identity or Workspace customer into this reseller's Cloud Channel account.
gws_import_channel_partner_customerProWriteClaim an existing Cloud Identity or Workspace customer into one of this account's sub-resellers.
gws_list_channel_billable_skusFreeRead-onlyList the billable SKUs inside one SKU group — exactly which SKUs a repricing config written against that group will move the price of.
gws_list_channel_customer_repricing_configsFreeRead-onlyList the repricing configs in force for one customer — the per-SKU-group adjustments this reseller applies on top of Google's price, month by month.
gws_list_channel_customersFreeRead-onlyList the customers this reseller bills through Cloud Channel — the book of business.
gws_list_channel_entitlement_changesFreeRead-onlyList the history of changes to one entitlement — who changed what, when, and why.
gws_list_channel_entitlementsFreeRead-onlyList one customer's entitlements — everything this reseller currently bills them for, with each one's offer, provisioned seats, state and commitment.
gws_list_channel_offersFreeRead-onlyList the offers this reseller can sell — the price list, with each offer's plan, its price by SKU and its constraints.
gws_list_channel_operationsFreeRead-onlyList the Cloud Channel long-running operations visible to this connection — the way to find an operation whose name was lost, or to see what is still in flight.
gws_list_channel_partner_customersFreeRead-onlyList the customers belonging to ONE sub-reseller, rather than to this reseller directly.
gws_list_channel_partner_linksFreeRead-onlyList the channel partner links under this reseller — the sub-resellers, or 'distributors below you', that sell on this account's behalf.
gws_list_channel_partner_repricing_configsFreeRead-onlyList the repricing configs in force for one sub-reseller — the adjustments applied to what THEY are charged, as distinct from what their customers are charged.
gws_list_channel_product_skusFreeRead-onlyList the SKUs inside one product — the specific editions a customer can be sold.
gws_list_channel_productsFreeRead-onlyList the products this reseller can sell — the top of the catalog, above SKUs and offers.
gws_list_channel_purchasable_offersFreeRead-onlyList the offers this specific customer could be sold, or moved to.
gws_list_channel_purchasable_skusFreeRead-onlyList the SKUs this specific customer could be sold, or moved to — one level above gws_list_channel_purchasable_offers.
gws_list_channel_reportsFreeRead-onlyList the Cloud Channel reports this reseller can run, with each report's columns.
gws_list_channel_sku_groupsFreeRead-onlyList the SKU groups available to this reseller — the named buckets of SKUs that repricing configs are written against.
gws_list_channel_subscribersFreeRead-onlyList the service accounts registered to receive this reseller's Cloud Channel Pub/Sub notifications — entitlement changes, customer events and the rest.
gws_list_channel_transferable_offersFreeRead-onlyList the offers this reseller could sell to a customer who is currently buying from Google direct or from another reseller — the price list for a transfer that has not happened yet.
gws_list_channel_transferable_skusFreeRead-onlyList the SKUs a customer currently holds elsewhere that could transfer to this reseller, with the transfer eligibility of each.
gws_lookup_channel_entitlement_offerFreeRead-onlyGet the offer an entitlement is currently on, with its price and plan — the answer to 'what is this customer actually paying, and on what terms'.
gws_patch_channel_customerProWriteChange some fields of a Cloud Channel customer's record, merging rather than replacing — the right tool for a new organisation name, postal address, primary contact or language.
gws_patch_channel_customer_repricing_configProWriteReplace an existing customer repricing config.
gws_patch_channel_partner_customerProWriteChange some fields of a sub-reseller's customer record, merging rather than replacing.
gws_patch_channel_partner_linkProWriteChange a channel partner link's state — chiefly to suspend a sub-reseller or to reinstate one.
gws_patch_channel_partner_repricing_configProWriteReplace an existing sub-reseller repricing config.
gws_provision_channel_cloud_identityProDestructiveCreate the Cloud Identity account for a Cloud Channel customer who does not have one.
gws_query_channel_eligible_billing_accountsFreeRead-onlyList the billing accounts a customer's purchase of given SKUs could be charged to.
gws_register_channel_subscriberProWriteStart publishing this reseller's Cloud Channel notifications to a service account's Pub/Sub topic.
gws_run_channel_reportProWriteStart one of this reseller's Cloud Channel reports.
gws_start_channel_entitlement_paid_serviceProDestructiveEnd a trial early and start charging for it.
gws_suspend_channel_entitlementProDestructiveSuspend an entitlement.
gws_transfer_channel_entitlementsProDestructiveTransfer a customer's existing entitlements to THIS reseller — from Google direct, or from another reseller.
gws_transfer_channel_entitlements_to_googleProDestructiveHand a customer's entitlements back to Google direct billing.
gws_unregister_channel_subscriberProDestructiveStop publishing this reseller's Cloud Channel notifications to a service account.

[Google Workspace] Reactivate an entitlement the RESELLER suspended. Destructive because billing restarts the moment it completes. It only works on a reseller-initiated suspension; an entitlement Google suspended — for a pending payment, for example — has to be resolved with Google first, and this call will not lift it. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's ActivateEntitlementRequest and is optional: {"requestId":"..."} for a safely retryable call.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringnonullOptional. JSON ActivateEntitlementRequest: requestId.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Cancel an entitlement. Destructive and the hardest to undo in this family: the customer's service ends, and restoring it means selling a new entitlement with gws_create_channel_entitlement rather than reversing this one. Cancelling a commitment plan mid-term does not necessarily end the reseller's obligation for that term. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's CancelEntitlementRequest and is optional: {"requestId":"..."}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringnonullOptional. JSON CancelEntitlementRequest: requestId.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Move an entitlement to a different offer — a different edition, plan or price. Destructive because it changes what the customer is billed, and a move onto a commitment plan commits them for that plan's term. Read the current offer with gws_lookup_channel_entitlement_offer and the available ones with gws_list_channel_purchasable_offers first. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's ChangeOfferRequest: {"offer":"accounts/A/offers/O","parameters":[...],"purchaseOrderId":"..."}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ChangeOfferRequest: offer, and optionally parameters and purchaseOrderId.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Change an entitlement's parameters — in practice, the seat count. Destructive in BOTH directions: raising num_units bills the customer for the extra seats immediately, and lowering it can strip a licence from a user who is currently working. It REPLACES the parameters you send rather than merging them, so read the current set with gws_get_channel_entitlement first. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's ChangeParametersRequest: {"parameters":[{"name":"num_units","value":{"int64Value":"30"}}],"purchaseOrderId":"..."}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ChangeParametersRequest: the parameters to set, and optionally purchaseOrderId.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Change what happens when a commitment entitlement reaches the end of its term. Destructive because it decides a bill the customer has not seen yet: switching renewal off ends their service at term end, and nothing warns them or you when that day arrives. Applies only to commitment plans. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's ChangeRenewalSettingsRequest: {"renewalSettings":{"enableRenewal":true,"paymentPlan":"COMMITMENT","paymentCycle":"MONTHLY"}} — read the settings currently in force with gws_get_channel_entitlement rather than guessing them.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ChangeRenewalSettingsRequest: the renewalSettings to apply.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Check whether a domain already has a Cloud Identity account, before you try to create a Cloud Channel customer for it. Reads nothing and creates nothing despite being a POST — Google models it as a query with a body. Use it to tell the two cases apart: a domain with no account can be created outright with gws_create_channel_customer, while one that already has an account must be claimed with gws_import_channel_customer instead. Needs a Cloud Channel reseller connection: the impersonated administrator must hold the Partner Sales Console, and the 'Reseller and Cloud Channel' scope group must be granted.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
domainstringyesThe domain to check, e.g. example.com.
primaryAdminEmailstringnonullOptional. The primary admin email to check alongside the domain.

[Google Workspace] Create a Cloud Channel customer under this reseller. NOT marked as changing things, and the distinction matters: the customer record orders nothing and bills nothing — the customer starts paying only when you give them an entitlement with gws_create_channel_entitlement. Check the domain with gws_check_channel_cloud_identity_accounts first: a domain that already has a Cloud Identity account must be claimed with gws_import_channel_customer instead, and creating over it fails. Body is Google's Customer resource: {"orgDisplayName":"Example Ltd","domain":"example.com","orgPostalAddress":{"regionCode":"GB"},"primaryContactInfo":{"email":"owner@example.com"}}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON Customer object: orgDisplayName, domain, orgPostalAddress and primaryContactInfo.

[Google Workspace] Set a repricing adjustment for one customer. Destructive because it decides what the customer is invoiced: the adjustment applies to every billable SKU in the group, for the whole effective invoice month, and it can move the price in either direction. Read gws_list_channel_billable_skus for the group first, so the blast radius is known. Body is Google's CustomerRepricingConfig: {"repricingConfig":{"effectiveInvoiceMonth":{"year":2026,"month":10},"adjustment":{"percentageAdjustment":{"percentage":{"value":"5"}}},"rebillingBasis":"COST_AT_LIST","channelPartnerGranularity":}}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON CustomerRepricingConfig: repricingConfig with its effective month, adjustment, rebilling basis and granularity.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.

[Google Workspace] Sell a customer a subscription. Destructive because it starts a bill: the reseller is charged for it from the moment it provisions, and an annual commitment plan commits for the full term whatever happens next. Price it first with gws_list_channel_purchasable_offers. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's Entitlement resource: {"offer":"accounts/A/offers/O","parameters":[{"name":"num_units","value":{"int64Value":"25"}}],"commitmentSettings":} — num_units is the seat count and it is the number the customer pays for.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON Entitlement object: offer, parameters (including num_units), and commitment/renewal settings.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.

[Google Workspace] Create a customer under one of this account's sub-resellers. NOT marked as changing things, for the same reason as gws_create_channel_customer: the record orders nothing and bills nothing until an entitlement is created against it. Body is Google's Customer resource: {"orgDisplayName":"Example Ltd","domain":"example.com","orgPostalAddress":{"regionCode":"GB"},"primaryContactInfo":{"email":"owner@example.com"}}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON Customer object: orgDisplayName, domain, orgPostalAddress and primaryContactInfo.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.

[Google Workspace] Set a repricing adjustment for one sub-reseller. Destructive because it decides what that partner is invoiced — and therefore their margin — across every billable SKU in the group for the whole effective invoice month. Read gws_list_channel_billable_skus for the group first. Body is Google's ChannelPartnerRepricingConfig: {"repricingConfig":{"effectiveInvoiceMonth":{"year":2026,"month":10},"adjustment":{"percentageAdjustment":{"percentage":{"value":"5"}}},"rebillingBasis":"COST_AT_LIST"}}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ChannelPartnerRepricingConfig: repricingConfig with its effective month, adjustment and rebilling basis.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.

[Google Workspace] Delete a Cloud Channel customer from this reseller's account. Destructive: it removes the billing relationship and the reseller's whole record of that customer. Google refuses while the customer still holds entitlements, so the usual path is to cancel or transfer those first — which means by the time this call succeeds, the customer has already stopped being billed. Their Cloud Identity account and their users are NOT deleted by this; the relationship is.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.

[Google Workspace] Delete a customer repricing config. Destructive because removing the adjustment changes what the customer is invoiced — silently, and in whichever direction the adjustment was going. The config is gone, not disabled, so restoring it means recreating it with the same values; read them with gws_get_channel_customer_repricing_config first if you may need them back.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
repricingConfigIdstringyesThe repricing config id, from gws_list_channel_customer_repricing_configs.

[Google Workspace] Delete a sub-reseller's customer from this Cloud Channel account. Destructive: it removes the billing relationship and the whole record of that customer under the partner link. Google refuses while the customer still holds entitlements, so those must be cancelled or transferred first. Their Cloud Identity account and their users are NOT deleted by this; the relationship is.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.
customerIdstringyesThe customer id, from gws_list_channel_partner_customers.

[Google Workspace] Delete a sub-reseller repricing config. Destructive because removing the adjustment changes what that partner is invoiced — silently, and in whichever direction the adjustment was going. The config is gone, not disabled; read it with gws_get_channel_partner_repricing_config first if you may need to recreate it.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.
repricingConfigIdstringyesThe repricing config id, from gws_list_channel_partner_repricing_configs.

[Google Workspace] Read the rows of a finished report job. A read despite being a POST; it fetches results and starts nothing. The report job id comes from the Operation that gws_run_channel_report returned — wait for that operation to complete with gws_get_channel_operation first, or the rows are not there yet. DEPRECATED BY GOOGLE in favour of the Cloud Channel BigQuery export. Body is Google's FetchReportResultsRequest and is optional: {"pageSize":100,"pageToken":"...","partitionKeys":["..."]}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringnonullOptional. JSON FetchReportResultsRequest: pageSize, pageToken and partitionKeys.
reportJobIdstringyesThe report job id, from the Operation gws_run_channel_report returned.

[Google Workspace] Get one Cloud Channel customer's record — organisation name, domain, Cloud Identity id, primary contact, language and the correlation id. Get the customerId from gws_list_channel_customers.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.

[Google Workspace] Get one customer repricing config — its SKU group, its adjustment, the base it applies to and the invoice month it takes effect in. Read it before any change, because the adjustment is replaced rather than accumulated.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
repricingConfigIdstringyesThe repricing config id, from gws_list_channel_customer_repricing_configs.

[Google Workspace] Get one entitlement — its offer, its parameters including the seat count, its commitment and renewal settings, its provisioning state and its suspension reasons if any. Read this before any entitlement write, because most of them replace the values you can see here rather than adding to them.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Poll one Cloud Channel long-running operation. Every entitlement write, both transfers, the Cloud Identity provisioning and gws_run_channel_report answer with an Operation rather than the finished work — this is how you find out whether it succeeded. done=false means keep polling; done=true carries either the result or the error. Takes NO account id: Google addresses an operation as the bare resource operations/, so this tool works even on a connection with no Cloud Channel account stored.

ParamTypeRequiredDefaultDescription
operationNamestringyesThe operation name from the long-running response, e.g. operations/abc-123.

[Google Workspace] Get one sub-reseller's customer record — the same fields as gws_get_channel_customer, addressed under the channel partner link that owns it. Get both ids from gws_list_channel_partner_links and gws_list_channel_partner_customers.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.
customerIdstringyesThe customer id, from gws_list_channel_partner_customers.

[Google Workspace] Get one sub-reseller repricing config — its SKU group, its adjustment, the base it applies to and the invoice month it takes effect in. Read it before any change, because the adjustment is replaced rather than accumulated.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.
repricingConfigIdstringyesThe repricing config id, from gws_list_channel_partner_repricing_configs.

[Google Workspace] Claim an existing Cloud Identity or Workspace customer into this reseller's Cloud Channel account. NOT marked as changing things: it creates the reseller's own record of a customer who already exists, and no entitlement moves and no bill changes — transferring what they hold is the separate, destructive gws_transfer_channel_entitlements. Body is Google's ImportCustomerRequest: identify the customer with domain or cloudIdentityId, set overwriteIfExists as needed, and supply authToken when the customer belongs to another reseller, e.g. {"domain":"example.com","overwriteIfExists":false}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ImportCustomerRequest: domain or cloudIdentityId, overwriteIfExists, and authToken when transferring.

[Google Workspace] Claim an existing Cloud Identity or Workspace customer into one of this account's sub-resellers. NOT marked as changing things: it creates a record of a customer who already exists, moves no entitlement and changes no bill. Body is Google's ImportCustomerRequest: {"domain":"example.com","overwriteIfExists":false}, with authToken when the customer belongs to another reseller.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ImportCustomerRequest: domain or cloudIdentityId, overwriteIfExists, and authToken when transferring.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.

[Google Workspace] List the billable SKUs inside one SKU group — exactly which SKUs a repricing config written against that group will move the price of. Read this before you create or amend a repricing config, so the blast radius of the adjustment is known rather than assumed. Get the group id from gws_list_channel_sku_groups. Paginates with pageToken/nextPageToken; pageSize defaults to and is clamped to 1000, which is StackJack's own ceiling rather than Google's.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
pageSizeintegernonullOptional. Page size, 1-1000. Defaults to 1000 when omitted.
pageTokenstringnonullOptional. nextPageToken from the previous page.
skuGroupIdstringyesThe SKU group id, from gws_list_channel_sku_groups.

[Google Workspace] List the repricing configs in force for one customer — the per-SKU-group adjustments this reseller applies on top of Google's price, month by month. This is the read that answers why a customer's invoice differs from list price. Paginates with pageToken/nextPageToken; pageSize is clamped to 100.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
filterstringnonullOptional. Google filter expression, e.g. over effective_invoice_month.
pageSizeintegernonullOptional. Page size, 1-100.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the customers this reseller bills through Cloud Channel — the book of business. This is where a Cloud Channel customerId comes from, and every customer and entitlement tool in this family needs one. Note that a Cloud Channel customer is NOT the same record as a Workspace customer: the id here addresses the billing relationship, not the directory. Paginates with pageToken/nextPageToken; pageSize is clamped to 50, which is Google's own maximum.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
filterstringnonullOptional. Google filter expression over the customer fields.
pageSizeintegernonullOptional. Page size, 1-50.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the history of changes to one entitlement — who changed what, when, and why. Pass a hyphen ('-') as the entitlementId to get the history for ALL of that customer's entitlements at once. This is the audit trail for a disputed bill, and the first thing to read when a customer's charge moved and nobody knows which call did it. Paginates with pageToken/nextPageToken; pageSize is clamped to 50.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, or '-' for every entitlement of this customer.
filterstringnonullOptional. Google filter expression over the change fields.
pageSizeintegernonullOptional. Page size, 1-50.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List one customer's entitlements — everything this reseller currently bills them for, with each one's offer, provisioned seats, state and commitment. This is where an entitlementId comes from, and every entitlement tool below needs one. Paginates with pageToken/nextPageToken; pageSize is clamped to 100, which is Google's own maximum.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
pageSizeintegernonullOptional. Page size, 1-100.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the offers this reseller can sell — the price list, with each offer's plan, its price by SKU and its constraints. An offer name from here is what gws_create_channel_entitlement and gws_change_channel_entitlement_offer take. filter narrows by SKU or product using Google's filter syntax; showFutureOffers includes offers that have not started yet. Paginates with pageToken/nextPageToken; pageSize is clamped to 1000.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
filterstringnonullOptional. Google filter expression, e.g. sku.name=products/p1/skus/s1.
languageCodestringnonullOptional. BCP-47 language for the returned display text, e.g. en-US.
pageSizeintegernonullOptional. Page size, 1-1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.
showFutureOffersbooleannonullOptional. true to include offers that have not started yet.

[Google Workspace] List the Cloud Channel long-running operations visible to this connection — the way to find an operation whose name was lost, or to see what is still in flight. filter takes Google's standard operation filter syntax. Takes NO account id, for the same reason as gws_get_channel_operation. Paginates with pageToken/nextPageToken; pageSize is clamped to 100.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Standard operation filter expression.
pageSizeintegernonullOptional. Page size, 1-100.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the customers belonging to ONE sub-reseller, rather than to this reseller directly. Get the channelPartnerLinkId from gws_list_channel_partner_links. Use this family's partner-scoped tools for a sub-reseller's customers and the plain ones for your own; addressing a sub-reseller's customer through gws_get_channel_customer returns not-found rather than the wrong record. Paginates with pageToken/nextPageToken; pageSize is clamped to 50.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.
filterstringnonullOptional. Google filter expression over the customer fields.
pageSizeintegernonullOptional. Page size, 1-50.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the repricing configs in force for one sub-reseller — the adjustments applied to what THEY are charged, as distinct from what their customers are charged. Get the channelPartnerLinkId from gws_list_channel_partner_links. Paginates with pageToken/nextPageToken; pageSize is clamped to 100.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.
filterstringnonullOptional. Google filter expression, e.g. over effective_invoice_month.
pageSizeintegernonullOptional. Page size, 1-100.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the SKUs inside one product — the specific editions a customer can be sold. Get the product id from gws_list_channel_products. A SKU name from here narrows gws_list_channel_offers to the offers that actually sell it. Paginates with pageToken/nextPageToken; pageSize is clamped to 1000.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
languageCodestringnonullOptional. BCP-47 language for the returned display text, e.g. en-US.
pageSizeintegernonullOptional. Page size, 1-1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.
productIdstringyesThe product id, from gws_list_channel_products.

[Google Workspace] List the products this reseller can sell — the top of the catalog, above SKUs and offers. A product id from here is what gws_list_channel_product_skus takes. Paginates with pageToken/nextPageToken; pageSize is clamped to 1000.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
languageCodestringnonullOptional. BCP-47 language for the returned display text, e.g. en-US.
pageSizeintegernonullOptional. Page size, 1-1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the offers this specific customer could be sold, or moved to. Two modes, and you set one or the other: for a NEW purchase, set createEntitlementPurchaseSku to the SKU you want to sell; for a CHANGE, set changeOfferPurchaseEntitlement to the entitlement being changed and optionally changeOfferPurchaseNewSku. Either mode also takes a billing account, which is what narrows the list on a multi-currency reseller account. This is the read to run before gws_create_channel_entitlement or gws_change_channel_entitlement_offer, because it answers what is actually purchasable rather than what exists in the catalog. Paginates with pageToken/nextPageToken; pageSize is clamped to 1000.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
changeOfferPurchaseBillingAccountstringnonullOptional. CHANGE mode: narrow to offers billed to this billing account.
changeOfferPurchaseEntitlementstringnonullOptional. CHANGE mode: the entitlement being changed, from gws_list_channel_entitlements.
changeOfferPurchaseNewSkustringnonullOptional. CHANGE mode: the SKU to move to.
createEntitlementPurchaseBillingAccountstringnonullOptional. NEW-PURCHASE mode: narrow to offers billed to this billing account.
createEntitlementPurchaseSkustringnonullOptional. NEW-PURCHASE mode: the SKU to sell.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
languageCodestringnonullOptional. BCP-47 language for the returned display text, e.g. en-US.
pageSizeintegernonullOptional. Page size, 1-1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the SKUs this specific customer could be sold, or moved to — one level above gws_list_channel_purchasable_offers. Two modes, and you set one or the other: for a NEW purchase, set createEntitlementPurchaseProduct to the product; for a CHANGE, set changeOfferPurchaseEntitlement to the entitlement and changeOfferPurchaseChangeType to the kind of change. Call gws_list_channel_purchasable_offers next to price whichever SKU you pick. Paginates with pageToken/nextPageToken; pageSize is clamped to 1000.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
changeOfferPurchaseChangeTypestringnonullOptional. CHANGE mode: CHANGE_TYPE_UNSPECIFIED, UPGRADE or DOWNGRADE.
changeOfferPurchaseEntitlementstringnonullOptional. CHANGE mode: the entitlement being changed, from gws_list_channel_entitlements.
createEntitlementPurchaseProductstringnonullOptional. NEW-PURCHASE mode: the product, from gws_list_channel_products.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
languageCodestringnonullOptional. BCP-47 language for the returned display text, e.g. en-US.
pageSizeintegernonullOptional. Page size, 1-1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the Cloud Channel reports this reseller can run, with each report's columns. DEPRECATED BY GOOGLE: the Cloud Channel Reports API is being retired in favour of the Cloud Channel BigQuery export, so treat anything built on it as short-lived. A report id from here is what gws_run_channel_report takes. Paginates with pageToken/nextPageToken; pageSize is clamped to 100.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
languageCodestringnonullOptional. BCP-47 language for the returned display text, e.g. en-US.
pageSizeintegernonullOptional. Page size, 1-100.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the SKU groups available to this reseller — the named buckets of SKUs that repricing configs are written against. A SKU group id from here is what gws_create_channel_customer_repricing_config and its partner equivalent take, and what gws_list_channel_billable_skus expands. Paginates with pageToken/nextPageToken; pageSize is clamped to 1000.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
pageSizeintegernonullOptional. Page size, 1-1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the service accounts registered to receive this reseller's Cloud Channel Pub/Sub notifications — entitlement changes, customer events and the rest. Read this before gws_unregister_channel_subscriber so you know what you are switching off. Paginates with pageToken/nextPageToken; pageSize is clamped to 1000, which is Google's own maximum.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
pageSizeintegernonullOptional. Page size, 1-1000.
pageTokenstringnonullOptional. nextPageToken from the previous page.

[Google Workspace] List the offers this reseller could sell to a customer who is currently buying from Google direct or from another reseller — the price list for a transfer that has not happened yet. A read despite being a POST; nothing is ordered and no transfer is started. Body is Google's ListTransferableOffersRequest: identify the customer with either cloudIdentityId or customerName, name the sku, and optionally set languageCode and billingAccount, e.g. {"cloudIdentityId":"C01234abc","sku":"products/prod-1/skus/sku-1"}. Paginate with pageToken inside the body. pageSize also travels in the body, so StackJack does not clamp it — Google's own maximum is 1000 and a larger value is coerced upstream.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ListTransferableOffersRequest: cloudIdentityId or customerName, sku, and optionally languageCode, billingAccount, pageSize, pageToken.

[Google Workspace] List the SKUs a customer currently holds elsewhere that could transfer to this reseller, with the transfer eligibility of each. A read despite being a POST. This is the tool that answers 'can I take this customer on, and what would come with them' before gws_transfer_channel_entitlements does anything. Body is Google's ListTransferableSkusRequest: identify the customer with cloudIdentityId or customerName, and optionally set authToken and languageCode, e.g. {"cloudIdentityId":"C01234abc"}. Paginate with pageToken inside the body. pageSize also travels in the body, so StackJack does not clamp it — Google's own maximum is 1000 and a larger value is coerced upstream.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ListTransferableSkusRequest: cloudIdentityId or customerName, and optionally authToken, languageCode, pageSize, pageToken.

[Google Workspace] Get the offer an entitlement is currently on, with its price and plan — the answer to 'what is this customer actually paying, and on what terms'. Read it before gws_change_channel_entitlement_offer so the move is priced rather than guessed.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Change some fields of a Cloud Channel customer's record, merging rather than replacing — the right tool for a new organisation name, postal address, primary contact or language. Nothing is ordered, nothing is billed, and no field outside the update mask is touched. Body carries only the fields to change, e.g. {"primaryContactInfo":{"email":"newowner@example.com"}}; set updateMask to name those fields, e.g. primary_contact_info.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesJSON Customer object carrying ONLY the fields to change.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
updateMaskstringnonullOptional. Comma-separated field mask naming the fields to change, e.g. org_display_name.

[Google Workspace] Replace an existing customer repricing config. THIS PATCH OVERWRITES THE WHOLE CONFIG — Google's own words are "This method overwrites the existing CustomerRepricingConfig", the route takes no updateMask, and the body IS the resource. Send the COMPLETE config, read back with gws_get_channel_customer_repricing_config, with only the values you mean to change; a partial body silently DROPS conditionalOverrides, which is the one optional field. effectiveInvoiceMonth, rebillingBasis, adjustment and entitlementGranularity are all required and cannot be omitted, and effectiveInvoiceMonth itself cannot be changed. It decides what the customer is invoiced for that month. Google allows edits only while the effective invoice month is still in the future; use gws_create_channel_customer_repricing_config for the current month. Body e.g. {"repricingConfig":{"adjustment":{"percentageAdjustment":{"percentage":{"value":"7"}}}}}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesA COMPLETE JSON CustomerRepricingConfig, not a partial one — this route overwrites the stored config, so any field left out is dropped rather than preserved. Read the current config with gws_get_channel_customer_repricing_config and send it back with your changes applied.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
repricingConfigIdstringyesThe repricing config id, from gws_list_channel_customer_repricing_configs.

[Google Workspace] Change some fields of a sub-reseller's customer record, merging rather than replacing. Nothing is ordered, nothing is billed, and no field outside the update mask is touched. Body carries only the fields to change, e.g. {"orgDisplayName":"Example Holdings Ltd"}; set updateMask to name those fields, e.g. org_display_name.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesJSON Customer object carrying ONLY the fields to change.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.
customerIdstringyesThe customer id, from gws_list_channel_partner_customers.
updateMaskstringnonullOptional. Comma-separated field mask naming the fields to change, e.g. org_display_name.

[Google Workspace] Replace an existing sub-reseller repricing config. THIS PATCH OVERWRITES THE WHOLE CONFIG — Google's own words on this route are "This method overwrites the existing CustomerRepricingConfig", it takes no updateMask, and the body IS the resource. Send the COMPLETE config, read back with gws_get_channel_partner_repricing_config, with only the values you mean to change; a partial body silently DROPS conditionalOverrides, which is the one optional field. effectiveInvoiceMonth, rebillingBasis and adjustment are all required and cannot be omitted, and effectiveInvoiceMonth itself cannot be changed. It decides what that partner is invoiced for that month. Google allows edits only while the effective invoice month is still in the future; use gws_create_channel_partner_repricing_config for the current month.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesA COMPLETE JSON ChannelPartnerRepricingConfig, not a partial one — this route overwrites the stored config, so any field left out is dropped rather than preserved. Read the current config with gws_get_channel_partner_repricing_config and send it back with your changes applied.
channelPartnerLinkIdstringyesThe channel partner link id, from gws_list_channel_partner_links.
repricingConfigIdstringyesThe repricing config id, from gws_list_channel_partner_repricing_configs.

[Google Workspace] Create the Cloud Identity account for a Cloud Channel customer who does not have one. Destructive because it takes the customer's DOMAIN: Google creates a real identity tenant and a real super-admin against that domain, the domain can then belong to no other Cloud Identity account, and there is no API here that undoes it. Check gws_check_channel_cloud_identity_accounts first — a domain that already has an account must be imported, not provisioned. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's ProvisionCloudIdentityRequest: {"cloudIdentityInfo":{"alternateEmail":"owner@other.example","languageCode":"en-US"},"user":{"email":"admin@example.com","givenName":"J","familyName":"Smith"}}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON ProvisionCloudIdentityRequest: cloudIdentityInfo and the admin user to create.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.

[Google Workspace] List the billing accounts a customer's purchase of given SKUs could be charged to. Read this before gws_create_channel_entitlement when the reseller has more than one billing account, because the entitlement's association is fixed at creation. Google requires AT LEAST ONE SKU: skus is a repeated parameter, and a call with none returns an error rather than every billing account.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
skusarraynonullThe SKU names to check, e.g. products/prod-1/skus/sku-1. Google requires at least one.

[Google Workspace] Start publishing this reseller's Cloud Channel notifications to a service account's Pub/Sub topic. NOT marked as changing things: it turns a feed on, touches no customer's account and moves no customer's bill. serviceAccount is the service account that will receive the events, in the name@project.iam.gserviceaccount.com form. The response names the topic Google publishes to.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
serviceAccountstringyesThe service account that will receive the notifications.

[Google Workspace] Start one of this reseller's Cloud Channel reports. NOT marked as changing things: it reads the reseller's own billing history and changes no customer, no entitlement and no bill — it is a write only because it starts a job. LONG-RUNNING: the response is an Operation, not the report; poll it with gws_get_channel_operation until it completes, then read the rows with gws_fetch_channel_report_results. DEPRECATED BY GOOGLE in favour of the Cloud Channel BigQuery export. Body is Google's RunReportJobRequest and is optional: {"dateRange":,"filter":"...","languageCode":"en-US"}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringnonullOptional. JSON RunReportJobRequest: dateRange, filter and languageCode.
reportIdstringyesThe report id, from gws_list_channel_reports.

[Google Workspace] End a trial early and start charging for it. Destructive because it spends the customer's money now rather than at the date they were told: the remaining free days are given up and cannot be restored, and the paid term begins today. Applies only to an entitlement on a trial plan. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's StartPaidServiceRequest and is optional: {"requestId":"..."}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringnonullOptional. JSON StartPaidServiceRequest: requestId.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Suspend an entitlement. Destructive and immediate: the customer's users lose the paid service straight away while their accounts stay in place, which looks to them like an outage rather than a billing action. Undo it with gws_activate_channel_entitlement. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's SuspendEntitlementRequest and is optional: {"requestId":"..."}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringnonullOptional. JSON SuspendEntitlementRequest: requestId.
customerIdstringyesThe Cloud Channel customer id, from gws_list_channel_customers.
entitlementIdstringyesThe entitlement id, from gws_list_channel_entitlements.

[Google Workspace] Transfer a customer's existing entitlements to THIS reseller — from Google direct, or from another reseller. Destructive because it moves who bills the customer: from the moment it completes, this reseller is charged for those subscriptions and the previous seller is not. Run gws_list_channel_transferable_skus first to see what is actually eligible. LONG-RUNNING: poll the returned operation with gws_get_channel_operation; a done=false response means nothing has moved yet. Body is Google's TransferEntitlementsRequest: {"entitlements":[{"offer":"accounts/A/offers/O","parameters":[...]}],"authToken":"..."} — authToken is the transfer token the customer generates.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON TransferEntitlementsRequest: entitlements, authToken and optionally requestId.
customerIdstringyesThe Cloud Channel customer id receiving the entitlements.

[Google Workspace] Hand a customer's entitlements back to Google direct billing. Destructive and effectively one-way through this API: the customer leaves this reseller's book of business, the reseller stops earning on them, and getting them back needs a fresh transfer that the customer has to authorise. LONG-RUNNING: poll the returned operation with gws_get_channel_operation. Body is Google's TransferEntitlementsToGoogleRequest: {"entitlements":[{"name":"accounts/A/customers/C/entitlements/E"}]}.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
bodyJsonstringyesCOMPLETE JSON TransferEntitlementsToGoogleRequest: the entitlements to hand back.
customerIdstringyesThe Cloud Channel customer id whose entitlements are leaving.

[Google Workspace] Stop publishing this reseller's Cloud Channel notifications to a service account. Destructive as a SILENT switch-off: no customer account changes and no bill moves, but every downstream system watching that feed stops hearing about entitlement changes, suspensions and cancellations, and it stops without an error anywhere for anyone to notice. Read gws_list_channel_subscribers first and confirm nothing depends on it.

ParamTypeRequiredDefaultDescription
accountIdstringnonullOptional. The reseller's Partner Sales Console account id (accounts/); overrides the one stored on the connection.
serviceAccountstringyesThe service account to stop sending notifications to.

Cloud Identity

ToolPlanAccessSummary
gws_add_identity_saml_idp_credentialProDestructiveAttach an identity provider's signing certificate to a SAML profile.
gws_approve_identity_device_userProWriteApprove a device user so the account can synchronise work data on that device.
gws_block_identity_device_userProDestructiveBlock a device user so the account can no longer synchronise work data on that device.
gws_cancel_identity_device_user_wipeProWriteCall back a pending work-data wipe for one account on a device.
gws_cancel_identity_device_wipeProWriteCall back a pending device wipe.
gws_cancel_identity_user_invitationProDestructiveWithdraw an invitation that has been sent but not yet accepted.
gws_check_identity_transitive_membershipFreeRead-onlyAsk whether someone is a member of a group at any depth, counting nested groups.
gws_check_identity_user_invitableFreeRead-onlyAsk whether an address can be sent a transfer invitation — true only when an unmanaged personal Google account exists at it on one of this organisation's domains.
gws_create_identity_allowlisted_domainProWriteAllow this organisation's Cloud Identity groups to include members from one more domain.
gws_create_identity_deviceProWriteRegister a company-owned device in the Cloud Identity inventory before anyone signs in on it.
gws_create_identity_groupProWriteCreate a Cloud Identity group.
gws_create_identity_membershipProWriteAdd a member to a Cloud Identity group.
gws_create_identity_oidc_sso_profileProDestructiveCreate an inbound OIDC single sign-on profile.
gws_create_identity_policyProDestructiveCreate a Cloud Identity policy.
gws_create_identity_saml_sso_profileProDestructiveCreate an inbound SAML single sign-on profile.
gws_create_identity_sso_assignmentProDestructivePoint an org unit or a group at a single sign-on profile.
gws_delete_identity_allowlisted_domainProDestructiveRemove a domain from the allowlist.
gws_delete_identity_deviceProDestructiveDelete a device record.
gws_delete_identity_device_userProDestructiveDelete a device user record — the account's whole association with that device, including its approval state and sync history.
gws_delete_identity_groupProDestructiveDelete a Cloud Identity group.
gws_delete_identity_membershipProDestructiveRemove a member from a Cloud Identity group.
gws_delete_identity_oidc_sso_profileProDestructiveDelete an inbound OIDC single sign-on profile.
gws_delete_identity_policyProDestructiveDelete a Cloud Identity policy.
gws_delete_identity_saml_idp_credentialProDestructiveRemove an identity provider's signing certificate from a SAML profile.
gws_delete_identity_saml_sso_profileProDestructiveDelete an inbound SAML single sign-on profile.
gws_delete_identity_sso_assignmentProDestructiveDelete an inbound SSO assignment.
gws_get_identity_allowlisted_domainFreeRead-onlyGet one allowlisted domain by its Cloud Identity id.
gws_get_identity_deviceFreeRead-onlyGet one device — make, model, serial, operating system, encryption and compliance state, and when it last synchronised.
gws_get_identity_device_client_stateFreeRead-onlyGet one partner's client state for a device user — the compliance signals that partner reports, which Context-Aware Access rules can require.
gws_get_identity_device_userFreeRead-onlyGet one device user — which account it is, whether it is approved or blocked, its compliance state and when it last synchronised.
gws_get_identity_groupFreeRead-onlyGet one Cloud Identity group by its id — display name, description, group key, labels, parent customer and any dynamic-group metadata.
gws_get_identity_group_security_settingsFreeRead-onlyRead a group's security settings — today that is the member restriction, the rule deciding which kinds of member the group will accept.
gws_get_identity_membershipFreeRead-onlyGet one membership — who the member is, which roles they hold in the group (MEMBER, MANAGER or OWNER) and any expiry on those roles.
gws_get_identity_membership_graphFreeRead-onlyReturn the PATHS by which a member reaches a group, not just whether they do — the answer to "which nested group is giving this person access".
gws_get_identity_oidc_sso_profileFreeRead-onlyGet one inbound OIDC single sign-on profile — the identity provider Google redirects sign-in to, and the settings that make the redirect work.
gws_get_identity_policyFreeRead-onlyGet one Cloud Identity policy — the setting it configures, the org unit or group it applies to, and whether it is a SYSTEM policy set by Google or an ADMIN policy set by this organisation.
gws_get_identity_saml_idp_credentialFreeRead-onlyGet one identity-provider signing certificate attached to a SAML profile — its resource name, the size in bits of its RSA or DSA public key, and when it was last updated.
gws_get_identity_saml_sso_profileFreeRead-onlyGet one inbound SAML single sign-on profile — the identity provider's entity id, sign-in and sign-out URLs, and the service-provider details Google publishes back.
gws_get_identity_sso_assignmentFreeRead-onlyGet one inbound SSO assignment — which org unit or group it targets, which sign-in mode it applies, and its rank against other assignments.
gws_get_identity_user_invitationFreeRead-onlyGet one user invitation and its current state.
gws_list_identity_allowlisted_domainsFreeRead-onlyList the domains this organisation allows its Cloud Identity groups to include members from.
gws_list_identity_device_client_statesFreeRead-onlyList the client states recorded against a device user — one per third-party partner reporting on that device, the signals Context-Aware Access rules read.
gws_list_identity_device_usersFreeRead-onlyList the users recorded on one device — each is a person's work account on that machine, with its own approval, block and wipe state.
gws_list_identity_devicesFreeRead-onlyList the devices Cloud Identity knows about — company-owned inventory and personal devices with work data on them.
gws_list_identity_groupsFreeRead-onlyList the Cloud Identity groups under one customer.
gws_list_identity_membershipsFreeRead-onlyList the DIRECT memberships of one group — the members added to it, not the people who reach it through a nested group.
gws_list_identity_oidc_sso_profilesFreeRead-onlyList the inbound OIDC single sign-on profiles configured for this organisation.
gws_list_identity_policiesFreeRead-onlyList the Cloud Identity policies in force — the settings that decide what each Google service does for a given org unit or group, including the two-step verification and security settings an audit…
gws_list_identity_saml_idp_credentialsFreeRead-onlyList the identity-provider signing certificates attached to one SAML profile.
gws_list_identity_saml_sso_profilesFreeRead-onlyList the inbound SAML single sign-on profiles configured for this organisation.
gws_list_identity_sso_assignmentsFreeRead-onlyList the inbound SSO assignments — which org units and groups are sent to which single sign-on profile, and in what order.
gws_list_identity_user_invitationsFreeRead-onlyList the invitations sent to unmanaged accounts — people who already signed up for a personal Google account on one of this organisation's domains and have been asked to hand it over.
gws_lookup_identity_device_usersFreeRead-onlyFind a device user's resource name from an identifier the device itself reports, rather than from a Cloud Identity id.
gws_lookup_identity_groupFreeRead-onlyTurn a group's email address into the group id every other tool in this family takes.
gws_lookup_identity_membershipFreeRead-onlyTurn a member's email address into the membership id the other membership tools take.
gws_modify_identity_membership_rolesProDestructiveAdd, remove or update the roles a member holds in a group.
gws_patch_identity_groupProWriteChange some fields of a Cloud Identity group, merging rather than replacing — no field you leave out is touched.
gws_patch_identity_oidc_sso_profileProWriteChange some fields of an inbound OIDC single sign-on profile, merging rather than replacing — no field you leave out is touched.
gws_patch_identity_policyProWriteChange some fields of a Cloud Identity policy, merging rather than replacing — no field you leave out is touched.
gws_patch_identity_saml_sso_profileProWriteChange some fields of an inbound SAML single sign-on profile, merging rather than replacing — no field you leave out is touched.
gws_patch_identity_sso_assignmentProWriteChange some fields of an inbound SSO assignment, merging rather than replacing — no field you leave out is touched.
gws_search_identity_direct_groupsFreeRead-onlyList the groups a member belongs to DIRECTLY, across every group in the organisation.
gws_search_identity_groupsFreeRead-onlySearch Cloud Identity groups with a Common Expression Language query.
gws_search_identity_transitive_groupsFreeRead-onlyList every group a member ends up in, counting nested groups — the complete answer to "what does this person get through group membership".
gws_search_identity_transitive_membershipsFreeRead-onlyList everyone who ends up in one group, counting nested groups — the membership list an access review needs, where gws_list_identity_memberships gives only the members added directly.
gws_send_identity_user_invitationProDestructiveSend a transfer invitation to an unmanaged personal Google account.
gws_update_identity_group_security_settingsProDestructiveReplace a group's member restriction.
gws_wipe_identity_deviceProDestructiveFactory-reset a device remotely.
gws_wipe_identity_device_userProDestructiveErase one account's work data from a device, leaving the rest of the machine alone.

[Google Workspace] Attach an identity provider's signing certificate to a SAML profile. Marked as changing things because it decides which assertions Google will accept for a profile people already sign in through: A WRONG CERTIFICATE CAN LOCK EVERY USER OUT OF THE DOMAIN, and a certificate from somewhere other than the intended provider would let that party mint sign-ins for this domain. Add the new certificate BEFORE removing the old one during a rollover, and confirm both are listed with gws_list_identity_saml_idp_credentials. Body carries the PEM-encoded x509 certificate, e.g. {"pemData":"-----BEGIN CERTIFICATE-----\n..."}. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body carrying pemData, the PEM-encoded x509 certificate.
ssoProfileIdstringyesThe profile's id, the segment after "inboundSamlSsoProfiles/".

[Google Workspace] Approve a device user so the account can synchronise work data on that device. NOT marked as changing things: it GRANTS access to a device that was waiting for approval and takes nothing away. It is also the undo for gws_block_identity_device_user. Body carries Google's one optional field: "customer" reaches a resold customer, e.g. {"customer":"customers/C046psxkn"}. Send for the connection's own customer.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body. for the connection's own customer; may carry "customer".
deviceIdstringyesThe device's id, the segment after "devices/".
deviceUserIdstringyesThe device user's id, the segment after "deviceUsers/".

[Google Workspace] Block a device user so the account can no longer synchronise work data on that device. Marked as changing things because it TAKES ACCESS AWAY from a working device: the person stops receiving mail and files on it immediately, with no warning to them. Nothing is erased, and gws_approve_identity_device_user reverses it. Body carries Google's one optional field: "customer" reaches a resold customer, e.g. {"customer":"customers/C046psxkn"}. Send for the connection's own customer.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body. for the connection's own customer; may carry "customer".
deviceIdstringyesThe device's id, the segment after "devices/".
deviceUserIdstringyesThe device user's id, the segment after "deviceUsers/".

[Google Workspace] Call back a pending work-data wipe for one account on a device. NOT marked as changing things: it is the undo for gws_wipe_identity_device_user and destroys nothing. It works only while the command is still pending. Body carries Google's one optional field: "customer" reaches a resold customer, e.g. {"customer":"customers/C046psxkn"}. Send for the connection's own customer.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body. for the connection's own customer; may carry "customer".
deviceIdstringyesThe device's id, the segment after "devices/".
deviceUserIdstringyesThe device user's id, the segment after "deviceUsers/".

[Google Workspace] Call back a pending device wipe. NOT marked as changing things: it is the undo for gws_wipe_identity_device and destroys nothing. It works only while the command is still pending — a device that has already received the wipe cannot be recovered this way. Body carries Google's one optional field: "customer" reaches a resold customer, e.g. {"customer":"customers/C046psxkn"}. Send for the connection's own customer.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body. for the connection's own customer; may carry "customer".
deviceIdstringyesThe device's id, the segment after "devices/".

[Google Workspace] Withdraw an invitation that has been sent but not yet accepted. Marked as changing things because the person's link stops working: an invitee part-way through the transfer is cut off, and getting them back means sending a fresh invitation, which emails them again. Only an invitation in the invited state can be cancelled — read it with gws_get_identity_user_invitation first. A reseller cancels against a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
userEmailstringyesThe unmanaged account's email address, e.g. "someone@example.com".

[Google Workspace] Ask whether someone is a member of a group at any depth, counting nested groups. This is the tool for "does this person actually get what the group grants", which a direct-membership read cannot answer. query is a CEL expression naming the member and is REQUIRED, e.g. member_key_id == 'jo@example.com'; a member from an external identity source needs member_key_namespace as well.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".
querystringyesRequired CEL query naming the member, e.g. member_key_id == 'jo@example.com'.

[Google Workspace] Ask whether an address can be sent a transfer invitation — true only when an unmanaged personal Google account exists at it on one of this organisation's domains. Run this before gws_send_identity_user_invitation, which emails a real person. A reseller checks against a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
userEmailstringyesThe address to test, e.g. "someone@example.com".

[Google Workspace] Allow this organisation's Cloud Identity groups to include members from one more domain. NOT marked as changing things: it WIDENS what is permitted and removes nobody's access. Body is Google's AllowlistedDomain resource and carries one settable field, e.g. {"domain":"example.com"} — the domain is immutable once created, so a correction means deleting the entry and creating a new one.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON AllowlistedDomain object, e.g. {"domain":"example.com"}.

[Google Workspace] Register a company-owned device in the Cloud Identity inventory before anyone signs in on it. NOT marked as changing things: it adds a record and touches no existing device. Body is Google's Device resource, e.g. {"serialNumber":"5CD1234ABC","deviceType":"ANDROID"}. A reseller registers into a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON Device object, e.g. {"serialNumber":"5CD1234ABC","deviceType":"ANDROID"}.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Create a Cloud Identity group. NOT marked as changing things: a new group starts empty and takes nothing away. Body is Google's Group resource and needs groupKey, parent and labels, e.g. {"groupKey":{"id":"sales@example.com"},"parent":"customers/C046psxkn","displayName":"Sales","labels":{"cloudidentity.googleapis.com/groups.discussion_forum":""}}. THE LABELS MAP DECIDES WHAT KIND OF GROUP THIS IS and every key takes an empty string as its value: cloudidentity.googleapis.com/groups.discussion_forum makes an ordinary Google group, and cloudidentity.googleapis.com/groups.dynamic makes a dynamic group whose membership is computed from the query in dynamicGroupMetadata rather than added by hand. parent is where the customer travels on this route — that is how a reseller creates a group for a resold customer — and Google requires the customer id to begin with "C". initialGroupConfig is WITH_INITIAL_OWNER (the calling administrator becomes an owner) or EMPTY; omitting it leaves Google's INITIAL_GROUP_CONFIG_UNSPECIFIED.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON Group object with groupKey, parent and labels.
initialGroupConfigstringnonullOptional. "WITH_INITIAL_OWNER" or "EMPTY".

[Google Workspace] Add a member to a Cloud Identity group. NOT marked as changing things: it adds access rather than removing any, matching how the Directory member tools are classified. Body is Google's Membership resource and needs preferredMemberKey, e.g. {"preferredMemberKey":{"id":"jo@example.com"},"roles":[{"name":"MEMBER"}]}. Omitting roles gives a plain MEMBER. Adding somebody to a group can hand them everything the group grants, so check what the group is used for before adding to it.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON Membership object with preferredMemberKey and optionally roles.
groupIdstringyesThe group's id, the segment after "groups/".

[Google Workspace] Create an inbound OIDC single sign-on profile. Marked as changing things because of what it leads to: a profile is where sign-in goes, and A WRONG VALUE CAN LOCK EVERY USER OUT OF THE DOMAIN once an assignment points at it — including the administrator who made the change, whose recovery is Google support rather than another API call. Creating the profile changes nobody's sign-in on its own; gws_create_identity_sso_assignment is what puts it into service, so test the profile against a small org unit before assigning it widely. Body is Google's InboundOidcSsoProfile resource, carrying the customer it belongs to and the identity provider's issuer, client id and client secret. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON InboundOidcSsoProfile object.

[Google Workspace] Create a Cloud Identity policy. Marked as changing things because a policy decides what a Google service does for everyone it covers, sign-in included: A WRONG VALUE CAN LOCK EVERY USER OUT OF THE DOMAIN — a two-step verification or session policy aimed at the wrong org unit will do exactly that, and the administrator making the change is not exempt. Aim it at a small org unit and confirm the effect before widening it. Body is Google's Policy resource: policyQuery names who it applies to, setting carries the value, and customer names the customer, which is how a reseller creates a policy for a resold customer and must begin with "C".

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON Policy object with policyQuery and setting.

[Google Workspace] Create an inbound SAML single sign-on profile. Marked as changing things because of what it leads to: a profile is where sign-in goes, and A WRONG VALUE CAN LOCK EVERY USER OUT OF THE DOMAIN once an assignment points at it — including the administrator who made the change, whose recovery is Google support rather than another API call. Creating the profile changes nobody's sign-in on its own; a certificate added with gws_add_identity_saml_idp_credential and an assignment made with gws_create_identity_sso_assignment are what put it into service, so test against a small org unit first. Body is Google's InboundSamlSsoProfile resource, carrying the customer and the identity provider's entity id and sign-in URL. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON InboundSamlSsoProfile object.

[Google Workspace] Point an org unit or a group at a single sign-on profile. Marked as changing things, and it is the tool that puts an SSO profile into service: A WRONG VALUE CAN LOCK EVERY USER OUT OF THE DOMAIN, because the people it covers stop signing in with Google and start being redirected to the identity provider named — including the administrator making the change if the target org unit contains them. Aim it at a small org unit and confirm a real sign-in before widening it. Body is Google's InboundSsoAssignment resource: ssoMode is SSO_OFF, SAML_SSO, OIDC_SSO or DOMAIN_WIDE_SAML_IF_ENABLED, samlSsoInfo must be set if and only if the mode is SAML_SSO and oidcSsoInfo if and only if it is OIDC_SSO, and exactly one of targetOrgUnit (orgUnits/) or targetGroup (groups/) names who it covers. rank must be zero for an org-unit assignment and at least one for a group assignment. customer carries the customer, which is how a reseller assigns for a resold customer.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON InboundSsoAssignment object with ssoMode and one of targetOrgUnit or targetGroup.

[Google Workspace] Remove a domain from the allowlist. Marked as changing things because it NARROWS what the organisation permits: members from that domain can no longer be added to Cloud Identity groups, and there is no undo beyond creating the entry again. Read the entry with gws_get_identity_allowlisted_domain first so you know which domain the id belongs to — the id is opaque and does not contain the domain name.

ParamTypeRequiredDefaultDescription
allowlistedDomainIdstringyesThe allowlisted domain's id, the segment after "allowlistedDomains/".

[Google Workspace] Delete a device record. Marked as changing things: the device stops being managed, its whole history — sync times, compliance state, the users recorded on it — goes with the record, and there is no undo. The hardware is not wiped; use gws_wipe_identity_device for that, and do it BEFORE deleting, because a deleted device can no longer be commanded. Read the record with gws_get_identity_device first so you know whose machine the id belongs to. A reseller deletes from a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's id, the segment after "devices/".

[Google Workspace] Delete a device user record — the account's whole association with that device, including its approval state and sync history. Marked as changing things: the record and its history go, there is no undo, and the account must enrol on the device again. It does NOT erase the work data already on the machine; run gws_wipe_identity_device_user first if that matters, because a deleted device user can no longer be commanded. A reseller deletes from a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's id, the segment after "devices/".
deviceUserIdstringyesThe device user's id, the segment after "deviceUsers/".

[Google Workspace] Delete a Cloud Identity group. Marked as changing things: the group, every membership in it and every role on those memberships go at once, mail to the group's address stops being delivered, and anything that granted access through this group — Drive shares, calendars, SSO assignments targeting it — silently stops granting it. There is no undo. Read the membership list with gws_list_identity_memberships first if you need it back.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".

[Google Workspace] Remove a member from a Cloud Identity group. Marked as changing things because it takes access away: the member loses everything the group grants — mail to the group's address, shared drives, calendars, and any SSO assignment or access rule that targets the group — the moment it runs. Confirm who the membership belongs to with gws_get_identity_membership first; the membership id does not contain the member's address.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".
membershipIdstringyesThe membership's id, the segment after "memberships/".

[Google Workspace] Delete an inbound OIDC single sign-on profile. Marked as changing things: the profile and its identity-provider settings go with no undo, and A WRONG DELETION CAN LOCK EVERY USER OUT OF THE DOMAIN — every assignment pointing at this profile stops working, and the users it covered can no longer sign in the way they did a moment ago. Read the profile with gws_get_identity_oidc_sso_profile and check what points at it with gws_list_identity_sso_assignments before running this. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
ssoProfileIdstringyesThe profile's id, the segment after "inboundOidcSsoProfiles/".

[Google Workspace] Delete a Cloud Identity policy. Marked as changing things: the org unit or group it covered falls back to whatever policy applies next, or to the service's default, with no undo. A WRONG DELETION CAN LOCK EVERY USER IT COVERED OUT OF THE DOMAIN, and it can equally LOWER THE ORGANISATION'S SECURITY POSTURE without anything appearing broken — a deleted two-step verification policy simply stops being enforced. Read the policy with gws_get_identity_policy first. Only an ADMIN policy can be deleted; a SYSTEM policy set by Google cannot.

ParamTypeRequiredDefaultDescription
policyIdstringyesThe policy's id, the segment after "policies/".

[Google Workspace] Remove an identity provider's signing certificate from a SAML profile. Marked as changing things: removing the certificate the provider is actually signing with STOPS EVERY SIGN-IN THROUGH THAT PROFILE and can lock every user out of the domain, with no undo beyond adding the certificate again. During a rollover, add the replacement first and confirm both are listed with gws_list_identity_saml_idp_credentials before removing this one.

ParamTypeRequiredDefaultDescription
idpCredentialIdstringyesThe credential's id, the segment after "idpCredentials/".
ssoProfileIdstringyesThe profile's id, the segment after "inboundSamlSsoProfiles/".

[Google Workspace] Delete an inbound SAML single sign-on profile. Marked as changing things: the profile, its identity-provider settings and every credential attached to it go with no undo, and A WRONG DELETION CAN LOCK EVERY USER OUT OF THE DOMAIN — every assignment pointing at this profile stops working, and the users it covered can no longer sign in the way they did a moment ago. Read the profile with gws_get_identity_saml_sso_profile and check what points at it with gws_list_identity_sso_assignments before running this. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
ssoProfileIdstringyesThe profile's id, the segment after "inboundSamlSsoProfiles/".

[Google Workspace] Delete an inbound SSO assignment. Marked as changing things: the org unit or group it covered falls back to whatever assignment ranks next, or to Google sign-in if there is none, with no undo. A WRONG DELETION CAN LOCK EVERY USER IN THAT TARGET OUT OF THE DOMAIN — people who have no Google password because they have only ever signed in through the identity provider cannot sign in at all once the redirect stops. Read the assignment with gws_get_identity_sso_assignment first, and check what else covers the same target with gws_list_identity_sso_assignments.

ParamTypeRequiredDefaultDescription
assignmentIdstringyesThe assignment's id, the segment after "inboundSsoAssignments/".

[Google Workspace] Get one allowlisted domain by its Cloud Identity id. The id is the segment after "allowlistedDomains/" in the resource name, e.g. 0184mhaj1smlusv in allowlistedDomains/0184mhaj1smlusv — it is not the domain name. Find it with gws_list_identity_allowlisted_domains.

ParamTypeRequiredDefaultDescription
allowlistedDomainIdstringyesThe allowlisted domain's id, the segment after "allowlistedDomains/".

[Google Workspace] Get one device — make, model, serial, operating system, encryption and compliance state, and when it last synchronised. The device id is the segment after "devices/" in the resource name; find it with gws_list_identity_devices. A reseller reads a resold customer's device by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's id, the segment after "devices/".

[Google Workspace] Get one partner's client state for a device user — the compliance signals that partner reports, which Context-Aware Access rules can require. partnerId identifies the partner storing the data; for a partner in the BeyondCorp Alliance it is the id Google gave them, and for this organisation's own entries it takes the form -, where the customer id is the one from the Admin SDK customer record WITHOUT its leading C. The device id may be "-". A reseller reads against a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's id, or "-".
deviceUserIdstringyesThe device user's id, the segment after "deviceUsers/".
partnerIdstringyesThe partner storing the data, e.g. "046psxkn-vpn".

[Google Workspace] Get one device user — which account it is, whether it is approved or blocked, its compliance state and when it last synchronised. Both ids are the segments after "devices/" and "deviceUsers/"; find them with gws_list_identity_device_users. A reseller reads against a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's id, the segment after "devices/".
deviceUserIdstringyesThe device user's id, the segment after "deviceUsers/".

[Google Workspace] Get one Cloud Identity group by its id — display name, description, group key, labels, parent customer and any dynamic-group metadata. The id is the segment after "groups/" in the resource name and is not the group's email address; get it from gws_lookup_identity_group, which takes the address. Takes no customer: Google's route resolves a group id on its own.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".

[Google Workspace] Read a group's security settings — today that is the member restriction, the rule deciding which kinds of member the group will accept. Optional readMask narrows the response and Google accepts only member_restriction in it; omit it to get every field. Read this before gws_update_identity_group_security_settings, which replaces the value.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".
readMaskstringnonullOptional. "member_restriction", or omit for all fields.

[Google Workspace] Get one membership — who the member is, which roles they hold in the group (MEMBER, MANAGER or OWNER) and any expiry on those roles. The membership id is the segment after "memberships/"; get it from gws_lookup_identity_membership, which takes the member's email address.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".
membershipIdstringyesThe membership's id, the segment after "memberships/".

[Google Workspace] Return the PATHS by which a member reaches a group, not just whether they do — the answer to "which nested group is giving this person access". Pass "-" as the group id to get every path connected to the member instead of only those ending at one group. query is REQUIRED and must name the member AND labels, e.g. member_key_id == 'jo@example.com' && 'cloudidentity.googleapis.com/groups.discussion_forum' in labels. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, or "-" for every path connected to the member.
querystringyesRequired CEL query naming the member and labels.

[Google Workspace] Get one inbound OIDC single sign-on profile — the identity provider Google redirects sign-in to, and the settings that make the redirect work. Read this before changing or deleting a profile: an SSO profile decides how people get into the domain, and the response is the only record of what the working value was.

ParamTypeRequiredDefaultDescription
ssoProfileIdstringyesThe profile's id, the segment after "inboundOidcSsoProfiles/".

[Google Workspace] Get one Cloud Identity policy — the setting it configures, the org unit or group it applies to, and whether it is a SYSTEM policy set by Google or an ADMIN policy set by this organisation. Read this before changing or deleting the policy; the response is the only record of what the working value was.

ParamTypeRequiredDefaultDescription
policyIdstringyesThe policy's id, the segment after "policies/".

[Google Workspace] Get one identity-provider signing certificate attached to a SAML profile — its resource name, the size in bits of its RSA or DSA public key, and when it was last updated. Google returns NO key material and no expiry date on this route, so the certificate cannot be read back and its validity dates have to come from the identity provider. An expired certificate stops every sign-in through its profile, which is why the provider's own calendar is the thing to watch.

ParamTypeRequiredDefaultDescription
idpCredentialIdstringyesThe credential's id, the segment after "idpCredentials/".
ssoProfileIdstringyesThe profile's id, the segment after "inboundSamlSsoProfiles/".

[Google Workspace] Get one inbound SAML single sign-on profile — the identity provider's entity id, sign-in and sign-out URLs, and the service-provider details Google publishes back. Read this before changing or deleting a profile: it decides how people get into the domain, and the response is the only record of what the working value was.

ParamTypeRequiredDefaultDescription
ssoProfileIdstringyesThe profile's id, the segment after "inboundSamlSsoProfiles/".

[Google Workspace] Get one inbound SSO assignment — which org unit or group it targets, which sign-in mode it applies, and its rank against other assignments. Read this before changing or deleting the assignment; the response is the only record of what the working value was.

ParamTypeRequiredDefaultDescription
assignmentIdstringyesThe assignment's id, the segment after "inboundSsoAssignments/".

[Google Workspace] Get one user invitation and its current state. The invitation is addressed by the email address of the unmanaged account, which is also its resource id. A reseller reaches a resold customer's invitation by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
userEmailstringyesThe unmanaged account's email address, e.g. "someone@example.com".

[Google Workspace] List the domains this organisation allows its Cloud Identity groups to include members from. Acts as the administrator stored on the connection and takes no customer — Google's route carries none. Optional filter matches the domain exactly, e.g. "domain = 'example.com'"; Google supports no other condition here and no combinations. Pages up to 5000 domains at a time.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Exact-match domain filter, e.g. "domain = 'example.com'".
pageSizeintegernonullOptional. Page size, up to 5000.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the client states recorded against a device user — one per third-party partner reporting on that device, the signals Context-Aware Access rules read. Pass "-" for both ids to list every client state in the organisation. Google publishes no page-size parameter on this route, so this tool takes none and pages with pageToken alone. A reseller lists against a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's id, or "-" for every device.
deviceUserIdstringyesThe device user's id, or "-" for every device user.
filterstringnonullOptional. Additional restrictions on the client states returned.
orderBystringnonullOptional. Order specification for the response.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the users recorded on one device — each is a person's work account on that machine, with its own approval, block and wipe state. Pass "-" as the device id to list device users across every device. Pages up to 20 at a time, the smallest page in this connector, so expect to page. A reseller lists against a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe device's id, or "-" for every device.
filterstringnonullOptional. Mobile device search fields, space-separated.
orderBystringnonullOptional. Order specification for the response.
pageSizeintegernonullOptional. Page size, up to 20.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the devices Cloud Identity knows about — company-owned inventory and personal devices with work data on them. view is COMPANY_INVENTORY or USER_ASSIGNED_DEVICES; omitting it leaves Google's VIEW_UNSPECIFIED. orderBy takes one of create_time, last_sync_time, model, os_version, device_type or serial_number, with an optional trailing "desc". filter uses Google's mobile device search fields, space-separated. Pages up to 100 at a time. A reseller lists a resold customer's devices by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Mobile device search fields, space-separated.
orderBystringnonullOptional. create_time, last_sync_time, model, os_version, device_type or serial_number, optionally with " desc".
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
viewstringnonullOptional. "COMPANY_INVENTORY" or "USER_ASSIGNED_DEVICES".

[Google Workspace] List the Cloud Identity groups under one customer. THIS ROUTE NEEDS A REAL CUSTOMER ID: Google documents the parent as a C-prefixed identifier (for example C046psxkn) and does not accept the usual shorthand, so the connection must have a customer id stored or you must pass customerId here. Without either, the call is refused before it is sent and the message says so — read the id with gws_get_customer. view is BASIC (default) or FULL; FULL adds dynamic-group metadata and halves the maximum page, 1000 for BASIC and 500 for FULL. A reseller lists a resold customer's groups the same way. To search rather than enumerate — by label, by display name or by group key — use gws_search_identity_groups.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
pageSizeintegernonullOptional. Page size, up to 1000 for BASIC and 500 for FULL.
pageTokenstringnonullOptional. Page token from a previous response.
viewstringnonullOptional. "BASIC" (default) or "FULL".

[Google Workspace] List the DIRECT memberships of one group — the members added to it, not the people who reach it through a nested group. For the full picture use gws_search_identity_transitive_memberships. view is BASIC (default) or FULL; FULL halves the maximum page, 1000 for BASIC and 500 for FULL. Takes no customer: a group id resolves on its own.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".
pageSizeintegernonullOptional. Page size, up to 1000 for BASIC and 500 for FULL.
pageTokenstringnonullOptional. Page token from a previous response.
viewstringnonullOptional. "BASIC" (default) or "FULL".

[Google Workspace] List the inbound OIDC single sign-on profiles configured for this organisation. Takes no customerId parameter, and that is Google's shape: the customer travels inside the CEL filter, whose only supported form is a customer equality — customer=="customers/C0123abc". That clause is how a reseller lists a resold customer's profiles; omitting the filter returns the profiles of the customer the connection belongs to, and customer=="" returns the globally shared profiles. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. CEL customer filter, e.g. customer=="customers/C0123abc".
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the Cloud Identity policies in force — the settings that decide what each Google service does for a given org unit or group, including the two-step verification and security settings an audit asks about. Takes no customerId parameter, and that is Google's shape: the customer travels inside the CEL filter, as customer == "customers/C0123abc", and one call may filter on only one customer. That clause is how a reseller lists a resold customer's policies; omitting it defaults to the customer the connection belongs to. The filter can also match on the setting, e.g. setting.type.matches('^settings/gmail\..*$'), and clauses can be combined with && and ||. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. CEL filter on customer and/or setting type.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the identity-provider signing certificates attached to one SAML profile. Google returns NO key material here and no expiry date — each entry carries its resource name, the size in bits of its RSA or DSA public key, and when it was last updated — so this is a read for confirming HOW MANY credentials a profile has and which is newest, not for inspecting a certificate. That makes it the read to run around a rollover: add the new one, confirm two are listed, then remove the old. Google publishes no maximum page size on this route, so StackJack asks for up to 100 at a time as a safety limit of its own.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Page size; StackJack asks for at most 100.
pageTokenstringnonullOptional. Page token from a previous response.
ssoProfileIdstringyesThe profile's id, the segment after "inboundSamlSsoProfiles/".

[Google Workspace] List the inbound SAML single sign-on profiles configured for this organisation. Takes no customerId parameter, and that is Google's shape: the customer travels inside the CEL filter, whose only supported form is a customer equality — customer=="customers/C0123abc". That clause is how a reseller lists a resold customer's profiles; omitting the filter returns the profiles of the customer the connection belongs to. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. CEL customer filter, e.g. customer=="customers/C0123abc".
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the inbound SSO assignments — which org units and groups are sent to which single sign-on profile, and in what order. This is the read that answers "who is actually affected if this profile changes", so run it before touching any profile. Takes no customerId parameter, and that is Google's shape: the customer travels inside the CEL filter, whose only supported form is a customer equality — customer==customers/C0123abc. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. CEL customer filter, e.g. customer==customers/C0123abc.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the invitations sent to unmanaged accounts — people who already signed up for a personal Google account on one of this organisation's domains and have been asked to hand it over. Optional filter takes Google's state form, e.g. "state=='invited'". orderBy sorts on one field only: "email asc", "email desc", "update_time asc" or "update_time desc". Pages up to 200 at a time. A reseller reaches a resold customer's invitations by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. State filter, e.g. "state=='invited'".
orderBystringnonullOptional. "email asc", "email desc", "update_time asc" or "update_time desc".
pageSizeintegernonullOptional. Page size, up to 200.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Find a device user's resource name from an identifier the device itself reports, rather than from a Cloud Identity id. Takes no device id — Google searches across every device on this route — and no customer, because the route carries none. Supply exactly one identifier: androidId for an Android device, iosDeviceId together with partner for a managed iOS app, rawResourceId for an endpoint enrolled in Google Endpoint Verification, or userId set to "me" for the calling user. Pages up to 20 at a time.

ParamTypeRequiredDefaultDescription
androidIdstringnonullOptional. The Android ID reported by Settings.Secure#ANDROID_ID.
iosDeviceIdstringnonullOptional. The partner-specified iOS device identifier. Needs partner as well.
pageSizeintegernonullOptional. Page size, up to 20.
pageTokenstringnonullOptional. Page token from a previous response.
partnerstringnonullOptional. The partner ID of the calling iOS app.
rawResourceIdstringnonullOptional. The device_resource_id written by Google Endpoint Verification.
userIdstringnonullOptional. Set to "me" to fetch the calling user's own device user.

[Google Workspace] Turn a group's email address into the group id every other tool in this family takes. This is the entry point when you know the address and nothing else. Leave groupKeyNamespace empty for an ordinary Google group; set it only for a group mapped from an external identity source, where it takes the form identitysources/.

ParamTypeRequiredDefaultDescription
groupKeyIdstringyesThe group's email address, e.g. "sales@example.com".
groupKeyNamespacestringnonullOptional. External identity source, e.g. "identitysources/1234". Omit for a Google group.

[Google Workspace] Turn a member's email address into the membership id the other membership tools take. Leave memberKeyNamespace empty for an ordinary Google user or group; set it only for a member mapped from an external identity source, where it takes the form identitysources/.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".
memberKeyIdstringyesThe member's email address, e.g. "jo@example.com".
memberKeyNamespacestringnonullOptional. External identity source, e.g. "identitysources/1234". Omit for a Google user or group.

[Google Workspace] Add, remove or update the roles a member holds in a group. Marked as changing things because removing MANAGER or OWNER takes administrative control of the group away, and taking the last OWNER off a group leaves nobody able to manage it. Google will not let you remove MEMBER — delete the membership with gws_delete_identity_membership instead — and will not accept adds or removes in the same call as an update. Body carries exactly one of addRoles, removeRoles or updateRolesParams, e.g. {"addRoles":[{"name":"MANAGER"}]} or {"removeRoles":["MANAGER"]}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body with ONE of addRoles, removeRoles or updateRolesParams.
groupIdstringyesThe group's id, the segment after "groups/".
membershipIdstringyesThe membership's id, the segment after "memberships/".

[Google Workspace] Change some fields of a Cloud Identity group, merging rather than replacing — no field you leave out is touched. updateMask is REQUIRED and Google accepts only display_name, description and labels in it. Changing labels changes what kind of group this is, so send it only deliberately: dropping cloudidentity.googleapis.com/groups.dynamic from a dynamic group's labels stops its membership being computed. Body carries only the fields named in updateMask, e.g. {"displayName":"Sales EMEA"}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object carrying ONLY the fields named in updateMask.
groupIdstringyesThe group's id, the segment after "groups/".
updateMaskstringyesRequired. Comma-separated: display_name, description and/or labels.

[Google Workspace] Change some fields of an inbound OIDC single sign-on profile, merging rather than replacing — no field you leave out is touched. NOT marked as changing things, because it alters only the fields named in updateMask; that is not the same as being safe. A wrong issuer or client secret on a profile that is already assigned can lock every user out of the domain at their next sign-in, so read the current value with gws_get_identity_oidc_sso_profile first and keep a session open while you test. updateMask is REQUIRED. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object carrying ONLY the fields named in updateMask.
ssoProfileIdstringyesThe profile's id, the segment after "inboundOidcSsoProfiles/".
updateMaskstringyesRequired. Comma-separated list of the fields to update.

[Google Workspace] Change some fields of a Cloud Identity policy, merging rather than replacing — no field you leave out is touched. NOT marked as changing things, because it alters only the fields the body names; that is not the same as being safe. A wrong setting value on a policy already in force can lock every user it covers out of the domain, so read the current value with gws_get_identity_policy first. Unlike every other patch in this family this route takes NO updateMask — Google publishes none — so the body alone decides what changes. Only an ADMIN policy can be changed; a SYSTEM policy set by Google cannot.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object carrying ONLY the fields to change.
policyIdstringyesThe policy's id, the segment after "policies/".

[Google Workspace] Change some fields of an inbound SAML single sign-on profile, merging rather than replacing — no field you leave out is touched. NOT marked as changing things, because it alters only the fields named in updateMask; that is not the same as being safe. A wrong entity id or sign-in URL on a profile that is already assigned can lock every user out of the domain at their next sign-in, so read the current value with gws_get_identity_saml_sso_profile first and keep a session open while you test. updateMask is REQUIRED. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON object carrying ONLY the fields named in updateMask.
ssoProfileIdstringyesThe profile's id, the segment after "inboundSamlSsoProfiles/".
updateMaskstringyesRequired. Comma-separated list of the fields to update.

[Google Workspace] Change some fields of an inbound SSO assignment, merging rather than replacing — no field you leave out is touched. NOT marked as changing things, because it alters only the fields named in updateMask; that is not the same as being safe. Changing ssoMode or the profile this assignment points at can lock every user in its target out of the domain at their next sign-in, so read the current value with gws_get_identity_sso_assignment first and keep a session open while you test. updateMask is REQUIRED. Returns a long-running operation.

ParamTypeRequiredDefaultDescription
assignmentIdstringyesThe assignment's id, the segment after "inboundSsoAssignments/".
bodyJsonstringyesJSON object carrying ONLY the fields named in updateMask.
updateMaskstringyesRequired. Comma-separated list of the fields to update.

[Google Workspace] List the groups a member belongs to DIRECTLY, across every group in the organisation. Takes no group id: Google searches all groups on this route. query is REQUIRED and must name the member and labels, e.g. member_key_id == 'jo@example.com' && 'cloudidentity.googleapis.com/groups.discussion_forum' in labels. orderBy sorts on group_name or group_key, ascending by default, e.g. "group_name desc". Pages up to 1000 at a time. For groups reached through nesting use gws_search_identity_transitive_groups.

ParamTypeRequiredDefaultDescription
orderBystringnonullOptional. "group_name", "group_name desc", "group_key" or "group_key desc".
pageSizeintegernonullOptional. Page size, up to 1000.
pageTokenstringnonullOptional. Page token from a previous response.
querystringyesRequired CEL query naming the member and labels.

[Google Workspace] Search Cloud Identity groups with a Common Expression Language query. Takes NO customerId parameter, and that is Google's shape rather than an omission: the customer travels INSIDE the query, which must contain an equality on the parent — e.g. parent == 'customers/C046psxkn' — and the customer id must begin with "C". That clause is also how a reseller searches a resold customer. The query may add an inclusion on labels ('cloudidentity.googleapis.com/groups.discussion_forum' in labels), an equality on domain_name, and startsWith, contains or equality on group_key and display_name. view is BASIC (default) or FULL; FULL halves the maximum page, 1000 for BASIC and 500 for FULL. The query text is passed through exactly as written.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Page size, up to 1000 for BASIC and 500 for FULL.
pageTokenstringnonullOptional. Page token from a previous response.
querystringyesCEL query. MUST contain a parent equality, e.g. parent == 'customers/C046psxkn'.
viewstringnonullOptional. "BASIC" (default) or "FULL".

[Google Workspace] List every group a member ends up in, counting nested groups — the complete answer to "what does this person get through group membership". Takes no group id: Google searches all groups on this route. query is REQUIRED and must name the member and labels, e.g. member_key_id == 'jo@example.com' && 'cloudidentity.googleapis.com/groups.discussion_forum' in labels. The query may also carry an equality on the parent to restrict the search to one customer — parent == 'customers/C046psxkn' — which is how a reseller searches a resold customer, and Google allows it only for an administrator with group read permission on that customer. Pages up to 1000 at a time.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Page size, up to 1000.
pageTokenstringnonullOptional. Page token from a previous response.
querystringyesRequired CEL query naming the member and labels, optionally with a parent equality.

[Google Workspace] List everyone who ends up in one group, counting nested groups — the membership list an access review needs, where gws_list_identity_memberships gives only the members added directly. Takes a real group id and, unlike the other searches in this family, no query at all. Pages up to 1000 at a time.

ParamTypeRequiredDefaultDescription
groupIdstringyesThe group's id, the segment after "groups/".
pageSizeintegernonullOptional. Page size, up to 1000.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Send a transfer invitation to an unmanaged personal Google account. Marked as changing things because IT EMAILS A REAL PERSON: the message asks them to hand their existing account to this organisation, it cannot be recalled once sent, and Google rate-limits re-sending. Check the address first with gws_check_identity_user_invitable — sending to an address with no unmanaged account fails, and sending twice mails the person twice. A reseller invites into a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
userEmailstringyesThe unmanaged account's email address, e.g. "someone@example.com".

[Google Workspace] Replace a group's member restriction. Marked as changing things because the value REPLACES the rule rather than adding to it: a wrong or empty restriction can open a private group to members it was built to exclude, or lock out the members it was built to include, and either way existing memberships stop matching the new rule. Read the current value with gws_get_identity_group_security_settings first. updateMask is REQUIRED and Google accepts only member_restriction.query in it. Body carries the new restriction, e.g. {"memberRestriction":{"query":"member.customer_id == 'C046psxkn'"}}.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON SecuritySettings object carrying the new memberRestriction.
groupIdstringyesThe group's id, the segment after "groups/".
updateMaskstringyesRequired. Google accepts only "member_restriction.query".

[Google Workspace] Factory-reset a device remotely. Marked as changing things, and this is the most destructive tool in the family: it ERASES THE WHOLE DEVICE, personal data included, not just the work profile — for that use gws_wipe_identity_device_user. The command can be called back with gws_cancel_identity_device_wipe only while it is still pending; once the device receives it, nothing undoes it. Confirm the machine with gws_get_identity_device first. Body carries Google's optional fields: "customer" reaches a resold customer, e.g. {"customer":"customers/C046psxkn"}, and "removeResetLock": true lifts Activation Lock or Factory Reset Protection so the reset can complete. Send for the connection's own customer with the lock left alone.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body. for the connection's own customer; may carry "customer" and "removeResetLock".
deviceIdstringyesThe device's id, the segment after "devices/".

[Google Workspace] Erase one account's work data from a device, leaving the rest of the machine alone. Marked as changing things: the work profile, its mail and its files go, and anything held only there and never synchronised is gone for good. This is the narrower of the two wipes — gws_wipe_identity_device factory-resets the whole machine. The command can be called back with gws_cancel_identity_device_user_wipe only while it is still pending. Body carries Google's one optional field: "customer" reaches a resold customer, e.g. {"customer":"customers/C046psxkn"}. Send for the connection's own customer.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON body. for the connection's own customer; may carry "customer".
deviceIdstringyesThe device's id, the segment after "devices/".
deviceUserIdstringyesThe device user's id, the segment after "deviceUsers/".

Chrome Management

ToolPlanAccessSummary
gws_count_chrome_active_devicesFreeRead-onlyCount how many ChromeOS devices were ACTIVE over each of Google's set time frames, ending at the date given.
gws_count_chrome_app_requestsFreeRead-onlySummarise the extension install requests users have raised, counted per extension with how many people asked for it and when it was last requested.
gws_count_chrome_browsers_needing_attentionFreeRead-onlyCount the managed Chrome BROWSERS that need looking at, split into three groups: recently enrolled, carrying policy still to be synced, and showing no recent activity.
gws_count_chrome_crash_eventsFreeRead-onlyCount the times Chrome crashed, grouped so the result reads as a trend rather than a list of incidents.
gws_count_chrome_devices_needing_attentionFreeRead-onlyCount the ChromeOS DEVICES that need looking at: those that have not synced policy or seen user activity in the past 28 days, those running an out-of-date Chrome, and those that are not compliant.
gws_count_chrome_devices_per_boot_typeFreeRead-onlyCount ChromeOS devices grouped by how they boot, as of the date given.
gws_count_chrome_devices_per_release_channelFreeRead-onlyCount ChromeOS devices grouped by the Chrome release channel each one is on, as of the date given — how much of the fleet is on stable and how much is ahead of it.
gws_count_chrome_devices_reaching_auto_expirationFreeRead-onlyCount the ChromeOS devices whose automatic-update expiration falls in each month of a window, grouped by expiry date and model — the report that answers which hardware stops receiving Chrome updates…
gws_count_chrome_hardware_fleet_devicesFreeRead-onlyCount ChromeOS devices by hardware specification — how many of each model, processor, memory size and storage size are in the fleet.
gws_count_chrome_installed_appsFreeRead-onlyCount the apps and extensions installed across the fleet, one row per app with its total install count, how many permissions it asks for and its risk score.
gws_count_chrome_print_jobs_by_printerFreeRead-onlySummarise printing per PRINTER: for each one, how many jobs it ran, how many devices sent to it and how many people used it.
gws_count_chrome_print_jobs_by_userFreeRead-onlySummarise printing per PERSON: for each one, how many jobs they ran, how many printers they used and from how many devices.
gws_count_chrome_profile_versionsFreeRead-onlyCount the managed Chrome PROFILES running each Chrome version — the update picture for signed-in profiles rather than for devices.
gws_count_chrome_versionsFreeRead-onlyCount how many of each installed Chrome version are in the fleet — the report that shows how far behind the estate is running.
gws_create_chrome_connector_configProWriteCreate a Chrome Enterprise connector config, so managed Chrome starts streaming security events to an external system.
gws_create_chrome_profile_commandProDestructiveSend a remote command to one managed Chrome browser profile.
gws_create_chrome_telemetry_notification_configProWriteCreate a telemetry notification config, so matching ChromeOS telemetry is published to a Google Cloud Pub/Sub topic as it arrives.
gws_delete_chrome_connector_configProDestructiveDelete a Chrome Enterprise connector config.
gws_delete_chrome_profileProDestructiveDelete the data Google has collected from one managed Chrome browser profile.
gws_delete_chrome_telemetry_notification_configProDestructiveDelete a telemetry notification config.
gws_disable_chrome_security_insightsProDestructiveSwitch Chrome security insights off for the whole customer.
gws_enable_chrome_security_insightsProWriteSwitch Chrome security insights on for this customer.
gws_find_chrome_installed_app_devicesFreeRead-onlyList the managed Chrome browser DEVICES that have a given app installed — the report that answers "where is this extension running".
gws_find_chrome_installed_app_profilesFreeRead-onlyList the managed Chrome PROFILES that have a given app installed — the report that answers "who is running this extension".
gws_get_chrome_android_appFreeRead-onlyGet the details Google holds for one Android app — its name, publisher, permissions and store listing.
gws_get_chrome_appFreeRead-onlyGet the details Google holds for one Chrome extension or app — its name, publisher, permissions and store listing.
gws_get_chrome_connector_configFreeRead-onlyGet one Chrome Enterprise connector config by its id, including its delivery status and the moment of its most recent failure.
gws_get_chrome_profileFreeRead-onlyGet one managed Chrome browser profile by its permanent id.
gws_get_chrome_profile_commandFreeRead-onlyGet one remote command sent to a managed Chrome browser profile, including whether the browser has carried it out.
gws_get_chrome_security_insights_statusFreeRead-onlyReport whether Chrome security insights are switched on for this customer.
gws_get_chrome_telemetry_deviceFreeRead-onlyGet the hardware and health telemetry one ChromeOS device has reported.
gws_get_chrome_telemetry_userFreeRead-onlyGet the telemetry recorded against one person — the devices they used and the activity, audio, bandwidth, peripheral and app reports from each.
gws_get_chrome_web_appFreeRead-onlyGet the details Google holds for one progressive web app.
gws_list_chrome_connector_configsFreeRead-onlyList the Chrome Enterprise connector configs — the destinations managed Chrome streams security events to, such as a CrowdStrike, Splunk, Google SecOps or Palo Alto Networks endpoint.
gws_list_chrome_devices_requesting_extensionFreeRead-onlyList the managed Chrome browser devices whose users have asked to install one particular extension.
gws_list_chrome_print_jobsFreeRead-onlyList individual print jobs, one row each with its title, state, page count, colour and duplex mode, printer and the person who sent it.
gws_list_chrome_profile_commandsFreeRead-onlyList the remote commands sent to one managed Chrome browser profile, with each command's state — PENDING, EXPIRED or EXECUTED_BY_CLIENT — and its result.
gws_list_chrome_profilesFreeRead-onlyList the managed Chrome browser profiles — one row per signed-in profile, with its owner, platform, Chrome version, policy count, extension count and when it last reported in.
gws_list_chrome_telemetry_devicesFreeRead-onlyList the hardware and health telemetry ChromeOS devices have reported.
gws_list_chrome_telemetry_eventsFreeRead-onlyList the telemetry events ChromeOS devices have raised — crashes, app installs and launches, network and VPN state changes, display and USB peripheral changes.
gws_list_chrome_telemetry_notification_configsFreeRead-onlyList the telemetry notification configs — the Google Cloud Pub/Sub topics matching telemetry is published to, and the filter each one applies.
gws_list_chrome_telemetry_usersFreeRead-onlyList the telemetry recorded against people in this organisation — for each, the devices they used and the activity, audio, bandwidth, peripheral and app reports from those devices.
gws_list_chrome_users_requesting_extensionFreeRead-onlyList the people who have asked to install one particular extension.
gws_move_chrome_third_party_profile_userProWriteMove a third-party Chrome profile user into another organizational unit.
gws_patch_chrome_connector_configProWriteChange fields on an existing Chrome Enterprise connector config.
gws_query_chrome_content_transfer_breakdownsFreeRead-onlyBreak the content-transfer totals down by one dimension, so you can see WHO moved the most data or WHICH sites it went to.
gws_query_chrome_content_transfersFreeRead-onlyGet a high-level summary of the content managed Chrome moved — uploads, downloads and prints, including the ones a data-loss rule flagged as sensitive.
gws_query_chrome_url_visit_breakdownsFreeRead-onlyBreak the risky-URL totals down by one dimension, so you can see WHICH people or WHICH domains account for them.
gws_query_chrome_url_visitsFreeRead-onlyGet a high-level summary of the suspicious URLs people reached in managed Chrome, counted by risk level.

[Google Workspace] Count how many ChromeOS devices were ACTIVE over each of Google's set time frames, ending at the date given. Acts as the administrator stored on the connection. Give the date as three separate numbers; omit any of them and Google reads the missing part as unspecified, so a year alone is a valid request. Answers with a fixed set of buckets rather than a page, so it takes no page size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
dayintegernonullOptional. Day of the month, 1 to 31.
monthintegernonullOptional. Month, 1 to 12.
yearintegernonullOptional. Year, 1 to 9999.

[Google Workspace] Summarise the extension install requests users have raised, counted per extension with how many people asked for it and when it was last requested. Acts as the administrator stored on the connection. orderBy sorts on one field: "request_count" or "latest_request_time". orgUnitId narrows to one organizational unit. Pages up to 50 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orderBystringnonullOptional. "request_count" or "latest_request_time".
orgUnitIdstringnonullOptional. Organizational unit id to narrow the count to.
pageSizeintegernonullOptional. Page size, up to 50.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Count the managed Chrome BROWSERS that need looking at, split into three groups: recently enrolled, carrying policy still to be synced, and showing no recent activity. Acts as the administrator stored on the connection. This counts browsers; for ChromeOS hardware use gws_count_chrome_devices_needing_attention. orgUnitId narrows to one organizational unit; omit it for the whole customer. Answers with a fixed set of buckets rather than a page, so it takes no page size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitIdstringnonullOptional. Organizational unit id; omit for all data.

[Google Workspace] Count the times Chrome crashed, grouped so the result reads as a trend rather than a list of incidents. Acts as the administrator stored on the connection. filter is AND-separated EBNF over major_browser_version, minor_browser_version, browser_channel, device_platform and past_number_days, e.g. major_browser_version = 'M115' AND past_number_days = '28'. orderBy takes browser_version, count or date. Answers with a fixed set of buckets rather than a page, so it takes no page size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. AND-separated filter, e.g. major_browser_version = 'M115' AND past_number_days = '28'.
orderBystringnonullOptional. "browser_version", "count" or "date".
orgUnitIdstringnonullOptional. Organizational unit id; counts only devices in it.

[Google Workspace] Count the ChromeOS DEVICES that need looking at: those that have not synced policy or seen user activity in the past 28 days, those running an out-of-date Chrome, and those that are not compliant. Acts as the administrator stored on the connection. readMask is REQUIRED and selects which of those counts come back — the report is empty without it. This counts ChromeOS hardware; for managed browsers use gws_count_chrome_browsers_needing_attention. Answers with a fixed set of buckets rather than a page, so it takes no page size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitIdstringnonullOptional. Organizational unit id; omit for all data.
readMaskstringyesRequired. Comma-separated field mask naming which counts to populate.

[Google Workspace] Count ChromeOS devices grouped by how they boot, as of the date given. Acts as the administrator stored on the connection. Give the date as three separate numbers; omit any of them and Google reads the missing part as unspecified. Answers with a fixed set of buckets rather than a page, so it takes no page size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
dayintegernonullOptional. Day of the month, 1 to 31.
monthintegernonullOptional. Month, 1 to 12.
yearintegernonullOptional. Year, 1 to 9999.

[Google Workspace] Count ChromeOS devices grouped by the Chrome release channel each one is on, as of the date given — how much of the fleet is on stable and how much is ahead of it. Acts as the administrator stored on the connection. Give the date as three separate numbers; omit any of them and Google reads the missing part as unspecified. Answers with a fixed set of buckets rather than a page, so it takes no page size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
dayintegernonullOptional. Day of the month, 1 to 31.
monthintegernonullOptional. Month, 1 to 12.
yearintegernonullOptional. Year, 1 to 9999.

[Google Workspace] Count the ChromeOS devices whose automatic-update expiration falls in each month of a window, grouped by expiry date and model — the report that answers which hardware stops receiving Chrome updates and when, so it can be budgeted for. Acts as the administrator stored on the connection. Both dates are yyyy-mm-dd in UTC and both include devices that have ALREADY expired. Answers with a fixed set of buckets rather than a page, so it takes no page size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
maxAueDatestringnonullOptional. Latest expiration date, yyyy-mm-dd UTC.
minAueDatestringnonullOptional. Earliest expiration date, yyyy-mm-dd UTC.
orgUnitIdstringnonullOptional. Organizational unit id; omit for all organizational units.

[Google Workspace] Count ChromeOS devices by hardware specification — how many of each model, processor, memory size and storage size are in the fleet. Acts as the administrator stored on the connection. readMask is REQUIRED and chooses WHICH hardware attribute the count is grouped by, so the same call with a different mask answers a different question. Answers with a fixed set of buckets rather than a page, so it takes no page size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
orgUnitIdstringnonullOptional. Organizational unit id; omit for all data.
readMaskstringyesRequired. Comma-separated field mask naming which hardware attributes to group by.

[Google Workspace] Count the apps and extensions installed across the fleet, one row per app with its total install count, how many permissions it asks for and its risk score. Acts as the administrator stored on the connection. filter is AND-separated EBNF over app_name, app_type, install_type, number_of_permissions, total_install_count, latest_profile_active_date, permission_name, app_id, manifest_versions and risk_score; OR is not supported. orderBy takes app_name, app_type, install_type, number_of_permissions, total_install_count, app_id, manifest_versions or risk_score. Pages up to 100 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. AND-separated filter, e.g. risk_score > 5.
orderBystringnonullOptional. One of the supported order-by fields, e.g. "total_install_count".
orgUnitIdstringnonullOptional. Organizational unit id.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Summarise printing per PRINTER: for each one, how many jobs it ran, how many devices sent to it and how many people used it. Acts as the administrator stored on the connection. Note the parameter name — printerOrgUnitId scopes by the PRINTER's organizational unit, not the user's, and there is no user-side org unit on this report. filter is AND-separated EBNF over complete_time only, and only >= and <= are supported. orderBy takes printer, job_count, device_count or user_count; the default is printer ascending. Pages up to 100 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over complete_time, using >= and <= only.
orderBystringnonullOptional. "printer", "job_count", "device_count" or "user_count".
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
printerOrgUnitIdstringnonullOptional. Organizational unit id of the PRINTERS to include.

[Google Workspace] Summarise printing per PERSON: for each one, how many jobs they ran, how many printers they used and from how many devices. Acts as the administrator stored on the connection. Note the parameter name — printerOrgUnitId scopes by the PRINTER's organizational unit, so it limits which printers are counted, not which people. filter is AND-separated EBNF over complete_time only, and only >= and <= are supported. orderBy takes user_email, job_count, printer_count or device_count; the default is user_email ascending. Pages up to 100 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over complete_time, using >= and <= only.
orderBystringnonullOptional. "user_email", "job_count", "printer_count" or "device_count".
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
printerOrgUnitIdstringnonullOptional. Organizational unit id of the PRINTERS to include.

[Google Workspace] Count the managed Chrome PROFILES running each Chrome version — the update picture for signed-in profiles rather than for devices. Acts as the administrator stored on the connection. filter is AND-separated EBNF over last_active_date only; OR is not supported. Pages up to 100 at a time. Its device-side counterpart is gws_count_chrome_versions. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over last_active_date.
orgUnitIdstringnonullOptional. Organizational unit id; omit for all data.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Count how many of each installed Chrome version are in the fleet — the report that shows how far behind the estate is running. Acts as the administrator stored on the connection. filter is AND-separated EBNF over last_active_date only; OR is not supported. Pages up to 100 at a time. Its profile-side counterpart is gws_count_chrome_profile_versions. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over last_active_date.
orgUnitIdstringnonullOptional. Organizational unit id.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Create a Chrome Enterprise connector config, so managed Chrome starts streaming security events to an external system. NOT marked as changing things: it adds a destination and takes nothing away. THE BODY CARRIES A SECRET — the CrowdStrike, Palo Alto Networks and Google SecOps shapes take an apiKey and the Splunk shape takes an hecToken; Google accepts them write-only and never returns them, so a wrong one shows up only as a config that stops delivering. Body is Google's ConnectorConfig: displayName, type (CONNECTOR_TYPE_UNSPECIFIED, REPORTING, DEVICE_TRUST, XDR, IDENTITY_BASED_ENROLLMENT, CERTIFICATE_AUTHORITY, ROOT_STORE or CONTENT_ANALYSIS), and details, whose one populated field names the provider (crowdStrikeConfig, crowdStrikeFalconNextGenConfig, crowdStrikeXdrConfig, deviceTrustConfig, googleSecOpsConfig, mipLabelConfig, paloAltoNetworksConfig, pubSubConfig, pubSubXdrConfig or splunkConfig). Optional connectorConfigId is 1-36 characters of lowercase letters, digits and hyphens, starting with a letter and ending with a letter or digit; omit it and Google assigns a UUID. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON ConnectorConfig object with displayName, type and details.
connectorConfigIdstringnonullOptional. 1-36 characters: lowercase letters, digits and hyphens, starting with a letter and ending with a letter or digit.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Send a remote command to one managed Chrome browser profile. Marked as changing things because the only command Google supports is clearBrowsingData, which WIPES that person's cache and cookies on their own machine: they are signed out of the sites they were signed in to and lose local browsing state, it happens on their device without a prompt, and nothing restores it. Body is Google's ChromeBrowserProfileCommand, e.g. {"commandType":"clearBrowsingData","payload":{"clearCache":true,"clearCookies":true}} — both payload fields are booleans. Confirm the profile with gws_get_chrome_profile first; the id is opaque and does not name its owner. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON ChromeBrowserProfileCommand with commandType and payload.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
profileIdstringyesThe profile's permanent id, the segment after "profiles/".

[Google Workspace] Create a telemetry notification config, so matching ChromeOS telemetry is published to a Google Cloud Pub/Sub topic as it arrives. NOT marked as changing things: it adds a feed and removes nothing. Body is Google's TelemetryNotificationConfig — googleCloudPubsubTopic names the topic in full, e.g. {"googleCloudPubsubTopic":"projects/my-project/topics/chrome-telemetry"}, and the optional filter narrows what is published. The topic must already exist and grant Google permission to publish to it; this call does not create it. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON TelemetryNotificationConfig with googleCloudPubsubTopic and an optional filter.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Delete a Chrome Enterprise connector config. Marked as changing things because THE EVENT STREAM STOPS: the security tool on the other end simply receives nothing more, with no error of its own to raise, and the events Chrome produces while the config is gone are not queued for later. Recreating it needs the provider's API key again, which Google does not return. Read the config with gws_get_chrome_connector_config first — the id is opaque and does not say which system it feeds. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
connectorConfigIdstringyesThe connector config's id, the segment after "connectorConfigs/".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Delete the data Google has collected from one managed Chrome browser profile. Marked as changing things because that history is destroyed with no undo: the reports, policy-sync record and status history for that profile are gone, and every fleet report stops counting it. The person's own Chrome profile keeps working and will report again later, but nothing restores what was collected before. Read it with gws_get_chrome_profile first — the id is opaque and does not name its owner. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
profileIdstringyesThe profile's permanent id, the segment after "profiles/".

[Google Workspace] Delete a telemetry notification config. Marked as changing things because THE FEED STOPS: whatever consumes that Pub/Sub topic simply stops receiving telemetry, with no error at either end, and the events produced while the config is gone are not replayed when a new one is created. Find the id with gws_list_chrome_telemetry_notification_configs — Google publishes no get route for a single config. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
notificationConfigIdstringyesThe config's id, the segment after "telemetry/notificationConfigs/".

[Google Workspace] Switch Chrome security insights off for the whole customer. Marked as changing things because COLLECTION STOPS the moment it runs: content transfers and risky URL visits are no longer recorded, whoever reviews that queue stops being fed, and switching insights back on does not backfill the gap — those hours are simply absent from every later report. Takes no body. Its undo is gws_enable_chrome_security_insights. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Switch Chrome security insights on for this customer. Google also SETS UP the Chrome connectors the feature needs as part of this call, so it changes more than one setting. NOT marked as changing things: it starts collection and removes nothing. Body is Google's EnableInsightsRequest — send to set the connectors up at the root organizational unit, or name units relative to root, e.g. {"targetOus":["/corp/sales","/eng"]}. Its opposite is gws_disable_chrome_security_insights. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON EnableInsightsRequest, e.g. or {"targetOus":["/corp/sales"]}.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] List the managed Chrome browser DEVICES that have a given app installed — the report that answers "where is this extension running". Acts as the administrator stored on the connection. appId is the 32-character Chrome extension id or the Android package name; omit it and every app is included. appType is APP_TYPE_UNSPECIFIED, EXTENSION, APP, THEME, HOSTED_APP or ANDROID_APP, and Google infers it from the id's shape when omitted. orderBy takes machine or device_id. Pages up to 100 at a time. For profiles rather than devices use gws_find_chrome_installed_app_profiles. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
appIdstringnonullOptional. The 32-character extension id or Android package name.
appTypestringnonullOptional. EXTENSION, APP, THEME, HOSTED_APP, ANDROID_APP or APP_TYPE_UNSPECIFIED.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over last_active_date.
orderBystringnonullOptional. "machine" or "device_id".
orgUnitIdstringnonullOptional. Organizational unit id.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the managed Chrome PROFILES that have a given app installed — the report that answers "who is running this extension". Acts as the administrator stored on the connection. appId is REQUIRED here, unlike its device-side twin gws_find_chrome_installed_app_devices, and is the 32-character Chrome extension id or the Android package name. appType is APP_TYPE_UNSPECIFIED, EXTENSION, APP, THEME, HOSTED_APP or ANDROID_APP, and Google infers it from the id's shape when omitted. orderBy takes email, profile_id or profile_permanent_id. Pages up to 100 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
appIdstringyesRequired. The 32-character extension id or Android package name.
appTypestringnonullOptional. EXTENSION, APP, THEME, HOSTED_APP, ANDROID_APP or APP_TYPE_UNSPECIFIED.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over last_active_date.
orderBystringnonullOptional. "email", "profile_id" or "profile_permanent_id".
orgUnitIdstringnonullOptional. Organizational unit id.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Get the details Google holds for one Android app — its name, publisher, permissions and store listing. Acts as the administrator stored on the connection. appId is the Android package name, e.g. com.google.android.apps.docs. Use gws_get_chrome_app for a Chrome extension and gws_get_chrome_web_app for a progressive web app; the three are separate routes and an id from one does not resolve on another. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
appIdstringyesThe Android package name, e.g. com.google.android.apps.docs.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Get the details Google holds for one Chrome extension or app — its name, publisher, permissions and store listing. Acts as the administrator stored on the connection. appId is the 32-character Chrome Web Store id, optionally with a version suffix, e.g. gmbmikajjgmnabiglmofipeabaddhgne@2.1.2; without the suffix Google returns the latest version. Use gws_get_chrome_android_app for an Android package and gws_get_chrome_web_app for a progressive web app. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
appIdstringyesThe 32-character extension id, optionally with @version, e.g. gmbmikajjgmnabiglmofipeabaddhgne@2.1.2.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Get one Chrome Enterprise connector config by its id, including its delivery status and the moment of its most recent failure. Acts as the administrator stored on the connection. The id is the segment after "connectorConfigs/" in the resource name; find it with gws_list_chrome_connector_configs. The API key or token the config authenticates to the external system with is write-only at Google and is not returned. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
connectorConfigIdstringyesThe connector config's id, the segment after "connectorConfigs/".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Get one managed Chrome browser profile by its permanent id. Acts as the administrator stored on the connection. The id is the segment after "profiles/" in the resource name; find it with gws_list_chrome_profiles. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
profileIdstringyesThe profile's permanent id, the segment after "profiles/".

[Google Workspace] Get one remote command sent to a managed Chrome browser profile, including whether the browser has carried it out. Acts as the administrator stored on the connection. Both ids come from gws_list_chrome_profile_commands. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
commandIdstringyesThe command's id, the segment after "commands/".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
profileIdstringyesThe profile's permanent id, the segment after "profiles/".

[Google Workspace] Report whether Chrome security insights are switched on for this customer. Acts as the administrator stored on the connection. Check this before reading any of the content-transfer or URL-visit tools: with insights off, those reads answer empty rather than failing, so an empty result is not evidence that nothing happened. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] Get the hardware and health telemetry one ChromeOS device has reported. Acts as the administrator stored on the connection. readMask is REQUIRED and decides which sections come back — nothing beyond the bare resource is returned without it. Common values are name, org_unit_id, device_id, serial_number, cpu_info, cpu_status_report, memory_info, memory_status_report, storage_info, storage_status_report, battery_info, battery_status_report, network_info, network_status_report, os_update_status, graphics_info, boot_performance_report, heartbeat_status_report and app_report; Google's Chrome Management reference lists the rest. Ask only for the sections you need — a full mask across a fleet is a very large response. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
deviceIdstringyesThe telemetry device's id, the segment after "telemetry/devices/".
readMaskstringyesRequired. Comma-separated read mask, e.g. "name,serial_number,cpu_status_report".

[Google Workspace] Get the telemetry recorded against one person — the devices they used and the activity, audio, bandwidth, peripheral and app reports from each. Acts as the administrator stored on the connection. It reads that person's telemetry as the administrator; it does not act as them. readMask is optional here, unlike the device and event reads, and selects from name, org_unit_id, user_id, user_email, user_device.device_id, user_device.device_activity_report, user_device.audio_status_report, user_device.network_bandwidth_report, user_device.peripherals_report and user_device.app_report. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
readMaskstringnonullOptional. Comma-separated read mask, e.g. "name,user_email,user_device.app_report".
telemetryUserIdstringyesThe telemetry user's id, the segment after "telemetry/users/".

[Google Workspace] Get the details Google holds for one progressive web app. Acts as the administrator stored on the connection. appId is the web app's identifier as it appears after "apps/web/" in a Chrome Management resource name. Use gws_get_chrome_app for a Chrome extension and gws_get_chrome_android_app for an Android package. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
appIdstringyesThe web app's identifier, the segment after "apps/web/".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.

[Google Workspace] List the Chrome Enterprise connector configs — the destinations managed Chrome streams security events to, such as a CrowdStrike, Splunk, Google SecOps or Palo Alto Networks endpoint. Acts as the administrator stored on the connection. Each row carries its display name, type and status; Google marks a config disabled once it has failed to deliver an event for 24 hours. The API keys held inside a config are write-only and never come back. Pages up to 100 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the managed Chrome browser devices whose users have asked to install one particular extension. Acts as the administrator stored on the connection. extensionId is the 32-character Chrome Web Store id. orgUnitId counts only devices belonging DIRECTLY to that organizational unit — sub-units are not included. Page tokens expire after one day. Pages up to 50 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
extensionIdstringyesThe extension's 32-character Chrome Web Store id.
orgUnitIdstringnonullOptional. Organizational unit id; only devices directly in it are counted.
pageSizeintegernonullOptional. Page size, up to 50.
pageTokenstringnonullOptional. Page token from a previous response; expires after one day.

[Google Workspace] List individual print jobs, one row each with its title, state, page count, colour and duplex mode, printer and the person who sent it. Acts as the administrator stored on the connection. Note the parameter name — printerOrgUnitId scopes by the PRINTER's organizational unit. filter is AND-separated EBNF over complete_time, printer_id and user_id; only >= and <= work on complete_time and only = on the other two. orderBy takes title, state, create_time, complete_time, document_page_count, color_mode, duplex_mode, printer or user_email; the default is complete_time descending. Pages up to 100 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over complete_time, printer_id and user_id.
orderBystringnonullOptional. One of the supported order-by fields, e.g. "complete_time".
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
printerOrgUnitIdstringnonullOptional. Organizational unit id of the PRINTERS to include.

[Google Workspace] List the remote commands sent to one managed Chrome browser profile, with each command's state — PENDING, EXPIRED or EXECUTED_BY_CLIENT — and its result. Acts as the administrator stored on the connection. Pages up to 100 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
profileIdstringyesThe profile's permanent id, the segment after "profiles/".

[Google Workspace] List the managed Chrome browser profiles — one row per signed-in profile, with its owner, platform, Chrome version, policy count, extension count and when it last reported in. Acts as the administrator stored on the connection. filter and orderBy both accept profile_id, display_name, user_email, last_activity_time, last_policy_sync_time, last_status_report_time, first_enrollment_time, os_platform_type, os_version, browser_version, browser_channel, policy_count, extension_count, identity_provider, affiliation_state and os_platform_version; filter additionally accepts ouId, and a bare string matches any text field. Add " desc" to an orderBy field to reverse it; the default is last_status_report_time descending. Pages up to 200 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over the profile fields, e.g. "ouId = 03ph8a2z1xdnme9" or a bare search string.
orderBystringnonullOptional. One field, e.g. "last_activity_time desc".
pageSizeintegernonullOptional. Page size, up to 200.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the hardware and health telemetry ChromeOS devices have reported. Acts as the administrator stored on the connection. readMask is REQUIRED and decides which sections come back. Common values are name, org_unit_id, device_id, serial_number, cpu_info, cpu_status_report, memory_info, memory_status_report, storage_info, storage_status_report, battery_info, battery_status_report, network_info, network_status_report, os_update_status, graphics_info, boot_performance_report, heartbeat_status_report and app_report; Google's Chrome Management reference lists the rest. filter accepts org_unit_id, serial_number, device_id and reports_timestamp — WITHOUT a reports_timestamp Google returns only recent reports, so pass reports_timestamp>=0 to get everything. Pages up to 1000 at a time; keep the mask narrow at that size. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over org_unit_id, serial_number, device_id and reports_timestamp.
pageSizeintegernonullOptional. Page size, up to 1000.
pageTokenstringnonullOptional. Page token from a previous response.
readMaskstringyesRequired. Comma-separated read mask, e.g. "name,serial_number,cpu_status_report".

[Google Workspace] List the telemetry events ChromeOS devices have raised — crashes, app installs and launches, network and VPN state changes, display and USB peripheral changes. Acts as the administrator stored on the connection. readMask is REQUIRED and decides which sections come back. Common values are device, user, os_crash_event, app_install_event, app_uninstall_event, app_launch_event, network_state_change_event, wifi_signal_strength_event, vpn_connection_state_change_event, https_latency_change_event, usb_peripherals_event, external_displays_event and audio_severe_underrun_event. filter accepts device_id, user_id, device_org_unit_id, user_org_unit_id, timestamp and event_type — GIVE AT LEAST ONE event_type, because Google is making that mandatory and an unfiltered call returns everything. Pages up to 1000 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over device_id, user_id, device_org_unit_id, user_org_unit_id, timestamp and event_type.
pageSizeintegernonullOptional. Page size, up to 1000.
pageTokenstringnonullOptional. Page token from a previous response.
readMaskstringyesRequired. Comma-separated read mask, e.g. "device,os_crash_event".

[Google Workspace] List the telemetry notification configs — the Google Cloud Pub/Sub topics matching telemetry is published to, and the filter each one applies. Acts as the administrator stored on the connection. Google publishes no get route for a single config, so this listing is how you find one before deleting it. Pages up to 100 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
pageSizeintegernonullOptional. Page size, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] List the telemetry recorded against people in this organisation — for each, the devices they used and the activity, audio, bandwidth, peripheral and app reports from those devices. Acts as the administrator stored on the connection. readMask is optional here, unlike the device and event reads, and selects from name, org_unit_id, user_id, user_email, user_device.device_id, user_device.device_activity_report, user_device.audio_status_report, user_device.network_bandwidth_report, user_device.peripherals_report and user_device.app_report. filter accepts user_id and user_org_unit_id. Pages up to 1000 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. Filter over user_id and user_org_unit_id.
pageSizeintegernonullOptional. Page size, up to 1000.
pageTokenstringnonullOptional. Page token from a previous response.
readMaskstringnonullOptional. Comma-separated read mask, e.g. "name,user_email,user_device.app_report".

[Google Workspace] List the people who have asked to install one particular extension. Acts as the administrator stored on the connection. extensionId is the 32-character Chrome Web Store id. orgUnitId counts only those belonging DIRECTLY to that organizational unit — sub-units are not included. Page tokens expire after one day. Pages up to 50 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
extensionIdstringyesThe extension's 32-character Chrome Web Store id.
orgUnitIdstringnonullOptional. Organizational unit id; only members directly in it are counted.
pageSizeintegernonullOptional. Page size, up to 50.
pageTokenstringnonullOptional. Page token from a previous response; expires after one day.

[Google Workspace] Move a third-party Chrome profile user into another organizational unit. EVERY profile that person owns moves with them, so from then on the destination unit's Chrome policies apply to all of them. NOT marked as changing things: nothing is deleted, and moving them back restores the previous policies. Body is Google's MoveThirdPartyProfileUserRequest and carries one required field, e.g. {"destinationOrgUnit":"/Sales/West"}. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON MoveThirdPartyProfileUserRequest, e.g. {"destinationOrgUnit":"/Sales/West"}.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
thirdPartyProfileUserIdstringyesThe third-party profile user's id, the segment after "thirdPartyProfileUsers/".

[Google Workspace] Change fields on an existing Chrome Enterprise connector config. NOT marked as changing things: a merging patch alters only the fields updateMask names and clears nothing else. THE BODY CAN CARRY A SECRET — supplying details replaces the provider block, whose apiKey or hecToken Google accepts write-only and never returns, so an omitted key in a replacement block leaves the config unable to deliver. Body is Google's ConnectorConfig. updateMask is a comma-separated field list, e.g. "displayName"; omit it and Google decides which fields the body updates. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON ConnectorConfig object carrying only the fields to change.
connectorConfigIdstringyesThe connector config's id, the segment after "connectorConfigs/".
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
updateMaskstringnonullOptional. Comma-separated field list, e.g. "displayName".

[Google Workspace] Break the content-transfer totals down by one dimension, so you can see WHO moved the most data or WHICH sites it went to. Acts as the administrator stored on the connection. breakdown is CONTENT_TRANSFERS_BREAKDOWN_DIMENSION_UNSPECIFIED, USER, EVENT_DOMAIN or CONTENT_CATEGORY, defaulting to USER. metric is CONTENT_TRANSFERS_METRIC_UNSPECIFIED, CONTENT_TRANSFERS_METRIC_TOTAL_TRANSFERS, CONTENT_TRANSFERS_METRIC_TOTAL_UPLOADS, CONTENT_TRANSFERS_METRIC_TOTAL_DOWNLOADS, CONTENT_TRANSFERS_METRIC_TOTAL_PRINTS, CONTENT_TRANSFERS_METRIC_TOTAL_SENSITIVE_TRANSFERS, CONTENT_TRANSFERS_METRIC_SENSITIVE_UPLOADS, CONTENT_TRANSFERS_METRIC_SENSITIVE_DOWNLOADS or CONTENT_TRANSFERS_METRIC_SENSITIVE_PRINTS, defaulting to total transfers. fixedTimeRange is FIXED_TIME_RANGE_UNSPECIFIED, FIXED_TIME_RANGE_FOUR_HOURS, FIXED_TIME_RANGE_ONE_DAY, FIXED_TIME_RANGE_ONE_WEEK or FIXED_TIME_RANGE_FOUR_WEEKS, defaulting to four weeks. Filtering by user or event_domain requires breakdown to be set to that same dimension. Data more recent than 48 hours is not available. Pages up to 1000 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
breakdownstringnonullOptional. USER, EVENT_DOMAIN, CONTENT_CATEGORY or CONTENT_TRANSFERS_BREAKDOWN_DIMENSION_UNSPECIFIED. Defaults to USER.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. AIP-160 filter over user, event_domain, content_category and event_time.
fixedTimeRangestringnonullOptional. One of the FIXED_TIME_RANGE_* values. Defaults to FIXED_TIME_RANGE_FOUR_WEEKS.
metricstringnonullOptional. One of the CONTENT_TRANSFERS_METRIC_* values. Defaults to CONTENT_TRANSFERS_METRIC_TOTAL_TRANSFERS.
pageSizeintegernonullOptional. Page size, up to 1000.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Get a high-level summary of the content managed Chrome moved — uploads, downloads and prints, including the ones a data-loss rule flagged as sensitive. Acts as the administrator stored on the connection. Answers with ONE summary rather than a page, so it takes no page size or page token. Optional filter uses AIP-160 syntax over event_time only, with >= and <= joined by AND, e.g. event_time >= "2024-01-01T00:00:00Z" AND event_time <= "2024-01-02T00:00:00Z". Nothing older than 180 days is available, ranges shorter than 4 hours can be incomplete, and with no event_time Google returns the last 30 days. For a per-user or per-domain split use gws_query_chrome_content_transfer_breakdowns. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. AIP-160 filter over event_time, e.g. event_time >= "2024-01-01T00:00:00Z".

[Google Workspace] Break the risky-URL totals down by one dimension, so you can see WHICH people or WHICH domains account for them. Acts as the administrator stored on the connection. REQUIRES A CHROME ENTERPRISE PREMIUM SUBSCRIPTION — without it the query returns nothing rather than failing. breakdown is URL_VISITS_BREAKDOWN_DIMENSION_UNSPECIFIED, USER or EVENT_DOMAIN, defaulting to USER. metric is URL_VISITS_METRIC_UNSPECIFIED, URL_VISITS_METRIC_TOTAL_SUSPICIOUS_URL_VISITS, URL_VISITS_METRIC_HIGH_RISK_URL_VISITS, URL_VISITS_METRIC_MEDIUM_RISK_URL_VISITS or URL_VISITS_METRIC_LOW_RISK_URL_VISITS, defaulting to total suspicious visits. fixedTimeRange is FIXED_TIME_RANGE_UNSPECIFIED, FIXED_TIME_RANGE_FOUR_HOURS, FIXED_TIME_RANGE_ONE_DAY, FIXED_TIME_RANGE_ONE_WEEK or FIXED_TIME_RANGE_FOUR_WEEKS, defaulting to four weeks. Filtering by user or event_domain requires breakdown to be set to that same dimension. Data more recent than 48 hours is not available. Pages up to 1000 at a time. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
breakdownstringnonullOptional. USER, EVENT_DOMAIN or URL_VISITS_BREAKDOWN_DIMENSION_UNSPECIFIED. Defaults to USER.
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. AIP-160 filter over user, event_domain and event_time.
fixedTimeRangestringnonullOptional. One of the FIXED_TIME_RANGE_* values. Defaults to FIXED_TIME_RANGE_FOUR_WEEKS.
metricstringnonullOptional. One of the URL_VISITS_METRIC_* values. Defaults to URL_VISITS_METRIC_TOTAL_SUSPICIOUS_URL_VISITS.
pageSizeintegernonullOptional. Page size, up to 1000.
pageTokenstringnonullOptional. Page token from a previous response.

[Google Workspace] Get a high-level summary of the suspicious URLs people reached in managed Chrome, counted by risk level. Acts as the administrator stored on the connection. REQUIRES A CHROME ENTERPRISE PREMIUM SUBSCRIPTION — without it the query succeeds and returns nothing, so an empty result does not mean nobody visited anything risky. Answers with ONE summary rather than a page, so it takes no page size or page token. Optional filter uses AIP-160 syntax over event_time only, with >= and <= joined by AND. Nothing older than 180 days is available, and with no event_time Google returns the last 30 days. For a per-user or per-domain split use gws_query_chrome_url_visit_breakdowns. A reseller reaches a resold customer by passing customerId.

ParamTypeRequiredDefaultDescription
customerIdstringnonullOptional. A resold customer's numeric customer id (a reseller connection reaches any resold customer this way). Omit for the connection's own customer.
filterstringnonullOptional. AIP-160 filter over event_time, e.g. event_time >= "2024-01-01T00:00:00Z".

Gmail content

ToolPlanAccessSummary
gws_batch_delete_gmail_messagesProDestructivePERMANENTLY delete up to 1000 messages.
gws_batch_modify_gmail_messagesProWriteAdd or remove labels on up to 1000 messages at once.
gws_create_gmail_draftProWriteSave a new unsent draft in one person's mailbox.
gws_create_gmail_labelProWriteCreate a label in one person's mailbox.
gws_delete_gmail_draftProDestructiveDelete an unsent draft.
gws_delete_gmail_labelProDestructiveDelete a label.
gws_delete_gmail_messageProDestructivePERMANENTLY delete one message.
gws_delete_gmail_threadProDestructivePERMANENTLY delete a conversation and EVERY message in it.
gws_download_gmail_attachmentFreeRead-onlyDownload one attachment and get back a temporary link to it.
gws_get_gmail_draftFreeRead-onlyRead one unsent draft.
gws_get_gmail_labelFreeRead-onlyGet one label, including its colour, its visibility settings and how many messages and threads carry it.
gws_get_gmail_messageFreeRead-onlyRead one message.
gws_get_gmail_profileFreeRead-onlyGet one person's mailbox summary — their Gmail address, how many messages and threads it holds, and its current historyId.
gws_get_gmail_threadFreeRead-onlyRead a whole conversation — every message in it, in order.
gws_import_gmail_messageProWriteImport a message into one person's mailbox as if it had ARRIVED there.
gws_insert_gmail_messageProWriteFile a message directly into one person's mailbox WITHOUT sending it.
gws_list_gmail_draftsFreeRead-onlyList one person's unsent drafts.
gws_list_gmail_historyFreeRead-onlyList what changed in one person's mailbox since a known point — messages added or deleted, labels applied or removed.
gws_list_gmail_labelsFreeRead-onlyList every label in one person's mailbox, system and user-created alike.
gws_list_gmail_messagesFreeRead-onlySearch one person's messages.
gws_list_gmail_threadsFreeRead-onlySearch one person's conversations.
gws_modify_gmail_messageProWriteAdd or remove labels on one message.
gws_modify_gmail_threadProWriteAdd or remove labels on EVERY message in a conversation.
gws_patch_gmail_labelProWriteChange some fields of a label and leave the rest as they are.
gws_send_gmail_draftProDestructiveSend an existing draft.
gws_send_gmail_messageProDestructiveSend an email as one person.
gws_trash_gmail_messageProWriteMove a message to Trash.
gws_trash_gmail_threadProWriteMove a whole conversation to Trash.
gws_untrash_gmail_messageProWriteTake a message out of Trash and put it back where it was.
gws_untrash_gmail_threadProWriteTake a whole conversation out of Trash.
gws_update_gmail_draftProDestructiveReplace an unsent draft with a new message.
gws_update_gmail_labelProDestructiveReplace a label wholesale.

[Google Workspace] PERMANENTLY delete up to 1000 messages. Acts as the named mailbox owner. Marked as changing things because the mail is GONE: these messages do NOT go to Trash, they are not recoverable from it, and Google offers no undo. gws_trash_gmail_message is the reversible choice and Trash still holds a message for 30 days. Confirm the exact ids with gws_list_gmail_messages before running this — a search returns ids, and one wrong id here destroys the wrong mail. Google answers with an empty body.

ParamTypeRequiredDefaultDescription
messageIdsstringyesComma-separated message ids to delete permanently, up to 1000.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Add or remove labels on up to 1000 messages at once. Acts as the named mailbox owner. Marked as not changing things because labels are reversible. Google answers with an empty body on success and reports no per-message result, so confirm with gws_list_gmail_messages if it matters which ones changed. messageIds is comma-separated, from gws_list_gmail_messages.

ParamTypeRequiredDefaultDescription
addLabelIdsstringnonullOptional. Comma-separated label ids to add.
messageIdsstringyesComma-separated message ids, up to 1000.
removeLabelIdsstringnonullOptional. Comma-separated label ids to remove.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Save a new unsent draft in one person's mailbox. Acts as the named mailbox owner. Nothing is sent and nobody is emailed: the draft appears in their Drafts folder, and gws_send_gmail_draft is what puts it in front of a recipient. Marked as not changing things because it only adds a draft. To reply inside an existing conversation, pass threadId AND set the References and In-Reply-To headers in the message itself — Google requires both or the reply starts a new thread.

ParamTypeRequiredDefaultDescription
rawMessageBase64UrlstringyesThe whole email as an RFC 2822 message, base64url encoded. Build it as headers (To, From, Subject, and Content-Type for anything but plain text), then ONE blank line, then the body; then base64url-encode the result (standard base64 with - for + and _ for /, padding optional). The From address must be the mailbox owner or one of their verified send-as aliases.
threadIdstringnonullOptional. The thread id to attach the draft to; the message's References and In-Reply-To headers must match.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Create a label in one person's mailbox. Acts as the named mailbox owner. Marked as not changing things because it only adds a label; no message is touched. The body is Google's Label resource: name is required, and labelListVisibility (labelShow, labelShowIfUnread, labelHide), messageListVisibility (show, hide) and color are optional. A nested label is created by naming it with a slash, e.g. "Clients/Acme". Colours are only allowed on user labels and only from Google's fixed palette, which gws_get_gmail_label shows for an existing coloured label.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON Label resource, e.g. {"name":"Clients/Acme","labelListVisibility":"labelShow","messageListVisibility":"show"}.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Delete an unsent draft. Acts as the named mailbox owner. Marked as changing things because the draft is gone immediately: a draft does not go to Trash and there is no undo. Read it with gws_get_gmail_draft first if the text might be wanted. Nothing is emailed.

ParamTypeRequiredDefaultDescription
draftIdstringyesThe draft id to delete.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Delete a label. Acts as the named mailbox owner. Marked as changing things because it REMOVES THE LABEL FROM EVERY MESSAGE AND THREAD carrying it, in one act and with no undo: the mail survives, but any filing, filter or saved search that depended on that label stops matching. Check how many messages are affected with gws_get_gmail_label first — it reports the totals. Only user labels can be deleted; Google's system labels cannot.

ParamTypeRequiredDefaultDescription
labelIdstringyesThe label id to delete.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] PERMANENTLY delete one message. Acts as the named mailbox owner. Marked as changing things because the message is GONE: it does not go to Trash, it cannot be restored from there, and Google offers no undo. Use gws_trash_gmail_message unless permanent removal is specifically what was asked for — Trash keeps a message for 30 days and gws_untrash_gmail_message brings it back.

ParamTypeRequiredDefaultDescription
messageIdstringyesThe message id to delete permanently.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] PERMANENTLY delete a conversation and EVERY message in it. Acts as the named mailbox owner. Marked as changing things because the whole exchange is GONE: it does not go to Trash, it cannot be restored from there, and Google offers no undo. This is the widest-reaching delete in the family — a thread can hold years of correspondence, and one id removes all of it. Read the thread with gws_get_gmail_thread first to see what it actually contains, and prefer gws_trash_gmail_thread, which is reversible for 30 days.

ParamTypeRequiredDefaultDescription
threadIdstringyesThe thread id to delete permanently.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Download one attachment and get back a temporary link to it. Acts as the named mailbox owner. Read the message first with gws_get_gmail_message: each part carries the attachmentId, the filename and the mimeType, and this tool needs all three because Google's attachment endpoint returns no filename and no media type of its own. Attachment ids belong to one message and change when the message is re-fetched, so use a fresh one. The answer is a link, a suggested filename, the size and an expiry — not the file itself. Attachments above 50 MB are refused rather than downloaded. readTtlMinutes sets how long the link lasts, 15 minutes by default and 60 at most.

ParamTypeRequiredDefaultDescription
attachmentIdstringyesThe attachment id, from the message part in gws_get_gmail_message.
filenamestringyesThe file name to save the attachment under, from the same message part.
messageIdstringyesThe id of the message holding the attachment.
mimeTypestringyesThe attachment's media type, e.g. application/pdf, from the same message part.
readTtlMinutesintegernonullOptional. Minutes the download link stays valid: 15 by default, 60 at most.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Read one unsent draft. Acts as the named mailbox owner. format is one of minimal (ids and labels only), full (the parsed message, Google's default), raw (the whole RFC 2822 message base64url encoded) or metadata (headers without the body). Use raw when the draft is about to be rewritten and sent back through gws_update_gmail_draft.

ParamTypeRequiredDefaultDescription
draftIdstringyesThe draft id, from gws_list_gmail_drafts.
formatstringnonullOptional. minimal, full, raw or metadata.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Get one label, including its colour, its visibility settings and how many messages and threads carry it. Acts as the named mailbox owner. labelId comes from gws_list_gmail_labels.

ParamTypeRequiredDefaultDescription
labelIdstringyesThe label id, from gws_list_gmail_labels.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Read one message. Acts as the named mailbox owner. format is one of minimal (ids and labels), full (the parsed message with its parts, Google's default), raw (the whole RFC 2822 message base64url encoded) or metadata (headers only, no body). metadataHeaders is comma-separated and only honoured with format=metadata. This is also where an attachment's details live: each part carries the attachmentId, its filename and its mimeType, which are the three things gws_download_gmail_attachment needs.

ParamTypeRequiredDefaultDescription
formatstringnonullOptional. minimal, full, raw or metadata.
messageIdstringyesThe message id, from gws_list_gmail_messages.
metadataHeadersstringnonullOptional. Comma-separated header names, honoured only with format=metadata.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Get one person's mailbox summary — their Gmail address, how many messages and threads it holds, and its current historyId. Acts as the named mailbox owner. Read this first when starting a change feed: the historyId it returns is the starting point gws_list_gmail_history needs, and it is the only way to get one without already having read a message.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Read a whole conversation — every message in it, in order. Acts as the named mailbox owner. format is one of full (the parsed messages, Google's default), metadata (headers without bodies) or minimal (ids and labels). Google publishes NO raw format on this route, unlike gws_get_gmail_message: to get the raw RFC 2822 text of one message in the thread, read that message on its own. metadataHeaders is comma-separated and only honoured with format=metadata.

ParamTypeRequiredDefaultDescription
formatstringnonullOptional. full, metadata or minimal.
metadataHeadersstringnonullOptional. Comma-separated header names, honoured only with format=metadata.
threadIdstringyesThe thread id, from gws_list_gmail_threads or any message.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Import a message into one person's mailbox as if it had ARRIVED there. Acts as the named mailbox owner. Nobody is emailed. Marked as not changing things because it only adds a message. Unlike gws_insert_gmail_message, Gmail runs its spam classifier, applies the standard scanning and can thread the message with existing mail — which is what makes it the right choice for migrating a live mailbox and the wrong one for restoring an archive verbatim. neverMarkSpam overrides the classifier. processForCalendar adds any meeting invitation it finds to the person's calendar, so leave it off unless invitations really should be re-created. deleted files it as permanently deleted, visible only to a Vault administrator.

ParamTypeRequiredDefaultDescription
deletedbooleannonullOptional. File the message as permanently deleted, visible only in Google Vault.
internalDateSourcestringnonullOptional. receivedTime or dateHeader.
labelIdsstringnonullOptional. Comma-separated label ids to apply to the imported message.
neverMarkSpambooleannonullOptional. Never let the spam classifier mark this message as SPAM.
processForCalendarbooleannonullOptional. Add any meeting invitation in the message to the person's Google Calendar.
rawMessageBase64UrlstringyesThe whole email as an RFC 2822 message, base64url encoded. Build it as headers (To, From, Subject, and Content-Type for anything but plain text), then ONE blank line, then the body; then base64url-encode the result (standard base64 with - for + and _ for /, padding optional). The From address must be the mailbox owner or one of their verified send-as aliases.
threadIdstringnonullOptional. The thread id to attach the message to.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] File a message directly into one person's mailbox WITHOUT sending it. Acts as the named mailbox owner. Nobody is emailed: this is the migration tool, for putting mail from another system into Gmail. Marked as not changing things because it only adds a message. Gmail does not classify it, does not run it past the spam filter and does not stitch it into a thread — gws_import_gmail_message is the variant that does all three. internalDateSource decides the message's timestamp: receivedTime (when Google took it) or dateHeader (the Date header in the message itself). deleted files it as permanently deleted, visible only to a Vault administrator; leave it alone unless a Vault-only archive is what is wanted.

ParamTypeRequiredDefaultDescription
deletedbooleannonullOptional. File the message as permanently deleted, visible only in Google Vault.
internalDateSourcestringnonullOptional. receivedTime or dateHeader.
labelIdsstringnonullOptional. Comma-separated label ids to apply to the filed message.
rawMessageBase64UrlstringyesThe whole email as an RFC 2822 message, base64url encoded. Build it as headers (To, From, Subject, and Content-Type for anything but plain text), then ONE blank line, then the body; then base64url-encode the result (standard base64 with - for + and _ for /, padding optional). The From address must be the mailbox owner or one of their verified send-as aliases.
threadIdstringnonullOptional. The thread id to attach the message to.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] List one person's unsent drafts. Acts as the named mailbox owner. Each entry carries the draft id and a stub of its message; read the whole draft with gws_get_gmail_draft. q takes the same search syntax as the Gmail search box, e.g. from:someone@example.com is:unread. Pages up to 500 at a time.

ParamTypeRequiredDefaultDescription
includeSpamTrashbooleannonullOptional. Include drafts in SPAM and TRASH.
maxResultsintegernonullOptional. Drafts per page, up to 500. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
qstringnonullOptional. Gmail search query, the same syntax as the Gmail search box.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] List what changed in one person's mailbox since a known point — messages added or deleted, labels applied or removed. Acts as the named mailbox owner. startHistoryId is required and comes from gws_get_gmail_profile or from any message, thread or earlier history response. A history id older than roughly a week returns a 404, which means the feed is too old to continue and the mailbox has to be re-read from scratch; history ids rise over time but skip values, so they cannot be arithmetic on. historyTypes narrows the feed to messageAdded, messageDeleted, labelAdded or labelRemoved, comma-separated. No nextPageToken in the response means there is nothing further to read and the returned historyId can be kept for next time. Pages up to 500 at a time.

ParamTypeRequiredDefaultDescription
historyTypesstringnonullOptional. Comma-separated subset of messageAdded, messageDeleted, labelAdded, labelRemoved.
labelIdstringnonullOptional. Only report changes to messages carrying this label id.
maxResultsintegernonullOptional. Records per page, up to 500. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
startHistoryIdstringyesThe history id to read changes AFTER, from gws_get_gmail_profile or an earlier response.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] List every label in one person's mailbox, system and user-created alike. Acts as the named mailbox owner. Google returns them all in one response — this route does not page. Label ids, not label names, are what every other tool here takes, and the system ones are fixed strings such as INBOX, UNREAD, STARRED, SPAM, TRASH and SENT.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Search one person's messages. Acts as the named mailbox owner. Answers ids and thread ids only — read a message with gws_get_gmail_message. q takes the Gmail search box syntax, e.g. from:someone@example.com has:attachment newer_than:7d. labelIds is comma-separated and messages must carry ALL of them; ids come from gws_list_gmail_labels. SPAM and TRASH are excluded unless includeSpamTrash is true. Pages up to 500 at a time.

ParamTypeRequiredDefaultDescription
includeSpamTrashbooleannonullOptional. Include messages in SPAM and TRASH.
labelIdsstringnonullOptional. Comma-separated label ids; a message must carry all of them.
maxResultsintegernonullOptional. Messages per page, up to 500. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
qstringnonullOptional. Gmail search query, the same syntax as the Gmail search box.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Search one person's conversations. Acts as the named mailbox owner. A thread is the whole exchange rather than a single email, which makes this the better search when the question is about a conversation. Answers ids and snippets only — read one with gws_get_gmail_thread. q takes the Gmail search box syntax. labelIds is comma-separated and threads must carry ALL of them. Pages up to 500 at a time.

ParamTypeRequiredDefaultDescription
includeSpamTrashbooleannonullOptional. Include threads in SPAM and TRASH.
labelIdsstringnonullOptional. Comma-separated label ids; a thread must carry all of them.
maxResultsintegernonullOptional. Threads per page, up to 500. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
qstringnonullOptional. Gmail search query, the same syntax as the Gmail search box.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Add or remove labels on one message. Acts as the named mailbox owner. Marked as not changing things because labels are reversible: whatever this applies can be taken off again with the same tool. This is how a message is archived (remove INBOX), marked read (remove UNREAD), starred (add STARRED) or filed. Up to 100 labels each way per call. Removing TRASH here is not the same as gws_untrash_gmail_message and Google prefers the dedicated tool.

ParamTypeRequiredDefaultDescription
addLabelIdsstringnonullOptional. Comma-separated label ids to add, up to 100.
messageIdstringyesThe message id to relabel.
removeLabelIdsstringnonullOptional. Comma-separated label ids to remove, up to 100.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Add or remove labels on EVERY message in a conversation. Acts as the named mailbox owner. Marked as not changing things because labels are reversible. This is how a whole conversation is archived (remove INBOX) or filed at once; gws_modify_gmail_message is the per-message version. Up to 100 labels each way per call.

ParamTypeRequiredDefaultDescription
addLabelIdsstringnonullOptional. Comma-separated label ids to add, up to 100.
removeLabelIdsstringnonullOptional. Comma-separated label ids to remove, up to 100.
threadIdstringyesThe thread id to relabel.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Change some fields of a label and leave the rest as they are. Acts as the named mailbox owner. Marked as not changing things because it MERGES: a field left out of the body keeps its current value. This is the safe way to rename a label or recolour it. Use gws_update_gmail_label only when the whole label is being replaced deliberately.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON with only the fields to change, e.g. {"name":"Clients/Acme Corp"}.
labelIdstringyesThe label id to change.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Send an existing draft. Acts as the named mailbox owner, so the email arrives FROM that person. Marked as changing things because IT EMAILS A HUMAN: the message leaves the mailbox the moment this runs, reaches every recipient in its headers, and cannot be recalled. Read the draft with gws_get_gmail_draft and confirm the recipients before sending. The draft is removed from Drafts and the sent message appears in Sent.

ParamTypeRequiredDefaultDescription
draftIdstringyesThe draft id to send.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Send an email as one person. Acts as the named mailbox owner, so it arrives FROM that person and lands in their Sent folder. Marked as changing things because IT EMAILS A HUMAN: the message goes the moment this runs and cannot be recalled. To draft something for review instead, use gws_create_gmail_draft. To reply inside an existing conversation, pass threadId AND set the References and In-Reply-To headers in the message — Google needs both or the reply starts a new thread.

ParamTypeRequiredDefaultDescription
rawMessageBase64UrlstringyesThe whole email as an RFC 2822 message, base64url encoded. Build it as headers (To, From, Subject, and Content-Type for anything but plain text), then ONE blank line, then the body; then base64url-encode the result (standard base64 with - for + and _ for /, padding optional). The From address must be the mailbox owner or one of their verified send-as aliases.
threadIdstringnonullOptional. The thread id to reply within; the message's References and In-Reply-To headers must match.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Move a message to Trash. Acts as the named mailbox owner. Marked as not changing things because it is reversible: Gmail keeps a trashed message for 30 days and gws_untrash_gmail_message restores it with its labels intact. This is the tool to reach for when someone asks to delete an email; gws_delete_gmail_message is the permanent one.

ParamTypeRequiredDefaultDescription
messageIdstringyesThe message id to move to Trash.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Move a whole conversation to Trash. Acts as the named mailbox owner. Marked as not changing things because it is reversible: Gmail keeps trashed mail for 30 days and gws_untrash_gmail_thread restores the conversation. Every message in the thread moves, including ones the person sent.

ParamTypeRequiredDefaultDescription
threadIdstringyesThe thread id to move to Trash.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Take a message out of Trash and put it back where it was. Acts as the named mailbox owner. Marked as not changing things because it only restores. It works while the message is still in Trash — Gmail purges Trash after 30 days, and nothing here can bring back a message that has been purged or permanently deleted.

ParamTypeRequiredDefaultDescription
messageIdstringyesThe message id to restore from Trash.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Take a whole conversation out of Trash. Acts as the named mailbox owner. Marked as not changing things because it only restores. It works while the thread is still in Trash — Gmail purges Trash after 30 days, and nothing here can bring back a conversation that has been purged or permanently deleted.

ParamTypeRequiredDefaultDescription
threadIdstringyesThe thread id to restore from Trash.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Replace an unsent draft with a new message. Acts as the named mailbox owner. Marked as changing things because the replacement is WHOLESALE: the message supplied here becomes the entire draft, and whatever the person had written before it is gone with no undo. Read the current text first with gws_get_gmail_draft using format=raw, edit that, and send the result back. Nothing is emailed by this tool.

ParamTypeRequiredDefaultDescription
draftIdstringyesThe draft id to replace.
rawMessageBase64UrlstringyesThe whole email as an RFC 2822 message, base64url encoded. Build it as headers (To, From, Subject, and Content-Type for anything but plain text), then ONE blank line, then the body; then base64url-encode the result (standard base64 with - for + and _ for /, padding optional). The From address must be the mailbox owner or one of their verified send-as aliases.
threadIdstringnonullOptional. The thread id to attach the draft to; the message's References and In-Reply-To headers must match.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

[Google Workspace] Replace a label wholesale. Acts as the named mailbox owner. Marked as changing things because Google REPLACES the resource: a colour or a visibility setting left out of the body reverts to Google's default rather than staying as it was, so a rename written this way can silently un-colour a label and change where it appears. gws_patch_gmail_label is the merging version and is the right tool for almost every edit.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON Label resource carrying EVERY field the label should keep.
labelIdstringyesThe label id to replace.
userEmailstringyesThe mailbox owner's primary email address. Every call acts as this person.

Drive files

ToolPlanAccessSummary
gws_approve_drive_approvalProDestructiveSign off on a file, as the named person.
gws_cancel_drive_approvalProDestructiveCall off an approval on a file, for every reviewer at once.
gws_comment_drive_approvalProWriteAdd a comment to an approval WITHOUT deciding it, as the named person.
gws_copy_drive_fileProWriteCopy a file.
gws_create_drive_commentProWriteAdd a comment to a file, as the named file owner — it appears under their name and everyone who can see the file can read it.
gws_create_drive_fileProWriteCreate a folder, or an empty Google Doc, Sheet or Slides file, in one person's Drive.
gws_create_drive_permissionProDestructiveGRANT someone access to a file or folder.
gws_create_drive_replyProWriteReply to a comment on a file, as the named file owner.
gws_decline_drive_approvalProDestructiveRefuse to sign off on a file, as the named person.
gws_delete_drive_commentProDestructiveDelete a comment AND every reply on it.
gws_delete_drive_fileProDestructivePERMANENTLY delete a file or folder.
gws_delete_drive_permissionProDestructiveREVOKE someone's access to a file or folder.
gws_delete_drive_replyProDestructiveDelete one reply on a comment.
gws_delete_drive_revisionProDestructivePERMANENTLY delete one saved version of a file.
gws_download_drive_fileFreeRead-onlyDownload one ORDINARY file and get back a temporary link to it.
gws_empty_drive_trashProDestructivePERMANENTLY delete EVERYTHING in one person's Drive trash.
gws_export_drive_fileFreeRead-onlyConvert a GOOGLE DOC, SHEET, SLIDES or DRAWING to another format and get back a temporary link to the result.
gws_generate_drive_file_idsFreeRead-onlyReserve file ids ahead of time for one person's Drive.
gws_get_drive_aboutFreeRead-onlyGet one person's Drive account summary — their storage quota and how much of it is used, the maximum upload size, and the conversion maps that say which file types can be turned into which.
gws_get_drive_access_proposalFreeRead-onlyRead one request for access to a file — who asked, what role they want and what they said.
gws_get_drive_appFreeRead-onlyRead one installed Drive app — what it is called, what file types it opens and creates, and its icons.
gws_get_drive_approvalFreeRead-onlyRead one approval on a file, with each reviewer's decision and the messages recorded against it.
gws_get_drive_changes_start_tokenFreeRead-onlyGet the token a Drive change feed starts from for one person.
gws_get_drive_commentFreeRead-onlyRead one comment on a file, with its replies.
gws_get_drive_fileFreeRead-onlyRead one file's DETAILS — its name, type, size, owners, parent folders, timestamps and whether it is in the trash.
gws_get_drive_operationFreeRead-onlyCheck the state of a long-running Drive operation.
gws_get_drive_permissionFreeRead-onlyRead one sharing entry on a file — who it is for, what they can do, and when it expires.
gws_get_drive_replyFreeRead-onlyRead one reply on a comment.
gws_get_drive_revisionFreeRead-onlyRead one saved version of a file — when it was made, by whom, its size and whether it is pinned.
gws_list_drive_access_proposalsFreeRead-onlyList the outstanding requests for access to one file — who asked, what they asked for and any message they sent.
gws_list_drive_approvalsFreeRead-onlyList the approvals on one file — who was asked to sign off, what each of them decided, when it is due and whether the file is locked while it runs.
gws_list_drive_appsFreeRead-onlyList the third-party apps one person has installed in Drive — what can open or create files in their account.
gws_list_drive_changesFreeRead-onlyList what changed in one person's Drive since a known point — files added, edited, moved, trashed or removed.
gws_list_drive_commentsFreeRead-onlyList the comments on one file — who wrote each one, when, what it says, whether it is resolved, and the text it is anchored to.
gws_list_drive_file_labelsFreeRead-onlyList the labels applied to one file — the organisation's classification and metadata tags, with the values set on this file.
gws_list_drive_filesFreeRead-onlySearch one person's Drive.
gws_list_drive_permissionsFreeRead-onlyList who can reach one file or folder, and what each of them can do.
gws_list_drive_repliesFreeRead-onlyList the replies on one comment.
gws_list_drive_revisionsFreeRead-onlyList the saved versions of one file — who changed it and when.
gws_modify_drive_file_labelsProWriteAdd, change or take off the labels on one file.
gws_patch_drive_commentProWriteChange the text of one comment.
gws_patch_drive_fileProWriteChange a file's details — rename it, star it, change its description, or move it to the trash with {"trashed": true}.
gws_patch_drive_permissionProWriteChange an existing sharing entry — usually to raise or lower what someone can do, or to set or clear an expiry.
gws_patch_drive_replyProWriteChange the text of one reply.
gws_patch_drive_revisionProWriteChange a saved version's settings — pin it with {"keepForever": true} so Drive's automatic clean-up cannot remove it, or publish it.
gws_reassign_drive_approvalProDestructiveChange who is being asked to sign off on a file.
gws_resolve_drive_access_proposalProDestructiveSettle somebody's request for access to a file.
gws_start_drive_approvalProDestructiveAsk people to sign off on a file.

[Google Workspace] Sign off on a file, as the named person. Marked as changing things because the decision is recorded against them by name in the file's activity log, everyone on the approval is notified, and Google offers no way to withdraw it — the only route back is cancelling the whole approval with gws_cancel_drive_approval, which is the file owner's call and not the reviewer's. Read gws_get_drive_approval first to see what is actually being agreed to. message is carried into the notification and the log.

ParamTypeRequiredDefaultDescription
approvalIdstringyesThe approval id to sign off, from gws_list_drive_approvals.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
messagestringnonullOptional. A message recorded with the decision and included in the notification.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Call off an approval on a file, for every reviewer at once. Acts as the named file owner. Marked as changing things because the request ends immediately, every decision already given is discarded, and there is no way to resume it — a new approval has to be started with gws_start_drive_approval, which emails everybody again. Any lock the approval placed on the file is lifted.

ParamTypeRequiredDefaultDescription
approvalIdstringyesThe approval id to call off, from gws_list_drive_approvals.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
messagestringnonullOptional. A message recorded with the cancellation and included in the notification.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Add a comment to an approval WITHOUT deciding it, as the named person. Marked as not changing things because nothing is agreed, refused or removed — this is how to ask a question before signing off. The message is required, is notified to everyone on the approval and is kept in the file's activity log.

ParamTypeRequiredDefaultDescription
approvalIdstringyesThe approval id to comment on, from gws_list_drive_approvals.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
messagestringyesThe comment to record. Required — it is notified to everyone on the approval.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Copy a file. Acts as the named file owner, who owns the copy. Marked as not changing things because the original is untouched and the copy is new. Leave bodyJson alone to let Google name and place the copy; supply it to give the copy a name or put it in a particular folder. A folder cannot be copied this way — Drive copies files only.

ParamTypeRequiredDefaultDescription
bodyJsonstringnonullOptional. A JSON file resource naming the copy, e.g. {"name":"Copy of report","parents":["FOLDER_ID"]}.
copyCommentsbooleannonullOptional. Copy the comments on the original as well.
fileIdstringyesThe id of the file to copy.
ignoreDefaultVisibilitybooleannonullOptional. Ignore the organisation's default file visibility for the copy.
includeLabelsstringnonullOptional. Comma-separated label ids to include in the answer's label information.
includePermissionsForViewstringnonullOptional. An extra view's permissions to include. Only published is supported.
keepRevisionForeverbooleannonullOptional. Pin the copy's first version so Drive's automatic clean-up cannot remove it.
ocrLanguagestringnonullOptional. Language hint for text recognition on an imported image, as a two-letter code.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Add a comment to a file, as the named file owner — it appears under their name and everyone who can see the file can read it. Marked as not changing things because it only adds a comment, and gws_delete_drive_comment takes it off again. Anchor the comment to a particular part of a document with the anchor field; leave it out and the comment applies to the whole file.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON comment resource: content, and optionally anchor. Example: {"content":"Please check the totals on page 3."}
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Create a folder, or an empty Google Doc, Sheet or Slides file, in one person's Drive. Acts as the named file owner. Marked as not changing things because it only adds something new. This tool sets DETAILS ONLY — it cannot upload file contents, which is a separate Google upload service StackJack does not offer. What it does cover: a folder (mimeType application/vnd.google-apps.folder), an empty document (application/vnd.google-apps.document), spreadsheet (.spreadsheet), presentation (.presentation) or form (.form). Put the new file somewhere by naming its folder in parents.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON file resource: name, mimeType, and optionally parents (an array of folder ids) and description. Example: {"name":"Client reports","mimeType":"application/vnd.google-apps.folder","parents":["FOLDER_ID"]}
ignoreDefaultVisibilitybooleannonullOptional. Ignore the organisation's default file visibility for the new file.
includeLabelsstringnonullOptional. Comma-separated label ids to include in the answer's label information.
includePermissionsForViewstringnonullOptional. An extra view's permissions to include. Only published is supported.
keepRevisionForeverbooleannonullOptional. Pin the first version so Drive's automatic clean-up cannot remove it.
ocrLanguagestringnonullOptional. Language hint for text recognition on an imported image, as a two-letter code.
useContentAsIndexableTextbooleannonullOptional. Use the uploaded content as indexable text.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] GRANT someone access to a file or folder. Acts as the named file owner. Marked as changing things for two reasons: it hands out access to data, and IT EMAILS A HUMAN — Google notifies the person by default when sharing with a user or a group, and that email cannot be unsent. Pass sendNotificationEmail false to share quietly, which Google allows for users and groups but not for an ownership transfer. type is user, group, domain or anyone, and anyone makes the file reachable by link to everybody who has it. transferOwnership hands the file over and DOWNGRADES the current owner to a writer; Google requires it to be set as an acknowledgement of that. Sharing a folder shares everything inside it.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON permission resource: type (user, group, domain, anyone), role (owner, organizer, fileOrganizer, writer, commenter, reader) and, for a user or group, emailAddress. Example: {"type":"user","role":"reader","emailAddress":"someone@example.com"}
emailMessagestringnonullOptional. A plain-text message to include in that email.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
moveToNewOwnersRootbooleannonullOptional. On an ownership transfer of a file that is not on a shared drive, move it to the new owner's My Drive root and take it out of every folder it was in.
sendNotificationEmailbooleannonullOptional. Whether to email the person. Google's default is true for users and groups, and it cannot be turned off for an ownership transfer.
transferOwnershipbooleannonullOptional. Hand ownership over and downgrade the current owner to a writer.
useDomainAdminAccessbooleannonullOptional. Act as a domain administrator, for a shared drive.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Reply to a comment on a file, as the named file owner. Marked as not changing things because it only adds a reply, and gws_delete_drive_reply takes it off again. An action of resolve settles the whole thread and reopen puts it back, so this is also how a comment gets marked as dealt with; a reply carrying an action still needs its own content if there is anything to say.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON reply resource: content, and optionally action set to resolve or reopen. Example: {"content":"Fixed, thanks.","action":"resolve"}
commentIdstringyesThe comment id, from gws_list_drive_comments.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Refuse to sign off on a file, as the named person. Marked as changing things for the same reason approving is: the refusal is recorded against them by name in the file's activity log, everyone on the approval is notified, and Google offers no way to withdraw it. message is carried into the notification and the log, and is where the reason belongs.

ParamTypeRequiredDefaultDescription
approvalIdstringyesThe approval id to refuse, from gws_list_drive_approvals.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
messagestringnonullOptional. A message recorded with the decision and included in the notification.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Delete a comment AND every reply on it. Acts as the named file owner. Marked as changing things because the whole thread goes, including replies written by other people, and Google offers no undo. Read it with gws_get_drive_comment first if any of it might be wanted. To settle a thread instead of destroying it, reply with an action of resolve through gws_create_drive_reply.

ParamTypeRequiredDefaultDescription
commentIdstringyesThe comment id to delete, along with all of its replies.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] PERMANENTLY delete a file or folder. Acts as the named file owner. Marked as changing things because the file SKIPS THE TRASH: it is gone the moment this runs, it is not in Trash to restore, and Google offers no undo. Deleting a folder takes everything inside it. The reversible choice is gws_patch_drive_file with a body of {"trashed": true}, which puts the file in Trash where Drive keeps it for 30 days.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe id of the file to delete permanently.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] REVOKE someone's access to a file or folder. Acts as the named file owner. Marked as changing things because the person loses the file the moment this runs, with no warning to them and no undo — the sharing has to be granted again from scratch with gws_create_drive_permission, which emails them. Read gws_list_drive_permissions first: removing the entry of type anyone turns off link sharing for everybody at once, and removing one on a folder takes away everything inside it. To reduce what someone can do without cutting them off, use gws_patch_drive_permission.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
permissionIdstringyesThe permission id to revoke, from gws_list_drive_permissions.
useDomainAdminAccessbooleannonullOptional. Act as a domain administrator, for a shared drive.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Delete one reply on a comment. Acts as the named file owner. Marked as changing things because the reply is gone with no undo, and it may have been written by somebody else. The comment it was on survives.

ParamTypeRequiredDefaultDescription
commentIdstringyesThe comment id, from gws_list_drive_comments.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
replyIdstringyesThe reply id to delete.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] PERMANENTLY delete one saved version of a file. Acts as the named file owner. Marked as changing things because that version of the contents is gone with no undo — the file itself survives, but what it looked like at that point does not, and it cannot be restored from the trash. Read gws_list_drive_revisions first to be sure which version is which.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
revisionIdstringyesThe revision id to delete permanently, from gws_list_drive_revisions.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Download one ORDINARY file and get back a temporary link to it. Acts as the named file owner, and files on shared drives work. Use this for a PDF, image, video, zip or Office document. A Google Doc, Sheet or Slides file has no contents of its own and must go through gws_export_drive_file instead — check the file's mimeType with gws_get_drive_file if unsure, since anything starting application/vnd.google-apps is Google-native. The answer is a link, a suggested filename, the size and an expiry, not the file itself. readTtlMinutes sets how long the link lasts, 15 minutes by default and 60 at most.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe id of the file to download.
readTtlMinutesintegernonullOptional. Minutes the download link stays valid: 15 by default, 60 at most.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] PERMANENTLY delete EVERYTHING in one person's Drive trash. Acts as the named file owner. Marked as changing things because every trashed file goes at once, none of it is recoverable, and Google offers no undo — including anything trashed by mistake and not yet noticed. Read what is there first with gws_list_drive_files and a query of trashed = true. Pass driveId to empty one shared drive's trash instead of the person's own.

ParamTypeRequiredDefaultDescription
driveIdstringnonullOptional. A shared drive id, to empty that drive's trash instead.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Convert a GOOGLE DOC, SHEET, SLIDES or DRAWING to another format and get back a temporary link to the result. Acts as the named file owner. mimeType is required and is what to convert to — the common ones are application/pdf, application/vnd.openxmlformats-officedocument.wordprocessingml.document for Word, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet for Excel, application/vnd.openxmlformats-officedocument.presentationml.presentation for PowerPoint, text/csv and text/plain. Not every pairing is allowed: gws_get_drive_about returns the exportFormats map, which is the authoritative list. Use this for Google-native files only; an ordinary PDF, image or Office file goes through gws_download_drive_file. If Google answers with a redirect the call fails with status 302 rather than following it, which normally means the file is too large to export in one piece. The answer is a link, a suggested filename, the size and an expiry. readTtlMinutes sets how long the link lasts, 15 minutes by default and 60 at most.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe id of the Google-native file to convert.
mimeTypestringyesThe media type to convert to, e.g. application/pdf or text/csv.
readTtlMinutesintegernonullOptional. Minutes the download link stays valid: 15 by default, 60 at most.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Reserve file ids ahead of time for one person's Drive. Acts as the named file owner. Nothing is created — these are ids to use later, so a create that has to be retried cannot leave two copies behind. type is files or shortcuts, and shortcuts only work in the drive space.

ParamTypeRequiredDefaultDescription
countintegernonullOptional. How many ids to return. Google's default is 10 and it enforces its own ceiling.
spacestringnonullOptional. drive or appDataFolder. Google's default is drive.
typestringnonullOptional. files or shortcuts. Google's default is files.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Get one person's Drive account summary — their storage quota and how much of it is used, the maximum upload size, and the conversion maps that say which file types can be turned into which. Acts as the named file owner. The exportFormats part of the answer is the authoritative list of what gws_export_drive_file will accept for a given kind of file, and importFormats is its opposite. fields narrows the answer: pass storageQuota on its own for a quota check, or leave it alone to get everything.

ParamTypeRequiredDefaultDescription
fieldsstringnonullOptional. Comma-separated field selector, e.g. storageQuota,exportFormats. Everything is returned when this is left alone.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Read one request for access to a file — who asked, what role they want and what they said. Acts as the named file owner. The proposal id comes from gws_list_drive_access_proposals.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
proposalIdstringyesThe proposal id, from gws_list_drive_access_proposals.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Read one installed Drive app — what it is called, what file types it opens and creates, and its icons. Acts as the named file owner. The app id comes from gws_list_drive_apps.

ParamTypeRequiredDefaultDescription
appIdstringyesThe app id, from gws_list_drive_apps.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Read one approval on a file, with each reviewer's decision and the messages recorded against it. Acts as the named file owner. The approval id comes from gws_list_drive_approvals.

ParamTypeRequiredDefaultDescription
approvalIdstringyesThe approval id, from gws_list_drive_approvals.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Get the token a Drive change feed starts from for one person. Acts as the named file owner. Read this BEFORE the work whose effects are to be followed: it names the present moment, and gws_list_drive_changes reports what happened after it. Pass driveId to follow one shared drive instead of the person's whole account.

ParamTypeRequiredDefaultDescription
driveIdstringnonullOptional. A shared drive id, to scope the token to that drive.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Read one comment on a file, with its replies. Acts as the named file owner. The comment id comes from gws_list_drive_comments.

ParamTypeRequiredDefaultDescription
commentIdstringyesThe comment id, from gws_list_drive_comments.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
includeDeletedbooleannonullOptional. Return the comment even if it was deleted, with its text stripped out.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Read one file's DETAILS — its name, type, size, owners, parent folders, timestamps and whether it is in the trash. Acts as the named file owner. This is metadata only: the contents come from gws_download_drive_file for an ordinary file, or gws_export_drive_file for a Google Doc, Sheet or Slides file. The mimeType in the answer is what tells the two apart — anything starting application/vnd.google-apps is a Google-native file.

ParamTypeRequiredDefaultDescription
acknowledgeAbusebooleannonullOptional. Acknowledges the risk of a file Google has flagged as malware. Only meaningful on a download.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
includeLabelsstringnonullOptional. Comma-separated label ids to include in the file's label information.
includePermissionsForViewstringnonullOptional. An extra view's permissions to include. Only published is supported.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Check the state of a long-running Drive operation. Acts as the named file owner. Drive hands back an operation name when a request is too big to answer at once; pass that name here to see whether it has finished and what it produced. Pass only the id that follows operations/ — Google returns the full resource name, so a value like operations/abc123 must be sent as abc123 or the call answers 404. An operation that is still running answers done: false.

ParamTypeRequiredDefaultDescription
operationNamestringyesThe operation id — the part after operations/ in the name Drive returned, not the whole name.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Read one sharing entry on a file — who it is for, what they can do, and when it expires. Acts as the named file owner. The permission id comes from gws_list_drive_permissions.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
permissionIdstringyesThe permission id, from gws_list_drive_permissions.
useDomainAdminAccessbooleannonullOptional. Ask as a domain administrator, for a shared drive.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Read one reply on a comment. Acts as the named file owner. The reply id comes from gws_list_drive_replies.

ParamTypeRequiredDefaultDescription
commentIdstringyesThe comment id, from gws_list_drive_comments.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
includeDeletedbooleannonullOptional. Return the reply even if it was deleted, with its text stripped out.
replyIdstringyesThe reply id, from gws_list_drive_replies.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Read one saved version of a file — when it was made, by whom, its size and whether it is pinned. Acts as the named file owner. The revision id comes from gws_list_drive_revisions.

ParamTypeRequiredDefaultDescription
acknowledgeAbusebooleannonullOptional. Acknowledges the risk of a file Google has flagged as malware.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
revisionIdstringyesThe revision id, from gws_list_drive_revisions.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List the outstanding requests for access to one file — who asked, what they asked for and any message they sent. Acts as the named file owner. These are people asking to be let in, which is the opposite of an approval, where the owner asks people to sign off. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
pageSizeintegernonullOptional. Proposals per page, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List the approvals on one file — who was asked to sign off, what each of them decided, when it is due and whether the file is locked while it runs. Acts as the named file owner. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
pageSizeintegernonullOptional. Approvals per page, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List the third-party apps one person has installed in Drive — what can open or create files in their account. Acts as the named file owner. NEEDS ITS OWN PERMISSION BLOCK: Google accepts a single scope on this one route, and it is not in the connector's main list, so an administrator has to paste the "Drive apps" block from the connector's setup guide before this tool works — without it the call is refused. gws_get_drive_app, which reads one app by id, needs nothing extra. Filter to the apps that handle a particular kind of file by passing appFilterExtensions (comma-separated file extensions) or appFilterMimeTypes (comma-separated media types).

ParamTypeRequiredDefaultDescription
appFilterExtensionsstringnonullOptional. Comma-separated file extensions; only apps that can open one of them are returned.
appFilterMimeTypesstringnonullOptional. Comma-separated media types, filtering the same way.
languageCodestringnonullOptional. Language code for the returned app names, e.g. en.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List what changed in one person's Drive since a known point — files added, edited, moved, trashed or removed. Acts as the named file owner. pageToken is required and is either a start token from gws_get_drive_changes_start_token or the nextPageToken of an earlier page. Shared drive items are included; set restrictToMyDrive to limit the feed to the person's own My Drive. When the answer carries newStartPageToken instead of nextPageToken there is nothing further to read, and that token is the one to keep for next time. Pages up to 1000 at a time.

ParamTypeRequiredDefaultDescription
driveIdstringnonullOptional. A shared drive id, to follow only that drive.
includeCorpusRemovalsbooleannonullOptional. Include changes that removed a file from the searched collection.
includeLabelsstringnonullOptional. Comma-separated label ids to include in each item's label information.
includePermissionsForViewstringnonullOptional. An extra view's permissions to include. Only published is supported.
includeRemovedbooleannonullOptional. Include items removed from the person's view. Google's default is true.
pageSizeintegernonullOptional. Changes per page, up to 1000. Google's default is 100.
pageTokenstringyesThe token to read changes after, from gws_get_drive_changes_start_token or an earlier page.
restrictToMyDrivebooleannonullOptional. Limit the feed to the person's own My Drive hierarchy.
spacesstringnonullOptional. Comma-separated: drive, appDataFolder.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List the comments on one file — who wrote each one, when, what it says, whether it is resolved, and the text it is anchored to. Acts as the named file owner. Replies come back with each comment, and gws_list_drive_replies reads them on their own. includeDeleted brings back comments somebody removed, with their text stripped out. startModifiedTime narrows the answer to comments touched at or after a timestamp, which is how to poll for new activity. Pages up to 100 at a time, and Google returns 20 when no size is given.

ParamTypeRequiredDefaultDescription
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
includeDeletedbooleannonullOptional. Include deleted comments, whose text Google strips out.
pageSizeintegernonullOptional. Comments per page, up to 100. Google's default is 20.
pageTokenstringnonullOptional. Page token from a previous response.
startModifiedTimestringnonullOptional. RFC 3339 timestamp; only comments modified at or after it are returned.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List the labels applied to one file — the organisation's classification and metadata tags, with the values set on this file. Acts as the named file owner. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
maxResultsintegernonullOptional. Labels per page, up to 100. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Search one person's Drive. Acts as the named file owner, and files on shared drives are included. q is Drive's search syntax: a field, an operator and a value, joined with and or or — for example name contains 'invoice' and trashed = false, or mimeType = 'application/vnd.google-apps.folder', or 'FOLDER_ID' in parents, or modifiedTime > '2026-01-01T00:00:00'. Quote string values with single quotes. corpora chooses what is searched: user (Google's default — everything the person created or opened in My Drive, plus what was shared directly with them in Shared with me), drive (one shared drive, and driveId is then required), domain (files shared across the organisation) or allDrives — prefer user or drive, because allDrives is slower. Shared drive content is included unless corpora is set to user, and corpora is the only way to leave it out here: unlike gws_list_drive_changes, this route has no restrictToMyDrive. orderBy sorts, comma-separated, each key reversible with desc, and Google publishes these eleven: createdTime, folder, modifiedByMeTime, modifiedTime, name, name_natural, quotaBytesUsed, recency, sharedWithMeTime, starred, viewedByMeTime. name sorts alphabetically, so 1, 12, 2, 22; name_natural sorts numerically, so 1, 2, 12, 22. Pages up to 1000 at a time.

ParamTypeRequiredDefaultDescription
corporastringnonullOptional. user, drive, domain or allDrives. Set it to user to leave shared drive content out.
driveIdstringnonullOptional. The shared drive to search; required when corpora is drive.
includeLabelsstringnonullOptional. Comma-separated label ids to include in each file's label information.
includePermissionsForViewstringnonullOptional. An extra view's permissions to include. Only published is supported.
orderBystringnonullOptional. Comma-separated sort keys, e.g. modifiedTime desc,name.
pageSizeintegernonullOptional. Files per page, up to 1000. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
qstringnonullOptional. Drive search query, e.g. name contains 'report' and trashed = false.
spacesstringnonullOptional. Comma-separated: drive, appDataFolder.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List who can reach one file or folder, and what each of them can do. Acts as the named file owner. Files on shared drives are included. Each entry carries a type (user, group, domain or anyone) and a role (owner, organizer, fileOrganizer, writer, commenter or reader). An entry of type anyone means the file is reachable by link. useDomainAdminAccess lets a domain administrator read the sharing on a shared drive they do not personally belong to. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
includePermissionsForViewstringnonullOptional. An extra view's permissions to include. Only published is supported.
pageSizeintegernonullOptional. Permissions per page, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
useDomainAdminAccessbooleannonullOptional. Ask as a domain administrator. Google honours it only when the id names a shared drive in a domain the person administers.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List the replies on one comment. Acts as the named file owner. Each reply carries its author, its text and, where one was recorded, the action that resolved or reopened the thread. Pages up to 100 at a time, and Google returns 20 when no size is given.

ParamTypeRequiredDefaultDescription
commentIdstringyesThe comment id, from gws_list_drive_comments.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
includeDeletedbooleannonullOptional. Include deleted replies, whose text Google strips out.
pageSizeintegernonullOptional. Replies per page, up to 100. Google's default is 20.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] List the saved versions of one file — who changed it and when. Acts as the named file owner. A version marked keepForever survives Drive's automatic clean-up; the rest can be removed by Google over time. Pages up to 1000 at a time, and Google returns 200 when no size is given.

ParamTypeRequiredDefaultDescription
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
pageSizeintegernonullOptional. Versions per page, up to 1000. Google's default is 200.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Add, change or take off the labels on one file. Acts as the named file owner. Marked as not changing things because a label can be put back: nothing about the file itself is touched, only its classification. Read what is on the file first with gws_list_drive_file_labels.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON request with a labelModifications array, each entry naming a labelId and either its fieldModifications or removeLabel. Example: {"labelModifications":[{"labelId":"LABEL_ID","removeLabel":true}]}
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Change the text of one comment. Acts as the named file owner. Marked as not changing things because the change MERGES: only the fields supplied are touched. Read the current text with gws_get_drive_comment first if it is being edited rather than replaced. Resolving a thread is not done here — it is a reply with an action of resolve, through gws_create_drive_reply.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON comment resource with only the fields to change, e.g. {"content":"Updated note."}
commentIdstringyesThe comment id to change.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Change a file's details — rename it, star it, change its description, or move it to the trash with {"trashed": true}. Acts as the named file owner. Marked as not changing things because the change MERGES: only the fields supplied are touched and everything else is left alone. This is the reversible way to get rid of a file, and gws_delete_drive_file is the permanent one. To MOVE a file, name its new folder in addParents and its old one in removeParents on the same call. Like creating, this sets details only and cannot replace file contents.

ParamTypeRequiredDefaultDescription
addParentsstringnonullOptional. Comma-separated folder ids to add the file to.
bodyJsonstringyesA JSON file resource with only the fields to change, e.g. {"name":"Renamed.pdf"} or {"trashed":true} or {"starred":true}.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
includeLabelsstringnonullOptional. Comma-separated label ids to include in the answer's label information.
includePermissionsForViewstringnonullOptional. An extra view's permissions to include. Only published is supported.
keepRevisionForeverbooleannonullOptional. Pin the new version so Drive's automatic clean-up cannot remove it.
ocrLanguagestringnonullOptional. Language hint for text recognition on an imported image, as a two-letter code.
removeParentsstringnonullOptional. Comma-separated folder ids to take the file out of.
useContentAsIndexableTextbooleannonullOptional. Use the uploaded content as indexable text.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Change an existing sharing entry — usually to raise or lower what someone can do, or to set or clear an expiry. Acts as the named file owner. Marked as not changing things because the change MERGES: only the fields supplied are touched, nobody loses access unless the role itself is lowered, and the previous role can be set back. ONE BRANCH IS DIFFERENT: with transferOwnership true the file is handed to the named person and the current owner is DOWNGRADED TO A WRITER — Google requires the flag "as an acknowledgement of the side effect" — and from then on only the NEW owner can reverse it, so this connection may no longer be able to. Taking access away entirely is gws_delete_drive_permission. removeExpiration clears an expiry rather than setting one.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON permission resource with only the fields to change, e.g. {"role":"writer"} or {"expirationTime":"2026-12-31T23:59:59Z"}.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
permissionIdstringyesThe permission id to change, from gws_list_drive_permissions.
removeExpirationbooleannonullOptional. Clear the permission's expiry.
transferOwnershipbooleannonullOptional. Hand ownership over and downgrade the current owner to a writer.
useDomainAdminAccessbooleannonullOptional. Act as a domain administrator, for a shared drive.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Change the text of one reply. Acts as the named file owner. Marked as not changing things because the change MERGES: only the fields supplied are touched.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON reply resource with only the fields to change, e.g. {"content":"Corrected."}
commentIdstringyesThe comment id, from gws_list_drive_comments.
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
replyIdstringyesThe reply id to change.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Change a saved version's settings — pin it with {"keepForever": true} so Drive's automatic clean-up cannot remove it, or publish it. Acts as the named file owner. Marked as not changing things because the change MERGES and every setting it touches can be set back. Google keeps at most 200 pinned versions per file.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON revision resource with only the fields to change, e.g. {"keepForever":true} or {"published":true}.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
revisionIdstringyesThe revision id to change, from gws_list_drive_revisions.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Change who is being asked to sign off on a file. Acts as the named file owner. EVERY REVIEWER ADDED IS EMAILED, and that email cannot be unsent. Marked as changing things because replaceReviewers takes people OFF the approval and DISCARDS any decision they had already given, with no undo. addReviewers only adds, which is the safer of the two. Read gws_get_drive_approval first to see who is on it and what they have decided.

ParamTypeRequiredDefaultDescription
approvalIdstringyesThe approval id to change, from gws_list_drive_approvals.
bodyJsonstringyesA JSON request with addReviewers and/or replaceReviewers arrays, and optionally message. Example: {"addReviewers":[{"emailAddress":"director@example.com"}],"message":"Adding a second reviewer."}
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Settle somebody's request for access to a file. Acts as the named file owner. Marked as changing things because ACCEPT GRANTS ACCESS to the requester at the role given, which is the same act as gws_create_drive_permission, and either answer closes the request for good — a person who is denied has to ask again. role is an array and Google requires it when the action is ACCEPT. sendNotification decides whether the requester is emailed the outcome. Read the request with gws_get_drive_access_proposal before answering it.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON request: action (ACCEPT or DENY, required), role (an array, required for ACCEPT), and optionally view and sendNotification. Example: {"action":"ACCEPT","role":["reader"],"sendNotification":true}
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
proposalIdstringyesThe proposal id to settle, from gws_list_drive_access_proposals.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

[Google Workspace] Ask people to sign off on a file. Acts as the named file owner, so the request comes from them. EVERY REVIEWER NAMED IS EMAILED as soon as this runs, and that email cannot be unsent — check the addresses before sending. Marked as changing things for that reason: nothing is deleted, and the request itself can be called off with gws_cancel_drive_approval, but the message has already reached the reviewers by then. reviewerEmails is required. lockFile stops anyone editing the file while the approval runs, and fileContentChangeBehavior decides what happens if it is edited anyway: RESET_APPROVAL throws away the decisions already given, NO_APPROVAL_ACTION keeps them.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA JSON request: reviewerEmails (an array, required), and optionally message, dueTime, lockFile and fileContentChangeBehavior (RESET_APPROVAL or NO_APPROVAL_ACTION). Example: {"reviewerEmails":["manager@example.com"],"message":"Please review before Friday.","lockFile":true}
fieldsstringnonullOptional. Comma-separated field selector, e.g. id,content,author. Everything is returned when this is left alone.
fileIdstringyesThe Drive file id, from gws_list_drive_files or a Drive URL.
userEmailstringyesThe file owner's primary email address. Every call acts as this person.

Calendar

ToolPlanAccessSummary
gws_clear_calendarProDestructiveDelete EVERY event on the named person's primary calendar.
gws_create_calendarProWriteCreate a new secondary calendar owned by the named person.
gws_create_calendar_acl_ruleProDestructiveShare a calendar with someone.
gws_create_calendar_eventProDestructiveCreate an event on a calendar.
gws_create_calendar_list_entryProWriteAdd an existing calendar to one person's calendar list.
gws_delete_calendarProDestructiveDelete a secondary calendar.
gws_delete_calendar_acl_ruleProDestructiveRemove a calendar sharing rule.
gws_delete_calendar_eventProDestructiveDelete an event.
gws_delete_calendar_list_entryProWriteRemove a calendar from one person's calendar list.
gws_get_calendarFreeRead-onlyRead a calendar's own metadata — its title, description, location and time zone.
gws_get_calendar_acl_ruleFreeRead-onlyRead one calendar sharing rule.
gws_get_calendar_colorsFreeRead-onlyRead the palette behind every colorId in Calendar — the numbered background and foreground values, for calendars and for events separately.
gws_get_calendar_eventFreeRead-onlyRead one event in full — its times, attendees and their responses, organizer, conferencing details, reminders and recurrence rule.
gws_get_calendar_list_entryFreeRead-onlyRead one entry from a person's calendar list.
gws_get_calendar_settingFreeRead-onlyRead one of a person's Calendar preferences by id.
gws_import_calendar_eventProWriteFile a private copy of an event that already exists somewhere else — the migration tool.
gws_list_calendar_acl_rulesFreeRead-onlyList who a calendar is shared with and at what access role.
gws_list_calendar_event_instancesFreeRead-onlyList the separate occurrences of one recurring event, including the ones that were moved or cancelled on their own.
gws_list_calendar_eventsFreeRead-onlyList the events on a calendar.
gws_list_calendar_listFreeRead-onlyList the calendars in one person's own calendar list — the ones they own and the ones they subscribe to.
gws_list_calendar_settingsFreeRead-onlyList one person's own Calendar preferences — their time zone, which day their week starts on, their default event length, their working-hours and notification choices.
gws_move_calendar_eventProDestructiveMove an event to another calendar, which CHANGES ITS ORGANIZER.
gws_patch_calendarProWriteChange some of a calendar's own details, leaving the rest alone.
gws_patch_calendar_acl_ruleProWriteChange some fields of a calendar sharing rule, leaving the rest alone.
gws_patch_calendar_eventProWriteChange some fields of an event, leaving the rest alone.
gws_patch_calendar_list_entryProWriteChange some of one person's display settings for a calendar, leaving the rest alone.
gws_query_calendar_free_busyFreeRead-onlyAsk when a set of calendars is busy over one window.
gws_quick_add_calendar_eventProDestructiveCreate an event from a plain sentence, which Google parses for the title, date and time — for example "Lunch with Sam Tuesday 1pm".
gws_transfer_calendar_ownershipProDestructiveHand a secondary calendar to a different person in the same organization.
gws_update_calendarProDestructiveReplace a calendar's own details wholesale.
gws_update_calendar_acl_ruleProDestructiveReplace a calendar sharing rule wholesale.
gws_update_calendar_eventProDestructiveReplace an event wholesale.
gws_update_calendar_list_entryProDestructiveReplace one person's display settings for a calendar wholesale.

[Google Workspace] Delete EVERY event on the named person's primary calendar. Acts as that person. Marked as changing things because it is the widest destruction in this group: every meeting, every appointment and every recurring series on their main calendar is gone in one act, past and future alike, and Google offers no undo. The calendar itself survives, empty. Google publishes this route for the primary calendar only: pass the primary calendar's own id, or the literal word primary, and a secondary calendar's id is refused. To remove a secondary calendar use gws_delete_calendar; to delete one event use gws_delete_calendar_event. Read what is there first with gws_list_calendar_events.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe primary calendar's id, or the literal word primary. Google publishes this route for a primary calendar only; a secondary calendar's id is refused.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Create a new secondary calendar owned by the named person. Acts as that person. summary is the only required field; description, location and timeZone are optional. Google mints the id and returns it — that id is what every other tool in this group needs. Nothing is emailed and nothing existing is changed; share it afterwards with gws_create_calendar_acl_rule.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Calendar as JSON. summary is required; description, location and timeZone are optional.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Share a calendar with someone. Acts as the named calendar owner. Marked as changing things because it GRANTS ACCESS to somebody's calendar, and because with sendNotifications set to true it EMAILS THEM to say so. sendNotifications defaults to false here, which grants the access and tells nobody; Google's own default on this route is true and StackJack inverts it. The body is an AclRule: scope with a type of user, group, domain or default, a value for anything but default, and a role. Google publishes six roles: none (no access at all), freeBusyReader (busy times only, no titles), reader (sees every event, but private events come back with their details hidden), writerWithoutPrivateAccess (can see and change events, with private event details still hidden), writer (sees and changes everything including private event details, and can read the sharing rules) and owner (everything writer can do, plus changing other people's access — Google's words are "manager access" with "the additional ability to modify access levels of other users", and it warns that the owner ROLE is not the calendar's single data owner). Check who already has access with gws_list_calendar_acl_rules first.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesAn AclRule as JSON: scope (type and, for anything but default, value) and role — none, freeBusyReader, reader, writerWithoutPrivateAccess, writer or owner.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
sendNotificationsbooleannonullOptional. Whether to email the person whose access this changes. Defaults to false, so nobody is told; pass true to email the grantee. Google's own default on this route is true, and StackJack inverts it so that emailing a human is always something the caller asked for.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Create an event on a calendar. Acts as the named calendar owner, so the event is organized by that person. Marked as changing things because IT CAN EMAIL HUMANS: with attendees on the event and sendUpdates set to all or externalOnly, Google sends every one of them a real invitation that cannot be recalled. sendUpdates defaults to none, which puts the event on the calendar and tells nobody — but Google warns that none can have significant adverse effects, including events failing to sync to external calendars or being lost altogether for some users, and it points migration work at the import method: to copy events that already exist somewhere else, use gws_import_calendar_event rather than this tool. The body needs start and end, each as either date (all-day) or dateTime with timeZone; summary, description, location, attendees and recurrence are optional. Set conferenceDataVersion to 1 to honour conferenceData in the body, including a createRequest that mints a new Meet link — at 0 Google ignores it silently.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesAn Event as JSON. start and end are required; summary, attendees, recurrence and the rest are optional.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
conferenceDataVersionintegernonullOptional. 1 honours conferenceData in the body, including a new Meet link; 0 ignores it. Google's default is 0.
eventLabelVersionintegernonullOptional. 1 processes eventLabelId and ignores colorId; 0 processes colorId. Google's default is 0.
maxAttendeesintegernonullOptional. Cap how many attendees come back in the response.
sendUpdatesstringnonullOptional. Who Google emails about this change: all, externalOnly or none. Defaults to none, which notifies nobody. For copying events that already exist somewhere else, Google points at the import method instead — gws_import_calendar_event here. Pass all or externalOnly when the event has guests who need to know about it.
supportsAttachmentsbooleannonullOptional. Declare that the caller handles event attachments.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Add an existing calendar to one person's calendar list. Acts as the named person. This is a subscription, not a new calendar: use gws_create_calendar to make one. The body needs the calendar's id and may carry that person's own display choices — summaryOverride, colorId, hidden, selected, defaultReminders. It grants nothing: the person must already have access through a sharing rule, or Google refuses. Nothing is emailed and nothing is destroyed.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA CalendarListEntry as JSON. id is required; the display fields are optional.
colorRgbFormatbooleannonullOptional. Write the colour as foregroundColor/backgroundColor rather than colorId.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Delete a secondary calendar. Acts as the named calendar owner. Marked as changing things because the calendar AND EVERY EVENT ON IT are destroyed, every sharing rule on it goes with them, and it disappears from the calendar list of everybody who subscribed. There is no undo and no trash. Google publishes this route for secondary calendars only: a primary calendar is emptied with gws_clear_calendar instead. If the goal is only to stop one person seeing it, gws_delete_calendar_list_entry does that and destroys nothing.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe secondary calendar's id, from gws_list_calendar_list.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Remove a calendar sharing rule. Acts as the named calendar owner. Marked as changing things because the person LOSES THEIR ACCESS to the calendar the moment this runs, and anything of theirs that depended on seeing it — a shared view, a scheduling assistant, a room-booking workflow — stops working with no warning to them. This route takes no notification parameter, so the API offers no way to warn them — and Google confirms the same from the other side on the sharing writes, whose sendNotifications says "Note that there are no notifications on access removal", so nobody is told however the access ends. Read the rule with gws_get_calendar_acl_rule first to be sure of who it names.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
ruleIdstringyesThe rule id in Google's type:value form, from gws_list_calendar_acl_rules.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Delete an event. Acts as the named calendar owner. Marked as changing things because the event is gone when the call returns — Calendar has no trash and no undo — and because with attendees on it and sendUpdates set to all or externalOnly Google EMAILS every one of them a cancellation. sendUpdates defaults to none, which removes the event and tells nobody. Passing a recurring event's own id deletes the WHOLE SERIES; to drop one date, take that occurrence's id from gws_list_calendar_event_instances and delete that instead.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
eventIdstringyesThe event id. A recurring event's own id deletes the whole series.
sendUpdatesstringnonullOptional. Who Google emails about this change: all, externalOnly or none. Defaults to none, which notifies nobody. For copying events that already exist somewhere else, Google points at the import method instead — gws_import_calendar_event here. Pass all or externalOnly when the event has guests who need to know about it.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Remove a calendar from one person's calendar list. Acts as the named person. Not marked as destructive because nothing is destroyed: the calendar, every event on it, its owner and its sharing all survive, only this person stops seeing it, and gws_create_calendar_list_entry puts it back. To destroy a calendar use gws_delete_calendar; to empty a primary calendar use gws_clear_calendar.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Read a calendar's own metadata — its title, description, location and time zone. Acts as the named calendar owner. This is the calendar as everybody with access sees it; gws_get_calendar_list_entry returns one person's private view of the same calendar instead.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Read one calendar sharing rule. Acts as the named calendar owner. Returns the scope the rule applies to and the role it grants. Read this before changing a rule, so the replacement is built from what is actually there.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
ruleIdstringyesThe rule id in Google's type:value form, from gws_list_calendar_acl_rules.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Read the palette behind every colorId in Calendar — the numbered background and foreground values, for calendars and for events separately. Acts as the named person, though the answer is the same for everybody: this is the service's fixed palette, not one person's choices. Read it to turn a colorId on a calendar or an event into an actual colour, or to pick a valid id before setting one.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Read one event in full — its times, attendees and their responses, organizer, conferencing details, reminders and recurrence rule. Acts as the named calendar owner. Read this before editing an event, so a change is built from what is actually there rather than from a guess. maxAttendees only shapes the response and changes nothing on the event.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
eventIdstringyesThe event id, from gws_list_calendar_events.
maxAttendeesintegernonullOptional. Cap how many attendees come back in the response.
timeZonestringnonullOptional. Time zone for the response. Google's default is the calendar's own.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Read one entry from a person's calendar list. Acts as the named person. This is the per-person view of a calendar — their colour for it, their name override, their default reminders, whether it is selected or hidden — as opposed to the calendar's own shared metadata, which gws_get_calendar returns.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Read one of a person's Calendar preferences by id. Acts as the named person. Setting ids come from gws_list_calendar_settings — timezone and weekStart are the two most often wanted. These tools read only; Google's Calendar API publishes no way to change a person's settings.

ParamTypeRequiredDefaultDescription
settingstringyesThe setting id, from gws_list_calendar_settings, e.g. timezone or weekStart.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] File a private copy of an event that already exists somewhere else — the migration tool. Acts as the named calendar owner. Not marked as destructive and it emails nobody: Google publishes NO notification parameter on this route at all, because there is no invitation to send for an event that has already happened elsewhere. That is the difference from gws_create_calendar_event, which does invite people. The body needs iCalUID as well as start and end, and only events with an eventType of default may be imported.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesAn Event as JSON. iCalUID, start and end are required.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
conferenceDataVersionintegernonullOptional. 1 honours conferenceData in the body; 0 ignores it. Google's default is 0.
eventLabelVersionintegernonullOptional. 1 processes eventLabelId and ignores colorId; 0 processes colorId. Google's default is 0.
supportsAttachmentsbooleannonullOptional. Declare that the caller handles event attachments.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] List who a calendar is shared with and at what access role. Acts as the named calendar owner. Each rule pairs a scope (a person, a group, a whole domain, or everyone) with a role, and the rule id is the scope written as type:value, e.g. user:someone@example.com. showDeleted includes removed rules, which come back with a role of none. syncToken narrows the answer to what has changed since an earlier page's nextSyncToken; an expired one answers 410 and the whole list has to be re-read. Pages up to 250 at a time.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
maxResultsintegernonullOptional. Rules per page, up to 250. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
showDeletedbooleannonullOptional. Include removed rules, which come back with a role of none.
syncTokenstringnonullOptional. nextSyncToken from an earlier page, to read only what changed.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] List the separate occurrences of one recurring event, including the ones that were moved or cancelled on their own. Acts as the named calendar owner. Pass the id of the recurring event itself, from gws_list_calendar_events. This is how to reach a single occurrence: each one has its own event id, and editing or deleting that id changes only that date, while editing the recurring event's own id changes the whole series. originalStart picks out the occurrence whose original start time was that value. Pages up to 2500 at a time; Google's default is 250.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
eventIdstringyesThe recurring event's id, from gws_list_calendar_events.
maxAttendeesintegernonullOptional. Cap how many attendees each occurrence carries in the response.
maxResultsintegernonullOptional. Occurrences per page, up to 2500. Google's default is 250.
originalStartstringnonullOptional. The original start time of the occurrence to return, as an RFC 3339 timestamp.
pageTokenstringnonullOptional. Page token from a previous response.
showDeletedbooleannonullOptional. Include cancelled occurrences.
timeMaxstringnonullOptional. Upper bound on an occurrence's start, as an RFC 3339 timestamp with an offset.
timeMinstringnonullOptional. Lower bound on an occurrence's end, as an RFC 3339 timestamp with an offset.
timeZonestringnonullOptional. Time zone for the response. Google's default is the calendar's own.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] List the events on a calendar. Acts as the named calendar owner. timeMin and timeMax bound the window and must be RFC 3339 timestamps with a time-zone offset, e.g. 2026-09-01T00:00:00Z; timeMin filters on an event's end and timeMax on its start, so an event straddling the window is included. singleEvents expands a recurring series into its separate occurrences, which is what almost every caller wants and is required before orderBy can be startTime; the other ordering is updated. q searches the title, description, location and the names and addresses of attendees and organizers. eventTypes narrows to a comma-separated subset of birthday, default, focusTime, fromGmail, outOfOffice and workingLocation. syncToken reads only what changed since an earlier page, and Google refuses it alongside q, orderBy, iCalUID, timeMin, timeMax, updatedMin or either extended-property filter. Pages up to 2500 at a time; Google's default is 250.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
eventTypesstringnonullOptional. Comma-separated subset of birthday, default, focusTime, fromGmail, outOfOffice, workingLocation.
iCalUIDstringnonullOptional. Find the event with this iCalendar UID.
maxAttendeesintegernonullOptional. Cap how many attendees each event carries in the response.
maxResultsintegernonullOptional. Events per page, up to 2500. Google's default is 250.
orderBystringnonullOptional. startTime (needs singleEvents true) or updated.
pageTokenstringnonullOptional. Page token from a previous response.
privateExtendedPropertystringnonullOptional. Comma-separated name=value constraints on private extended properties; all must match.
qstringnonullOptional. Free-text search over title, description, location, attendees and organizer.
sharedExtendedPropertystringnonullOptional. Comma-separated name=value constraints on shared extended properties; all must match.
showDeletedbooleannonullOptional. Include cancelled events.
showHiddenInvitationsbooleannonullOptional. Include invitations the person has hidden.
singleEventsbooleannonullOptional. Expand a recurring series into its separate occurrences.
syncTokenstringnonullOptional. nextSyncToken from an earlier page, to read only what changed.
timeMaxstringnonullOptional. Upper bound on an event's start, as an RFC 3339 timestamp with an offset.
timeMinstringnonullOptional. Lower bound on an event's end, as an RFC 3339 timestamp with an offset.
timeZonestringnonullOptional. Time zone for the response. Google's default is the calendar's own.
updatedMinstringnonullOptional. Only events changed since this RFC 3339 timestamp.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] List the calendars in one person's own calendar list — the ones they own and the ones they subscribe to. Acts as the named person. This is where calendar ids come from for every other tool in this group. minAccessRole narrows the answer to calendars they hold at least that role on: freeBusyReader, owner, reader, writer or writerWithoutPrivateAccess. showHidden includes entries they have hidden from their own view, showDeleted the ones they removed. Google refuses syncToken alongside minAccessRole or showOwnOrganizationOnly. Pages up to 250 at a time.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullOptional. Entries per page, up to 250. Google's default is 100.
minAccessRolestringnonullOptional. freeBusyReader, owner, reader, writer or writerWithoutPrivateAccess.
pageTokenstringnonullOptional. Page token from a previous response.
showDeletedbooleannonullOptional. Include entries the person has removed.
showHiddenbooleannonullOptional. Include entries the person has hidden.
showOwnOrganizationOnlybooleannonullOptional. Only calendars from this organization. Google Workspace accounts only.
syncTokenstringnonullOptional. nextSyncToken from an earlier page, to read only what changed.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] List one person's own Calendar preferences — their time zone, which day their week starts on, their default event length, their working-hours and notification choices. Acts as the named person. Read this to interpret their events correctly: a time with no offset means nothing until their time zone is known. Pages up to 250 at a time; Google's default is 100.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullOptional. Settings per page, up to 250. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
syncTokenstringnonullOptional. nextSyncToken from an earlier page, to read only what changed.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Move an event to another calendar, which CHANGES ITS ORGANIZER. Acts as the named calendar owner. Marked as changing things because the event leaves the source calendar and the organizer becomes the destination calendar's owner, which is not something a later edit puts back on its own; and with sendUpdates set to all or externalOnly Google EMAILS every attendee about the change. Google publishes this for ordinary events only: birthday, focusTime, fromGmail, outOfOffice and workingLocation events cannot be moved.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe id of the calendar the event is on now.
destinationstringyesThe id of the calendar to move the event to.
eventIdstringyesThe event id, from gws_list_calendar_events.
sendUpdatesstringnonullOptional. Who Google emails about this change: all, externalOnly or none. Defaults to none, which notifies nobody. For copying events that already exist somewhere else, Google points at the import method instead — gws_import_calendar_event here. Pass all or externalOnly when the event has guests who need to know about it.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Change some of a calendar's own details, leaving the rest alone. Acts as the named calendar owner. The merging version of gws_update_calendar and the right tool for almost every edit, such as renaming a calendar or correcting its time zone. The events on it are not touched.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe fields to change, as JSON. Anything left out keeps its current value.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Change some fields of a calendar sharing rule, leaving the rest alone. Acts as the named calendar owner. The merging version of gws_update_calendar_acl_rule and the right tool for almost every edit, such as moving somebody from reader to writer. It emails nobody unless asked: sendNotifications defaults to false here, although Google's own default on this route is true. Pass true to email the person about the new access. The roles are none, freeBusyReader, reader, writerWithoutPrivateAccess, writer and owner — see gws_create_calendar_acl_rule for what each one can see.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe fields to change, as JSON. Anything left out keeps its current value.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
ruleIdstringyesThe rule id in Google's type:value form, from gws_list_calendar_acl_rules.
sendNotificationsbooleannonullOptional. Whether to email the person whose access this changes. Defaults to false, so nobody is told; pass true to email the grantee. Google's own default on this route is true, and StackJack inverts it so that emailing a human is always something the caller asked for.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Change some fields of an event, leaving the rest alone. Acts as the named calendar owner. The merging version of gws_update_calendar_event and the right tool for almost every edit — moving a meeting, correcting a title, adding one attendee. Note that it can still email people: sendUpdates defaults to none, but set to all or externalOnly Google notifies every attendee of the change.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe fields to change, as JSON. Anything left out keeps its current value.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
conferenceDataVersionintegernonullOptional. 1 honours conferenceData in the body; 0 ignores it. Google's default is 0.
eventIdstringyesThe event id, from gws_list_calendar_events.
eventLabelVersionintegernonullOptional. 1 processes eventLabelId and ignores colorId; 0 processes colorId. Google's default is 0.
maxAttendeesintegernonullOptional. Cap how many attendees come back in the response.
sendUpdatesstringnonullOptional. Who Google emails about this change: all, externalOnly or none. Defaults to none, which notifies nobody. For copying events that already exist somewhere else, Google points at the import method instead — gws_import_calendar_event here. Pass all or externalOnly when the event has guests who need to know about it.
supportsAttachmentsbooleannonullOptional. Declare that the caller handles event attachments.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Change some of one person's display settings for a calendar, leaving the rest alone. Acts as the named person. The merging version of gws_update_calendar_list_entry and the right tool for almost every edit, such as recolouring a calendar or hiding it. Only that person's view changes: the calendar itself, its events and everyone else's view of it are untouched.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe fields to change, as JSON. Anything left out keeps its current value.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
colorRgbFormatbooleannonullOptional. Write the colour as foregroundColor/backgroundColor rather than colorId.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Ask when a set of calendars is busy over one window. Acts as the named person, and answers only for calendars they can see. A read despite being sent as a POST: Google puts the calendar list in the body because it can be long, and nothing is changed. The body needs timeMin, timeMax and items, an array of {"id": "..."} entries; timeZone, groupExpansionMax and calendarExpansionMax are optional. It returns busy periods only, never event titles or attendees, which makes it the right tool for finding a meeting slot without reading anybody's diary.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA FreeBusyRequest as JSON: timeMin, timeMax and items. The resource as a JSON object, sent to Google verbatim.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Create an event from a plain sentence, which Google parses for the title, date and time — for example "Lunch with Sam Tuesday 1pm". Acts as the named calendar owner. Marked as changing things because it puts a real event on a real calendar and, with sendUpdates set to all or externalOnly, can email people about it; sendUpdates defaults to none. Google decides what the sentence means, so the result can differ from what was intended: read it back with gws_get_calendar_event before relying on it. gws_create_calendar_event is the exact version and is the better choice whenever the times are known.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
sendUpdatesstringnonullOptional. Who Google emails about this change: all, externalOnly or none. Defaults to none, which notifies nobody. For copying events that already exist somewhere else, Google points at the import method instead — gws_import_calendar_event here. Pass all or externalOnly when the event has guests who need to know about it.
textstringyesThe sentence describing the event, e.g. Lunch with Sam Tuesday 1pm.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Hand a secondary calendar to a different person in the same organization. Acts as the named person, who MUST be a Google Workspace administrator holding the Manage Calendars privilege — Google refuses this call for anybody else. Marked as changing things because ownership moves in one act: the new owner gains full control including the ability to delete the calendar and everything on it, and the previous owner keeps only whatever access a sharing rule still gives them. The calendar must be active; Google does not support transferring a disabled or deleted one.

ParamTypeRequiredDefaultDescription
calendarIdstringyesThe secondary calendar's id, from gws_list_calendar_list.
newDataOwnerstringyesThe email address of the person who becomes the calendar's data owner.
userEmailstringyesThe administrator's email address. They must hold the Manage Calendars privilege.

[Google Workspace] Replace a calendar's own details wholesale. Acts as the named calendar owner. Marked as changing things because Google REPLACES the resource: a description, location or time zone left out of the body is cleared rather than kept, and clearing a time zone changes how every existing event on that calendar is displayed. gws_patch_calendar is the merging version and is the right tool for almost every edit. The events themselves are not deleted by this.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe whole Calendar as JSON.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Replace a calendar sharing rule wholesale. Acts as the named calendar owner. Marked as changing things because Google REPLACES the resource: the body supplied here becomes the entire rule, so a scope or role left out is not carried over from what was there, and because with sendNotifications set to true it EMAILS the person about their new access. sendNotifications defaults to false here, although Google's own default on this route is true. gws_patch_calendar_acl_rule is the merging version and is the right tool for almost every edit.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe whole AclRule as JSON: scope and role — none, freeBusyReader, reader, writerWithoutPrivateAccess, writer or owner.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
ruleIdstringyesThe rule id in Google's type:value form, from gws_list_calendar_acl_rules.
sendNotificationsbooleannonullOptional. Whether to email the person whose access this changes. Defaults to false, so nobody is told; pass true to email the grantee. Google's own default on this route is true, and StackJack inverts it so that emailing a human is always something the caller asked for.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Replace an event wholesale. Acts as the named calendar owner. Marked as changing things for two reasons at once. Google REPLACES the resource, so anything left out of the body is cleared — an omitted attendee list UNINVITES everyone on it, and an omitted recurrence rule turns a whole series into a single event. And with sendUpdates set to all or externalOnly it EMAILS every attendee about the result. sendUpdates defaults to none, which notifies nobody. Google points migration work at the import method — to file events that already exist somewhere else, use gws_import_calendar_event rather than this tool. Read the event first with gws_get_calendar_event, edit that, and send the whole thing back; gws_patch_calendar_event is the merging version and is the right tool for almost every edit.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe whole Event as JSON. start and end are required.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
conferenceDataVersionintegernonullOptional. 1 honours conferenceData in the body; 0 ignores it. Google's default is 0.
eventIdstringyesThe event id, from gws_list_calendar_events.
eventLabelVersionintegernonullOptional. 1 processes eventLabelId and ignores colorId; 0 processes colorId. Google's default is 0.
maxAttendeesintegernonullOptional. Cap how many attendees come back in the response.
sendUpdatesstringnonullOptional. Who Google emails about this change: all, externalOnly or none. Defaults to none, which notifies nobody. For copying events that already exist somewhere else, Google points at the import method instead — gws_import_calendar_event here. Pass all or externalOnly when the event has guests who need to know about it.
supportsAttachmentsbooleannonullOptional. Declare that the caller handles event attachments.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

[Google Workspace] Replace one person's display settings for a calendar wholesale. Acts as the named person. Marked as changing things because Google REPLACES the resource: a colour, a name override or a reminder list left out of the body reverts to Google's default rather than staying as it was, so a rename written this way can silently drop that person's custom reminders. gws_patch_calendar_list_entry is the merging version and is the right tool for almost every edit.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe whole CalendarListEntry as JSON.
calendarIdstringyesThe calendar id, from gws_list_calendar_list. Ids are address-shaped; the literal word primary means this person's own main calendar.
colorRgbFormatbooleannonullOptional. Write the colour as foregroundColor/backgroundColor rather than colorId.
userEmailstringyesThe calendar owner's primary email address. Every call acts as this person.

People

ToolPlanAccessSummary
gws_batch_create_contactsProWriteAdd several contacts to one person's address book in one call.
gws_batch_delete_contactsProDestructiveDelete several contacts from one person's address book in one call.
gws_batch_get_contact_groupsFreeRead-onlyRead several contact groups in one call.
gws_batch_get_peopleFreeRead-onlyRead several people in one call.
gws_batch_update_contactsProWriteChange several contacts in one call.
gws_copy_other_contact_to_my_contactsProWriteCopy one of the other contacts Google collected into the named person's myContacts group, making it a real saved contact.
gws_create_contactProWriteAdd a contact to one person's address book.
gws_create_contact_groupProWriteCreate a contact group for one person to file contacts under.
gws_delete_contactProDestructiveDelete a contact from one person's address book.
gws_delete_contact_groupProDestructiveDelete a contact group.
gws_delete_contact_photoProDestructiveRemove a contact's photo.
gws_get_contact_groupFreeRead-onlyRead one contact group, and optionally the people in it.
gws_get_personFreeRead-onlyRead one person: a saved contact, a colleague's directory profile, or the named person themselves.
gws_list_contact_groupsFreeRead-onlyList the contact groups one person files their contacts under, including the groups Google provides such as myContacts and starred.
gws_list_contactsFreeRead-onlyList the saved contacts in one person's address book.
gws_list_directory_peopleFreeRead-onlyList everybody in the company directory — colleagues' profiles and the domain's shared contacts — as seen by the named person.
gws_list_other_contactsFreeRead-onlyList the other contacts Google collected for one person from their mail and calendar, without them ever saving anybody.
gws_modify_contact_group_membersProWriteAdd people to a contact group, take them out of it, or both in one call.
gws_patch_contactProWriteChange named fields of a contact, leaving every other field alone.
gws_search_contactsFreeRead-onlySearch one person's saved contacts by name, nickname, email address, phone number or organization.
gws_search_directory_peopleFreeRead-onlySearch the company directory, as seen by the named person — the fastest way to find one colleague by name or address.
gws_search_other_contactsFreeRead-onlySearch the other contacts Google collected for one person, by name, email address or phone number.
gws_update_contact_groupProDestructiveReplace a contact group's details.
gws_update_contact_photoProWriteSet a contact's photo.

[Google Workspace] Add several contacts to one person's address book in one call. Acts as the named person, and emails nobody. Adds records and changes none, which is why it is not marked as changing things. The body carries contacts, at most 200 of them, and readMask, which decides what comes back for each: leave the read mask empty and Google skips the read-back entirely and answers with no contact data.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA BatchCreateContactsRequest as JSON: contacts (at most 200) and readMask, optionally sources.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Delete several contacts from one person's address book in one call. Acts as the named person. Marked as changing things, and the worst of the deletes in this family: up to 500 contacts are GONE when the call returns, with no undo and no trash, so one wrong resource name is not one lost contact. Read them with gws_batch_get_people first. Any directory profile for the same people is untouched.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA BatchDeleteContactsRequest as JSON: resourceNames, at most 500.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Read several contact groups in one call. Acts as the named person. Give the group resource names comma-separated, at most 200 in one request. maxMembers decides how many member names come back for each group. Prefer this to calling gws_get_contact_group in a loop.

ParamTypeRequiredDefaultDescription
groupFieldsstringnonullOptional. Which fields of each group come back, comma-separated: clientData, groupType, memberCount, metadata, name. Google returns metadata, groupType, memberCount and name when this is omitted.
maxMembersintegernonullOptional. How many member names come back with the group. Google returns none when this is omitted, and publishes no maximum for it.
resourceNamesstringyesComma-separated contact group resource names, at most 200.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Read several people in one call. Acts as the named person. Give the resource names comma-separated, at most 200 in one request; each may be a contact's people/, a Google account's people/, or the literal people/me. personFields is required. Prefer this to calling gws_get_person in a loop.

ParamTypeRequiredDefaultDescription
personFieldsstringyesRequired. Which fields of each person come back, comma-separated. Common values: names, emailAddresses, phoneNumbers, organizations, photos, metadata.
resourceNamesstringyesComma-separated person resource names, at most 200.
sourcesstringnonullOptional. Which kinds of record to read, comma-separated: READ_SOURCE_TYPE_PROFILE, READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_DOMAIN_CONTACT, READ_SOURCE_TYPE_OTHER_CONTACT.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Change several contacts in one call. Acts as the named person. Every field the update mask names is replaced on every contact in the request, and cleared where that contact carries no value for it, so name only the fields being changed. The body carries contacts as a MAP of resource name to person data rather than a list, at most 200 entries, plus updateMask and readMask. Each person must carry its current etag, read with gws_batch_get_people.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA BatchUpdateContactsRequest as JSON: contacts (a map of resource name to Person, at most 200), updateMask and readMask, optionally sources.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Copy one of the other contacts Google collected into the named person's myContacts group, making it a real saved contact. Acts as the named person, and emails nobody. Adds a contact and changes none, which is why it is not marked as changing things; the original other contact stays where it is. copyMask in the body says what to bring across, and Google allows only names, emailAddresses and phoneNumbers there.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA CopyOtherContactToMyContactsGroupRequest as JSON: copyMask (names, emailAddresses, phoneNumbers), optionally readMask and sources.
resourceNamestringyesThe other contact's resource name, otherContacts/, from gws_list_other_contacts or gws_search_other_contacts. The bare id works too.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Add a contact to one person's address book. Acts as the named person, and emails nobody: a contact is private to the address book it is created in. Adds a record and changes none, which is why it is not marked as changing things. The body is a Person: names, emailAddresses, phoneNumbers, organizations and the rest, each an array. Google refuses the call with more than one value for biographies, birthdays, genders or names. Send writes for one person one at a time rather than in parallel.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Person as JSON, sent to Google verbatim.
personFieldsstringnonullOptional. Which fields of the new contact come back. Google returns all of them when this is omitted.
sourcesstringnonullOptional. Which kinds of record to read, comma-separated: READ_SOURCE_TYPE_PROFILE, READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_DOMAIN_CONTACT, READ_SOURCE_TYPE_OTHER_CONTACT.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Create a contact group for one person to file contacts under. Acts as the named person, and emails nobody. Adds a group and changes none, which is why it is not marked as changing things. The name must be unique among that person's groups — Google refuses a duplicate with a conflict error. The group starts empty; put people in it with gws_modify_contact_group_members.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA CreateContactGroupRequest as JSON: contactGroup with its name, optionally readGroupFields.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Delete a contact from one person's address book. Acts as the named person. Marked as changing things because the contact is GONE when the call returns: Google publishes no undo and no trash for it, and the only way back is to create it again from data held somewhere else. Read it with gws_get_person first if any of it might be needed. Any directory profile for the same human is untouched — this removes the saved contact, not the colleague.

ParamTypeRequiredDefaultDescription
resourceNamestringyesThe person's resource name, people/, from gws_list_contacts or gws_search_contacts. The literal people/me is this person themselves. The bare id works too.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Delete a contact group. Acts as the named person. Marked as changing things, and read deleteContacts before running it: left alone or set false it removes the GROUP and leaves every contact in it in the address book, but set true it DELETES THE CONTACTS TOO, permanently and with no undo. Check who is in the group with gws_get_contact_group and a maxMembers value first — a group can hold far more people than its name suggests.

ParamTypeRequiredDefaultDescription
deleteContactsbooleannonullOptional. Leave this out or set it false to delete only the group. Set it true to delete every contact in the group as well, permanently.
resourceNamestringyesThe group's resource name, contactGroups/, from gws_list_contact_groups. The bare id works too.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Remove a contact's photo. Acts as the named person. Marked as changing things because the image is GONE — Google keeps no copy and offers no undo, and the only way back is to upload the picture again with gws_update_contact_photo from a file held somewhere else. The contact itself survives with everything but its picture.

ParamTypeRequiredDefaultDescription
personFieldsstringnonullOptional. Which fields of the changed contact come back. Google skips the read-back when this is omitted.
resourceNamestringyesThe person's resource name, people/, from gws_list_contacts or gws_search_contacts. The literal people/me is this person themselves. The bare id works too.
sourcesstringnonullOptional. Which kinds of record to read, comma-separated: READ_SOURCE_TYPE_PROFILE, READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_DOMAIN_CONTACT, READ_SOURCE_TYPE_OTHER_CONTACT.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Read one contact group, and optionally the people in it. Acts as the named person. maxMembers decides how many member names come back; Google returns none when it is left out, and it is the only way to see who is in a group. Read a group with this before replacing it, so the replacement carries the current etag.

ParamTypeRequiredDefaultDescription
groupFieldsstringnonullOptional. Which fields of each group come back, comma-separated: clientData, groupType, memberCount, metadata, name. Google returns metadata, groupType, memberCount and name when this is omitted.
maxMembersintegernonullOptional. How many member names come back with the group. Google returns none when this is omitted, and publishes no maximum for it.
resourceNamestringyesThe group's resource name, contactGroups/, from gws_list_contact_groups. The bare id works too.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Read one person: a saved contact, a colleague's directory profile, or the named person themselves. Acts as the named person. personFields is required — Google refuses the read without it and returns an error rather than a default shape. Pass people/me to read the named person's own profile. Read a contact with this before changing it, so the update is built from what is actually there and carries the current etag.

ParamTypeRequiredDefaultDescription
personFieldsstringyesRequired. Which fields of each person come back, comma-separated. Common values: names, emailAddresses, phoneNumbers, organizations, photos, metadata.
resourceNamestringyesThe person's resource name, people/, from gws_list_contacts or gws_search_contacts. The literal people/me is this person themselves. The bare id works too.
sourcesstringnonullOptional. Which kinds of record to read, comma-separated: READ_SOURCE_TYPE_PROFILE, READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_DOMAIN_CONTACT, READ_SOURCE_TYPE_OTHER_CONTACT.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] List the contact groups one person files their contacts under, including the groups Google provides such as myContacts and starred. Acts as the named person. Members are not included here — read one group with gws_get_contact_group to get them. Pages up to 1000 at a time, and Google's own default is 30.

ParamTypeRequiredDefaultDescription
groupFieldsstringnonullOptional. Which fields of each group come back, comma-separated: clientData, groupType, memberCount, metadata, name. Google returns metadata, groupType, memberCount and name when this is omitted.
pageSizeintegernonullOptional. Groups per page, up to 1000. Google's default is 30.
pageTokenstringnonullOptional. Page token from a previous response.
syncTokenstringnonullOptional. nextSyncToken from an earlier read, to get only what has changed. Sync tokens expire after seven days and an expired one fails with the reason EXPIRED_SYNC_TOKEN, after which the list has to be read in full again.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] List the saved contacts in one person's address book. Acts as the named person, and reads their own contacts rather than the company directory: use gws_list_directory_people for colleagues. personFields is required and decides what comes back for each contact. sortOrder takes LAST_MODIFIED_ASCENDING, LAST_MODIFIED_DESCENDING, FIRST_NAME_ASCENDING or LAST_NAME_ASCENDING. syncToken reads only what has changed since an earlier page, and contacts deleted since come back marked deleted. Pages up to 1000 at a time.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Contacts per page, up to 1000. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
personFieldsstringyesRequired. Which fields of each person come back, comma-separated. Common values: names, emailAddresses, phoneNumbers, organizations, photos, metadata.
requestSyncTokenbooleannonullOptional. Ask for a nextSyncToken on the last page, so the next read can fetch only what changed.
sortOrderstringnonullOptional. LAST_MODIFIED_ASCENDING, LAST_MODIFIED_DESCENDING, FIRST_NAME_ASCENDING or LAST_NAME_ASCENDING.
sourcesstringnonullOptional. Which kinds of record to read, comma-separated: READ_SOURCE_TYPE_PROFILE, READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_DOMAIN_CONTACT, READ_SOURCE_TYPE_OTHER_CONTACT.
syncTokenstringnonullOptional. nextSyncToken from an earlier read, to get only what has changed. Sync tokens expire after seven days and an expired one fails with the reason EXPIRED_SYNC_TOKEN, after which the list has to be read in full again.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] List everybody in the company directory — colleagues' profiles and the domain's shared contacts — as seen by the named person. This is the directory, not that person's own address book: use gws_list_contacts for their saved contacts. sources is required and chooses which of the two kinds of record to read. readMask is required and decides what comes back for each. syncToken reads only what has changed since an earlier page, and people removed since come back marked deleted. Pages up to 1000 at a time.

ParamTypeRequiredDefaultDescription
mergeSourcesstringnonullOptional. DIRECTORY_MERGE_SOURCE_TYPE_CONTACT merges this person's own contact data into a directory entry where a verified email address or phone number connects the two.
pageSizeintegernonullOptional. People per page, up to 1000. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
readMaskstringyesRequired. Which fields of each person come back, comma-separated. Common values: names, emailAddresses, phoneNumbers, organizations, photos, metadata.
requestSyncTokenbooleannonullOptional. Ask for a nextSyncToken on the last page, so the next read can fetch only what changed.
sourcesstringyesRequired. Which directory records to read, comma-separated: DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE for colleagues' profiles, DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT for the domain's shared contacts. Both are allowed.
syncTokenstringnonullOptional. nextSyncToken from an earlier read, to get only what has changed. Sync tokens expire after seven days and an expired one fails with the reason EXPIRED_SYNC_TOKEN, after which the list has to be read in full again.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] List the other contacts Google collected for one person from their mail and calendar, without them ever saving anybody. Acts as the named person. These are not in any contact group, and gws_copy_other_contact_to_my_contacts is what turns one into a real saved contact. readMask is required, and what it may name depends on sources: with the default it is emailAddresses, metadata, names, phoneNumbers and photos. Pages up to 1000 at a time.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Contacts per page, up to 1000. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
readMaskstringyesRequired. Which fields of each person come back, comma-separated. On THIS route the valid set depends on sources, and with the default (READ_SOURCE_TYPE_CONTACT) Google accepts exactly emailAddresses, metadata, names, phoneNumbers and photos — organizations and the other profile fields are only valid when READ_SOURCE_TYPE_PROFILE is included.
requestSyncTokenbooleannonullOptional. Ask for a nextSyncToken on the last page, so the next read can fetch only what changed.
sourcesstringnonullOptional. READ_SOURCE_TYPE_CONTACT, or READ_SOURCE_TYPE_CONTACT together with READ_SOURCE_TYPE_PROFILE. Google refuses READ_SOURCE_TYPE_PROFILE on its own here.
syncTokenstringnonullOptional. nextSyncToken from an earlier read, to get only what has changed. Sync tokens expire after seven days and an expired one fails with the reason EXPIRED_SYNC_TOKEN, after which the list has to be read in full again.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Add people to a contact group, take them out of it, or both in one call. Acts as the named person, and emails nobody. Not marked as changing things because nothing is deleted: a contact taken out of a group is still in the address book, and the same tool puts it back. The body carries resourceNamesToAdd and resourceNamesToRemove, each a list of people/, and the two together may name at most 1000 people. Google allows a contact to be removed from any group, but added only to one of that person's own groups or to myContacts or starred.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA ModifyContactGroupMembersRequest as JSON: resourceNamesToAdd and/or resourceNamesToRemove, at most 1000 names between them.
resourceNamestringyesThe group's resource name, contactGroups/, from gws_list_contact_groups. The bare id works too.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Change named fields of a contact, leaving every other field alone. Acts as the named person. updatePersonFields lists what to write, and each field named is replaced — a field named with no value in the body is cleared, so list only what is being changed. The body must carry the metadata.sources block, including the etag, from a gws_get_person read: Google refuses the call with a stale etag, which means somebody changed the contact in between and the edit should be rebuilt on a fresh read.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe fields to change, as a Person in JSON, including metadata.sources with the current etag.
personFieldsstringnonullOptional. Which fields of the changed contact come back.
resourceNamestringyesThe person's resource name, people/, from gws_list_contacts or gws_search_contacts. The literal people/me is this person themselves. The bare id works too.
sourcesstringnonullOptional. Which kinds of record to read, comma-separated: READ_SOURCE_TYPE_PROFILE, READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_DOMAIN_CONTACT, READ_SOURCE_TYPE_OTHER_CONTACT.
updatePersonFieldsstringyesRequired. Comma-separated list of the fields to write, e.g. names,phoneNumbers. Read-only fields cannot be written: not ageRanges, coverPhotos, metadata, photos or skills.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Search one person's saved contacts by name, nickname, email address, phone number or organization. Acts as the named person. Google matches the START of a phrase only: a contact named "foo name" matches f, fo, foo, foo n and nam, but not oo n. Google also asks that a client send a warm-up search with an empty query before the first real one, to refresh its cache. readMask is required. Returns AT MOST 30 RESULTS IN TOTAL, not the first page of several: Google caps the page at 30 and its search response carries no page token at all, so there is no second page to ask for. Google's own default is 10.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Results per page, up to 30. Google's default is 10.
querystringyesThe text to match against the start of a contact's name, nickname, email address, phone number or organization. An empty query is the warm-up call.
readMaskstringyesRequired. Which fields of each person come back, comma-separated. Common values: names, emailAddresses, phoneNumbers, organizations, photos, metadata.
sourcesstringnonullOptional. Which kinds of record to read, comma-separated: READ_SOURCE_TYPE_PROFILE, READ_SOURCE_TYPE_CONTACT, READ_SOURCE_TYPE_DOMAIN_CONTACT, READ_SOURCE_TYPE_OTHER_CONTACT.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Search the company directory, as seen by the named person — the fastest way to find one colleague by name or address. Google matches the START of a phrase, and does not use the read mask to decide which fields it matches against. sources and readMask are both required. Returns at most 500 results per page, half what gws_list_directory_people returns.

ParamTypeRequiredDefaultDescription
mergeSourcesstringnonullOptional. DIRECTORY_MERGE_SOURCE_TYPE_CONTACT merges this person's own contact data into a directory entry where a verified email address or phone number connects the two.
pageSizeintegernonullOptional. Results per page, up to 500. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
querystringyesThe text to match against the start of a directory entry's fields.
readMaskstringyesRequired. Which fields of each person come back, comma-separated. Common values: names, emailAddresses, phoneNumbers, organizations, photos, metadata.
sourcesstringyesRequired. Which directory records to read, comma-separated: DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE for colleagues' profiles, DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT for the domain's shared contacts. Both are allowed.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Search the other contacts Google collected for one person, by name, email address or phone number. Acts as the named person. Google matches the START of a phrase only, and asks that a client send a warm-up search with an empty query before the first real one to refresh its cache. readMask is required and may name only emailAddresses, metadata, names and phoneNumbers here. Returns AT MOST 30 RESULTS IN TOTAL, not the first page of several: Google caps the page at 30 and its search response carries no page token at all, so there is no second page to ask for. Google's own default is 10.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Results per page, up to 30. Google's default is 10.
querystringyesThe text to match against the start of a name, email address or phone number. An empty query is the warm-up call.
readMaskstringyesRequired. Which fields come back, comma-separated. Only emailAddresses, metadata, names and phoneNumbers are allowed here.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Replace a contact group's details. Acts as the named person. Marked as changing things because Google replaces the fields WHOLESALE — a field left out of the body is not kept from the group as it stands, so read the group with gws_get_contact_group first and send back what should survive, including its current etag. The people in the group are not touched; use gws_modify_contact_group_members for those. A new name must be unique among that person's groups.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesAn UpdateContactGroupRequest as JSON: contactGroup including its current etag, optionally updateGroupFields and readGroupFields.
resourceNamestringyesThe group's resource name, contactGroups/, from gws_list_contact_groups. The bare id works too.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

[Google Workspace] Set a contact's photo. Acts as the named person. Not marked as changing things because a photo is a single value: setting it and replacing it are the same act, and gws_delete_contact_photo is the one that takes it away. The image goes in the body as photoBytes, base64-encoded; Google's own words for the field are just "Raw photo bytes", and it names no accepted format, so an image Google refuses comes back as an upstream error rather than being caught here. personFields in the body decides what comes back afterwards; leave it out and Google skips the read-back.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesAn UpdateContactPhotoRequest as JSON: photoBytes (the base64-encoded JPEG or PNG), optionally personFields and sources.
resourceNamestringyesThe person's resource name, people/, from gws_list_contacts or gws_search_contacts. The literal people/me is this person themselves. The bare id works too.
userEmailstringyesThe primary email address of the person whose contacts this acts on. Every call acts as that person.

Tasks

ToolPlanAccessSummary
gws_clear_completed_tasksProWriteHide every completed task in a list.
gws_create_taskProWriteAdd a task to a list.
gws_create_task_listProWriteCreate a new, empty task list for one person.
gws_delete_taskProDestructivePermanently delete one task.
gws_delete_task_listProDestructivePermanently delete a task list and every task in it.
gws_get_taskFreeRead-onlyRead one task in full — its title, notes, due date, status, where it sits under a parent, and whether it was assigned from a Google Doc or a Chat space.
gws_get_task_listFreeRead-onlyRead one task list's own details — its title and when it last changed.
gws_list_task_listsFreeRead-onlyList one person's task lists.
gws_list_tasksFreeRead-onlyList the tasks in one task list.
gws_move_taskProWriteMove a task: to a different position among its siblings, under a different parent task, or into a different task list.
gws_patch_taskProWriteChange only the fields you send on a task, leaving everything else as it is.
gws_patch_task_listProWriteChange only the fields you send on a task list, leaving everything else as it is.
gws_update_taskProDestructiveReplace a task wholesale.
gws_update_task_listProDestructiveReplace a task list's details wholesale.

[Google Workspace] Hide every completed task in a list. Acts as the named person. Google marks the completed tasks hidden and no longer returns them by default when reading the list. NOTHING IS DELETED: gws_list_tasks with showHidden and showCompleted both true reads them all back, and they stay visible in Google's own completed view. Only completed tasks are touched — an unfinished task is left alone. Nobody is emailed.

ParamTypeRequiredDefaultDescription
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Add a task to a list. Acts as the named person, and the task is theirs alone — nobody else sees it and nobody is emailed. It changes nothing that already exists, and gws_delete_task undoes it. Tasks assigned from Google Docs or Chat spaces cannot be created here; they are created by assigning them there. A person can hold up to 20,000 visible tasks per list and 100,000 in total.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON for the task. Settable fields: title (up to 1024 characters), notes (up to 8192), due (a date and time in RFC 3339 form, which Google reads as a whole day rather than a deadline), and status, which is either needsAction or completed. Where the task sits in the list is not a field here — use the parent and previous arguments, or gws_move_task.
parentstringnonullOptional. The id of the task this one is filed under, making it a subtask. Leave it out for a top-level task. A task assigned from Docs or Chat cannot be a parent or have one.
previousstringnonullOptional. The id of the sibling task this one goes after. Leave it out to put it first.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Create a new, empty task list for one person. Acts as the named person, and the list is theirs alone — nobody else sees it and nobody is emailed. It changes nothing that already exists, and gws_delete_task_list undoes it. A person can hold up to 2,000 lists.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON for the task list. title is the only field you can set, and it is limited to 1024 characters.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Permanently delete one task. Acts as the named person. There is no trash and no undo through this API — Google publishes no restore route, and gws_list_tasks with showDeleted true is a read of what Google still holds rather than a way back. If the task was assigned from a Google Doc or a Chat space, the original there is deleted too — to remove only the assignment, do that in the document or space instead. To take a completed task out of the way without destroying it, use gws_clear_completed_tasks. Nobody is emailed.

ParamTypeRequiredDefaultDescription
taskIdstringyesThe task's id, from gws_list_tasks or gws_get_task.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Permanently delete a task list and every task in it. Acts as the named person. There is no trash and no undo. If any task in the list was assigned from a Google Doc or a Chat space, the original there is deleted as well — so this can remove work from a document nobody was thinking about. Read the list with gws_list_tasks first. Nobody is emailed about it.

ParamTypeRequiredDefaultDescription
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Read one task in full — its title, notes, due date, status, where it sits under a parent, and whether it was assigned from a Google Doc or a Chat space. Acts as the named person.

ParamTypeRequiredDefaultDescription
taskIdstringyesThe task's id, from gws_list_tasks or gws_get_task.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Read one task list's own details — its title and when it last changed. Acts as the named person. This does not return the tasks in the list: use gws_list_tasks for those.

ParamTypeRequiredDefaultDescription
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] List one person's task lists. Acts as the named person and reads their own lists; there is no way to see somebody else's without acting as them. Each list carries its id, which every task tool needs. A person can have up to 2,000 lists, and this pages up to 1,000 at a time, so a full read is at most two pages.

ParamTypeRequiredDefaultDescription
maxResultsintegernonullOptional. Task lists per page, up to 1000. Google returns 1000 by default.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] List the tasks in one task list. Acts as the named person. Google's defaults are narrower than they look: completed tasks come back, but ones hidden by a previous gws_clear_completed_tasks do not unless showHidden is true, and deleted and assigned tasks are left out unless you ask for them. The five date filters all take a date and time in RFC 3339 form, like 2026-09-01T00:00:00Z. Pages up to 100 at a time, and returns only 20 if you do not say.

ParamTypeRequiredDefaultDescription
completedMaxstringnonullOptional. Latest completion date to include, in RFC 3339 form.
completedMinstringnonullOptional. Earliest completion date to include, in RFC 3339 form.
dueMaxstringnonullOptional. Latest due date to include, in RFC 3339 form.
dueMinstringnonullOptional. Earliest due date to include, in RFC 3339 form.
maxResultsintegernonullOptional. Tasks per page, up to 100. Google returns 20 if you leave this out.
pageTokenstringnonullOptional. Page token from a previous response.
showAssignedbooleannonullOptional. Whether tasks assigned to this person from Google Docs or Chat spaces come back. Google's default is false.
showCompletedbooleannonullOptional. Whether completed tasks come back. Google's default is true. Tasks completed in the Tasks app also need showHidden set true.
showDeletedbooleannonullOptional. Whether deleted tasks come back. Google's default is false.
showHiddenbooleannonullOptional. Whether hidden tasks come back — the ones a previous gws_clear_completed_tasks put out of sight. Google's default is false.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
updatedMinstringnonullOptional. Only tasks changed since this date and time, in RFC 3339 form.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Move a task: to a different position among its siblings, under a different parent task, or into a different task list. Acts as the named person. It changes nothing about the task itself — the title, notes, due date and status all survive the move — and a second move carrying the original list, parent and previous puts it back — for a CROSS-LIST move that reversing call names the task in its NEW list as taskListId and the ORIGINAL list as destinationTaskListId, and reading it the other way round just 404s without changing anything. Re-running the same call is not the undo: with neither parent nor previous the task moves to the top level, first position, and once it has moved into another list the original taskListId no longer holds it. Nobody is emailed. Google refuses a hidden task as the parent or the previous sibling, will not nest an assigned or repeating task, and cannot yet move a recurring task between lists. A task can hold up to 2,000 subtasks.

ParamTypeRequiredDefaultDescription
destinationTaskListIdstringnonullOptional. The id of the task list to move the task into. Leave it out to move it within the list it is already in.
parentstringnonullOptional. The id of the task this one becomes a subtask of. Leave it out to move it to the top level.
previousstringnonullOptional. The id of the sibling task this one goes after. Leave it out to move it to first position.
taskIdstringyesThe task's id, from gws_list_tasks or gws_get_task.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Change only the fields you send on a task, leaving everything else as it is. Acts as the named person. This is the safe way to mark a task completed, change its due date or edit its notes; gws_update_task replaces the whole task instead. It deletes nothing and emails nobody. To move a task rather than edit it, use gws_move_task.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON for the task. Settable fields: title (up to 1024 characters), notes (up to 8192), due (a date and time in RFC 3339 form, which Google reads as a whole day rather than a deadline), and status, which is either needsAction or completed. Where the task sits in the list is not a field here — use the parent and previous arguments, or gws_move_task.
taskIdstringyesThe task's id, from gws_list_tasks or gws_get_task.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Change only the fields you send on a task list, leaving everything else as it is. Acts as the named person. This is the safe way to rename a list; gws_update_task_list replaces the whole thing instead. It deletes nothing and emails nobody.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON for the task list. title is the only field you can set, and it is limited to 1024 characters.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Replace a task wholesale. Acts as the named person. Anything you leave out of the body is not kept from the task as it stands — the notes, the due date and the completion all go if you omit them — so read it with gws_get_task first and send back everything you want to keep. Use gws_patch_task to change one field safely. Nobody is emailed.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON for the task. Settable fields: title (up to 1024 characters), notes (up to 8192), due (a date and time in RFC 3339 form, which Google reads as a whole day rather than a deadline), and status, which is either needsAction or completed. Where the task sits in the list is not a field here — use the parent and previous arguments, or gws_move_task.
taskIdstringyesThe task's id, from gws_list_tasks or gws_get_task.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

[Google Workspace] Replace a task list's details wholesale. Acts as the named person. Anything you leave out of the body is not kept from the list as it stands, so read it with gws_get_task_list first and send back everything you want to keep. Use gws_patch_task_list to change one field safely. The tasks in the list are not touched, and nobody is emailed.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesJSON for the task list. title is the only field you can set, and it is limited to 1024 characters.
taskListIdstringyesThe task list's id, from gws_list_task_lists. The literal @default is this person's primary list.
userEmailstringyesThe primary email address of the person whose tasks this acts on. Every call acts as that person.

Chat

ToolPlanAccessSummary
gws_add_chat_reactionProWriteReact to a Chat message as the named person.
gws_add_chat_space_memberProDestructiveAdd a person or a Google Group to a Chat space.
gws_create_chat_custom_emojiProWritePublish a custom emoji for the organization.
gws_create_chat_sectionProWriteAdd a section to the named person's Chat sidebar.
gws_create_chat_spaceProWriteCreate a Chat space with the named person as its first and only member.
gws_delete_chat_custom_emojiProDestructiveDelete a custom emoji from the organization.
gws_delete_chat_messageProDestructiveDelete a Chat message.
gws_delete_chat_sectionProDestructiveDelete a section from the named person's Chat sidebar.
gws_delete_chat_spaceProDestructiveDelete a Chat space.
gws_download_chat_attachmentFreeRead-onlyDownload a Chat attachment and get back a temporary link to it.
gws_find_chat_direct_messageFreeRead-onlyFind the existing direct-message space between the named person and one other user.
gws_find_chat_group_chatsFreeRead-onlyFind the group chats the named person shares with a given set of people.
gws_get_chat_availabilityFreeRead-onlyRead one person's Chat availability — whether they are shown as ACTIVE, IDLE, AWAY or DO_NOT_DISTURB, their custom status, and when a Do Not Disturb period expires.
gws_get_chat_custom_emojiFreeRead-onlyRead one custom emoji — its name, its uid, who made it and a temporary image link that is good for at least ten minutes.
gws_get_chat_messageFreeRead-onlyRead one Chat message — its text, sender, thread, attachments and reactions.
gws_get_chat_spaceFreeRead-onlyRead one Chat space — its display name, type, description, history setting, access settings and permission settings.
gws_get_chat_space_eventFreeRead-onlyRead one space event and the resource it carries — the message that was posted, the membership that changed, the reaction that was added.
gws_get_chat_space_memberFreeRead-onlyRead one membership — the person or group, their role in the space, whether they have joined or only been invited, and whether they are internal or external to the organization.
gws_get_chat_space_notification_settingFreeRead-onlyRead how loudly one Chat space notifies the named person — its notification setting (ALL, MAIN_CONVERSATIONS, FOR_YOU or OFF) and whether they have muted it.
gws_get_chat_space_read_stateFreeRead-onlyRead how far the named person has read in one Chat space — the timestamp their unread mark sits at.
gws_get_chat_thread_read_stateFreeRead-onlyRead how far the named person has read in one Chat THREAD — the reply-level counterpart of gws_get_chat_space_read_state, which covers only a space's top-level conversation.
gws_list_chat_custom_emojisFreeRead-onlyList the custom emojis the organization has published.
gws_list_chat_message_pinsFreeRead-onlyList the messages pinned to the top of a Chat space.
gws_list_chat_messagesFreeRead-onlyList the messages in one Chat space, oldest first unless told otherwise.
gws_list_chat_reactionsFreeRead-onlyList the reactions on one Chat message and who left them.
gws_list_chat_section_itemsFreeRead-onlyList what is filed in one section of the named person's Chat sidebar.
gws_list_chat_sectionsFreeRead-onlyList the sections the named person's Chat sidebar is filed into, custom and built-in.
gws_list_chat_space_eventsFreeRead-onlyList what has happened in a Chat space — messages, memberships, reactions and space changes — for the last 28 days.
gws_list_chat_space_membersFreeRead-onlyList who is in a Chat space.
gws_list_chat_spacesFreeRead-onlyList the Chat spaces one person belongs to — named spaces, group chats and direct messages.
gws_mark_chat_activeProWriteShow the named person as ACTIVE in Chat.
gws_mark_chat_awayProWriteShow the named person as AWAY in Chat.
gws_mark_chat_do_not_disturbProWritePut the named person into DO NOT DISTURB in Chat, which SUPPRESSES THEIR NOTIFICATIONS until it expires.
gws_move_chat_section_itemProWriteMove one filed space from one section of the named person's Chat sidebar into another.
gws_patch_chat_availabilityProWriteSet or clear the named person's Chat CUSTOM STATUS — the short line and emoji their colleagues see beside their name.
gws_patch_chat_messageProWriteChange named fields of a Chat message, leaving every field the mask does not list alone.
gws_patch_chat_sectionProWriteRename a section in the named person's Chat sidebar.
gws_patch_chat_spaceProWriteChange named fields of a Chat space, leaving every field the mask does not list alone.
gws_patch_chat_space_memberProWriteChange a member's ROLE in a Chat space — the only field Google allows this call to write.
gws_patch_chat_space_notification_settingProWriteChange how loudly one Chat space notifies the named person.
gws_patch_chat_space_read_stateProWriteMark a Chat space read or unread for the named person, by moving their last-read timestamp.
gws_pin_chat_messageProWritePin a message to the top of its Chat space, where everyone in the space sees it.
gws_position_chat_sectionProWriteMove a section up or down the named person's Chat sidebar.
gws_remove_chat_reactionProWriteTake back a reaction on a Chat message.
gws_remove_chat_space_memberProDestructiveRemove someone from a Chat space.
gws_search_chat_messagesFreeRead-onlySearch Chat messages by keyword across the spaces the named person can see.
gws_search_chat_spacesFreeRead-onlySearch NAMED Chat spaces, including ones the named person is not a member of.
gws_send_chat_messageProDestructivePost a message to a Chat space as the named person.
gws_setup_chat_spaceProWriteCreate a Chat space AND invite people to it in one call.
gws_unpin_chat_messageProWriteRemove a pin from the top of a Chat space.
gws_update_chat_messageProDestructiveReplace the fields of a Chat message WHOLESALE.

[Google Workspace] React to a Chat message as the named person. Not marked as changing things: nothing existing is altered and gws_remove_chat_reaction takes it back. The body's emoji is required and carries EITHER unicode with a basic emoji as a string OR customEmoji with the uid of one from gws_list_chat_custom_emojis — never both.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Reaction as JSON: emoji with either unicode (a basic emoji) or customEmoji.uid.
messagestringyesThe message's resource name, spaces//messages/, from gws_list_chat_messages. A client-assigned id works in place of the message half.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Add a person or a Google Group to a Chat space. Acts as the named person. Marked as changing things for two reasons that both land outside this call: it EMAILS AND NOTIFIES the person being added, and Google publishes no flag to stop that; and where the space keeps history it GRANTS THEM ACCESS to everything said in the space before they arrived. Check the history setting with gws_get_chat_space first if that matters. Put the person in the body as member.name = users/ (their email address works as an alias) with member.type HUMAN, or a group as groupMember.name = groups/; role takes ROLE_MEMBER, ROLE_MANAGER or ROLE_ASSISTANT_MANAGER. With useAdminAccess Google refuses app memberships and people outside the administrator's organization.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Membership as JSON: member with name (users/ or an email alias) and type HUMAN, or groupMember with name groups/. role is optional.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Publish a custom emoji for the organization. Acts as the named person. Not marked as changing things: nothing existing is replaced, and gws_delete_chat_custom_emoji takes it away again. emojiName is required and Google's rules for it are strict — it must start and end with colons, be lowercase, and contain only letters, digits, hyphens and underscores, with no two separators in a row. payload carries filename and the image as base64 fileContent; the image must be square, between 64 and 500 pixels, under 256 KB, and a .png, .jpg or .gif.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA CustomEmoji as JSON: emojiName (colon-wrapped, lowercase) and payload with filename and base64 fileContent.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Add a section to the named person's Chat sidebar. Acts as that person and changes only their own view; nobody else sees any difference and nothing is notified. type is required and CUSTOM_SECTION is the only one a caller creates — the other values name Google's built-in sections, which already exist. displayName is required for a custom section and holds up to 80 characters. Put spaces into it afterwards with gws_move_chat_section_item.

ParamTypeRequiredDefaultDescription
displayNamestringnonullThe section's name, up to 80 characters. Google requires it for a CUSTOM_SECTION, which is the only type a caller can create — so in practice it is always needed. It is optional in this signature rather than required so that a call omitting it reaches Google and comes back with Google's own message, instead of being refused here on a rule only Google can restate if it changes.
typestringyesRequired. CUSTOM_SECTION is the only type a caller creates.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Create a Chat space with the named person as its first and only member. Acts as the named person. Nobody else is told and nothing is changed for anyone else, which is why this is not marked as changing things — gws_add_chat_space_member is the call that invites people, and it is. spaceType is required in the body: SPACE for a named space, which also needs displayName, or GROUP_CHAT. Google answers ALREADY_EXISTS if another space in the organization uses the same display name. Pass requestId to make a retry safe: the same id returns the space already created rather than a second one. To create a space with people already in it, use gws_setup_chat_space instead.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Space as JSON. spaceType is required: SPACE (with displayName) or GROUP_CHAT. spaceDetails carries the description and guidelines.
requestIdstringnonullOptional. A unique id — a random UUID is recommended — that makes a retry return the space already created instead of a duplicate.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Delete a custom emoji from the organization. Acts as the named person. Marked as changing things because it reaches beyond this call: the emoji is GONE for the whole organization, not just for the person deleting it, and Google publishes no undo — the only way back is to upload the image again with gws_create_chat_custom_emoji from a copy held somewhere else. Not everyone may do it: by default a person can delete only emoji they created, and an Emoji manager assigned by the administrator can delete any of them. Read it with gws_get_chat_custom_emoji first, which returns a temporary image link.

ParamTypeRequiredDefaultDescription
namestringyesThe emoji's resource name, customEmojis/, from gws_list_chat_custom_emojis. The bare id works too.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Delete a Chat message. Acts as the named person, who can delete their own messages, or any message in a space they manage. Marked as changing things because the message is GONE for everyone in the space when the call returns, with no undo and no trash — read it with gws_get_chat_message first if any of it might be needed. force is the parameter that widens the blast radius: left alone, a message with threaded replies is REFUSED; set true, the replies are deleted with it.

ParamTypeRequiredDefaultDescription
forcebooleannonullOptional. True also deletes the message's threaded replies. Left alone, a message with replies is refused rather than deleted.
namestringyesThe message's resource name, spaces//messages/, from gws_list_chat_messages. A client-assigned id works in place of the message half.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Delete a section from the named person's Chat sidebar. Acts as that person. Marked as changing things because the section is GONE with no undo and Google publishes no trash for it — recreating it with gws_create_chat_section makes a new, empty one, and every space that was filed in it has to be moved back by hand with gws_move_chat_section_item. The SPACES THEMSELVES ARE SAFE: they return to their default section rather than being left or deleted. List what is in it with gws_list_chat_section_items first.

ParamTypeRequiredDefaultDescription
sectionIdstringyesThe section's id, from gws_list_chat_sections. Google's built-in ids are the constants default-direct-messages, default-spaces and default-apps. The full users//sections/ name works too — only the section half is used, because these routes always act on the named person's own sidebar.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Delete a Chat space. Acts as the named person, who must be a space manager. Marked as changing things because EVERYTHING IN THE SPACE GOES WITH IT — every message, every attachment and every membership — for everyone who was in it, and Google publishes no undo and no trash for any of it. Read what matters with gws_list_chat_messages first. useAdminAccess needs the chat.admin.delete scope. To leave a space without destroying it for everybody else, remove the one membership with gws_remove_chat_space_member.

ParamTypeRequiredDefaultDescription
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Download a Chat attachment and get back a temporary link to it. Acts as the named person, who must be a member of the space it was posted in. Pass the attachmentDataRef.resourceName from a message's own attachment array, as gws_get_chat_message and gws_list_chat_messages return it — NOT the attachment's own resource name, which addresses the metadata rather than the bytes. The message is the only source of that reference on this connection: Google serves the route that reads an attachment's metadata directly to app authentication alone, so no tool wraps it. An attachment stored in Drive has no such reference and is fetched with gws_download_drive_file instead. The answer is a link, a suggested filename, the size and an expiry; readTtlMinutes sets how long the link lasts, 15 minutes by default and 60 at most. Files over the connector's size ceiling are refused rather than truncated.

ParamTypeRequiredDefaultDescription
readTtlMinutesintegernonullOptional. Minutes the download link stays valid: 15 by default, 60 at most.
resourceNamestringyesThe attachmentDataRef.resourceName of the attachment to download.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Find the existing direct-message space between the named person and one other user. Acts as the named person. Returns the space if the two have ever messaged each other and a not-found error otherwise — it does not create one; gws_setup_chat_space does that. Name the other user as users/, where the id is a People API profile id or a Directory API user id, or use their email address as an alias: users/someone@customer.example.

ParamTypeRequiredDefaultDescription
namestringyesRequired. The OTHER user, as users/ — a People or Directory id, or their email address as an alias.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Find the group chats the named person shares with a given set of people. Acts as the named person. Give the others comma-separated as users/ names or email aliases, at most 49; Chat apps cannot be named. spaceView decides how much comes back: SPACE_VIEW_RESOURCE_NAME_ONLY is Google's default and returns names alone, SPACE_VIEW_EXPANDED returns the full space and needs a space-reading scope. Pages up to 30 at a time — the smallest page in this family, and Google's own default is 10.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Spaces per page, up to 30. Google's default is 10.
pageTokenstringnonullOptional. Page token from a previous response.
spaceViewstringnonullOptional. SPACE_VIEW_RESOURCE_NAME_ONLY or SPACE_VIEW_EXPANDED.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.
usersstringnonullOptional. Comma-separated users/ names or email aliases, at most 49.

[Google Workspace] Read one person's Chat availability — whether they are shown as ACTIVE, IDLE, AWAY or DO_NOT_DISTURB, their custom status, and when a Do Not Disturb period expires. Acts as the named person and reads their own state; Google offers no way to read anybody else's through this call. The state itself is set by Chat from real activity, so it can change on its own between reads.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Read one custom emoji — its name, its uid, who made it and a temporary image link that is good for at least ten minutes. Acts as the named person. Pass the resource name exactly as gws_list_chat_custom_emojis returns it, customEmojis/; the bare id works too.

ParamTypeRequiredDefaultDescription
namestringyesThe emoji's resource name, customEmojis/, from gws_list_chat_custom_emojis. The bare id works too.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Read one Chat message — its text, sender, thread, attachments and reactions. Acts as the named person, who must be a member of its space. Read a message with this before changing it, so the edit is built from what is actually there.

ParamTypeRequiredDefaultDescription
markupSyntaxstringnonullOptional. The syntax the formattedText field comes back in: MARKUP_SYNTAX_CHAT or MARKUP_SYNTAX_MARKDOWN.
namestringyesThe message's resource name, spaces//messages/, from gws_list_chat_messages. A client-assigned id works in place of the message half.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Read one Chat space — its display name, type, description, history setting, access settings and permission settings. Acts as the named person, who must be a member unless useAdminAccess is set. Read a space with this before changing it, so the update is built from what is actually there.

ParamTypeRequiredDefaultDescription
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Read one space event and the resource it carries — the message that was posted, the membership that changed, the reaction that was added. Acts as the named person, who must be a member of the space. Get the event's resource name from gws_list_chat_space_events.

ParamTypeRequiredDefaultDescription
namestringyesThe event's resource name, spaces//spaceEvents/, from gws_list_chat_space_events.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Read one membership — the person or group, their role in the space, whether they have joined or only been invited, and whether they are internal or external to the organization. Acts as the named person. Read this before gws_patch_chat_space_member so the role change is made against what is actually there.

ParamTypeRequiredDefaultDescription
namestringyesThe membership's resource name, spaces//members/, from gws_list_chat_space_members. Google accepts the member's email address in place of the member half.
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Read how loudly one Chat space notifies the named person — its notification setting (ALL, MAIN_CONVERSATIONS, FOR_YOU or OFF) and whether they have muted it. Acts as that person; the setting belongs to them and says nothing about anyone else in the space.

ParamTypeRequiredDefaultDescription
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Read how far the named person has read in one Chat space — the timestamp their unread mark sits at. Acts as that person; Google allows this call to read nobody else's. It covers the space's top-level conversation only, so replies inside threads are not accounted for here — use gws_get_chat_thread_read_state for those.

ParamTypeRequiredDefaultDescription
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Read how far the named person has read in one Chat THREAD — the reply-level counterpart of gws_get_chat_space_read_state, which covers only a space's top-level conversation. Acts as that person. Pass the whole thread name, spaces//threads/, exactly as a message's thread.name carries it: both halves are needed, so a bare thread id will not do.

ParamTypeRequiredDefaultDescription
threadNamestringyesThe thread's resource name, spaces//threads/, from a message's thread.name.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] List the custom emojis the organization has published. Acts as the named person. filter takes exactly two values: creator("users/me") for the ones the named person made, and NOT creator("users/me") for everyone else's; anything else is refused. The uid in each answer is what gws_add_chat_reaction takes for a custom-emoji reaction. Pages up to 200 at a time; Google's default is 25.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. creator("users/me") or NOT creator("users/me"). No other value is accepted.
pageSizeintegernonullOptional. Emojis per page, up to 200. Google's default is 25.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] List the messages pinned to the top of a Chat space. Acts as the named person, who must be a member. Pins are shared: everyone in the space sees the same ones. Pages up to 100 at a time, which is also Google's default.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Pins per page, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] List the messages in one Chat space, oldest first unless told otherwise. Acts as the named person, who must be a member. filter narrows by create_time (RFC-3339 timestamps in double quotes, with > and <) and by thread.name (spaces//threads/, one per query), joined with AND. showDeleted includes deleted messages — their metadata comes back but their content does not. To look across spaces by keyword instead, use gws_search_chat_messages. Pages up to 1000 at a time; Google's default is 25.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Filter by create_time and thread.name, e.g. create_time > "2026-01-01T00:00:00Z" AND thread.name = spaces/AAA/threads/123.
markupSyntaxstringnonullOptional. The syntax the formattedText field comes back in: MARKUP_SYNTAX_CHAT or MARKUP_SYNTAX_MARKDOWN.
orderBystringnonullOptional. ASC or DESC. Google's default is create_time ASC.
pageSizeintegernonullOptional. Messages per page, up to 1000. Google's default is 25.
pageTokenstringnonullOptional. Page token from a previous response.
showDeletedbooleannonullOptional. Include deleted messages. Their content is not available.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] List the reactions on one Chat message and who left them. Acts as the named person. filter narrows by emoji.unicode, emoji.custom_emoji.uid and user.name; OR joins values of the same field, AND joins an emoji condition to a user condition, and parentheses are needed when both appear. Pages up to 200 at a time; Google's default is 25.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Filter by emoji.unicode, emoji.custom_emoji.uid or user.name.
messagestringyesThe message's resource name, spaces//messages/, from gws_list_chat_messages. A client-assigned id works in place of the message half.
pageSizeintegernonullOptional. Reactions per page, up to 200. Google's default is 25.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] List what is filed in one section of the named person's Chat sidebar. Acts as that person. Pass the wildcard - as the section id to look across every section at once, which is how a particular space is found: give the wildcard and filter with space = spaces/. Pages up to 100 at a time; Google's default is 10.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Google supports filtering by space only, e.g. space = spaces/AAA.
pageSizeintegernonullOptional. Items per page, up to 100. Google's default is 10.
pageTokenstringnonullOptional. Page token from a previous response.
sectionIdstringyesThe section's id, from gws_list_chat_sections, or the wildcard - to look across every section.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] List the sections the named person's Chat sidebar is filed into, custom and built-in. Acts as that person; Google allows this call to read nobody else's sidebar. The built-in sections come back with constant ids — default-direct-messages, default-spaces and default-apps — and their type says which is which. Pages up to 100 at a time; Google's default is 10.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Sections per page, up to 100. Google's default is 10.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] List what has happened in a Chat space — messages, memberships, reactions and space changes — for the last 28 days. Acts as the named person, who must be a member. filter is required and must name at least one event type with the has operator, e.g. event_types:"google.workspace.chat.message.v1.created"; join several with OR and OMIT the batch types, which Google adds automatically. Narrow the window with start_time and end_time using = and RFC-3339 timestamps, joined by AND. Nothing older than 28 days is available. Google publishes no maximum page size for this one, so the page is capped at 100 by StackJack to keep a single answer readable.

ParamTypeRequiredDefaultDescription
filterstringyesRequired. At least one event type, e.g. event_types:"google.workspace.chat.message.v1.created". Optionally add start_time and end_time.
pageSizeintegernonullOptional. Events per page. Capped at 100 by StackJack — Google publishes no maximum of its own.
pageTokenstringnonullOptional. Page token from a previous response.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] List who is in a Chat space. Acts as the named person. filter narrows by role (role = "ROLE_MANAGER" or "ROLE_MEMBER") and by member.type (HUMAN or BOT, and != works on type); with useAdminAccess Google REQUIRES either member.type = "HUMAN" or member.type != "BOT" in the filter. showGroups adds Google Group memberships and showInvited adds people who were invited and have not joined. Pages up to 1000 at a time; Google's default is 100.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Filter by role and member.type, e.g. member.type = "HUMAN" AND role = "ROLE_MANAGER".
pageSizeintegernonullOptional. Memberships per page, up to 1000. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
showGroupsbooleannonullOptional. Also return Google Group memberships.
showInvitedbooleannonullOptional. Also return people who were invited and have not joined.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] List the Chat spaces one person belongs to — named spaces, group chats and direct messages. Acts as the named person and returns only what they are a member of; use gws_search_chat_spaces with useAdminAccess to look across spaces they are not in. filter narrows by type, e.g. space_type = "SPACE" or spaceType = "GROUP_CHAT" OR spaceType = "DIRECT_MESSAGE". Pages up to 1000 at a time; Google's own default is 100.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Filter by space type, e.g. space_type = "SPACE". SPACE_TYPE_UNSPECIFIED is not a legal value.
pageSizeintegernonullOptional. Spaces per page, up to 1000. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Show the named person as ACTIVE in Chat. Acts as that person and changes only how they appear; nothing is deleted and nobody is notified, and gws_mark_chat_away or gws_mark_chat_do_not_disturb changes it again. Give either expireTime or ttl to say when the state lapses — a short ttl hands the state back to Chat's own activity tracking after it, which is usually what is wanted. Leave both out and the state holds until something else changes it.

ParamTypeRequiredDefaultDescription
expireTimestringnonullOptional. An RFC-3339 timestamp at which the active state expires.
ttlstringnonullOptional. A duration until the state expires instead, e.g. 600s.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Show the named person as AWAY in Chat. Acts as that person and changes only how they appear; nothing is deleted, nobody is notified, and gws_mark_chat_active changes it back. Unlike the active and Do Not Disturb calls this one takes no expiry — Google publishes no fields for it at all, so the state holds until something else changes it or Chat sees real activity.

ParamTypeRequiredDefaultDescription
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Put the named person into DO NOT DISTURB in Chat, which SUPPRESSES THEIR NOTIFICATIONS until it expires. Acts as that person. Nothing is deleted and nobody else is affected, so this is not marked as changing things — but they will not be alerted to messages while it lasts, so give expireTime or ttl rather than leaving it open-ended. gws_mark_chat_active ends it early.

ParamTypeRequiredDefaultDescription
expireTimestringnonullOptional. An RFC-3339 timestamp at which Do Not Disturb expires.
ttlstringnonullOptional. A duration until it expires instead, e.g. 3600s.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Move one filed space from one section of the named person's Chat sidebar into another. Acts as that person and changes only their own view — the space itself, its members and its messages are untouched, and nobody else sees a difference. Find the item with gws_list_chat_section_items, using the wildcard - as the section id to look everywhere.

ParamTypeRequiredDefaultDescription
itemIdstringyesThe item's id, the last part of users//sections//items/.
sectionIdstringyesThe id of the section the item is in now, from gws_list_chat_section_items.
targetSectionIdstringyesThe id of the section to move it into, from gws_list_chat_sections.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Set or clear the named person's Chat CUSTOM STATUS — the short line and emoji their colleagues see beside their name. Acts as that person. Nothing is deleted and nobody is notified. updateMask is required and Google's only writable field on this call is custom_status. In the body, customStatus.text is required and capped at 64 characters and customStatus.emoji is required and must be a UNICODE emoji — Google refuses a custom emoji here, unlike a reaction. Add ttl or expireTime so the status clears itself.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesAn Availability as JSON carrying customStatus: text (required, at most 64 characters), emoji.unicode (required), and optionally ttl or expireTime.
updateMaskstringyesRequired. Google's only writable field path here is custom_status.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Change named fields of a Chat message, leaving every field the mask does not list alone. Acts as the named person, who can only edit their own messages. Not marked as changing things because it edits in place and Google keeps the message where it is — but everyone in the space sees the edited text. updateMask is required: Google's supported paths are text, attachment and quoted_message_metadata (removal only), plus cards, cards_v2 and accessory_widgets, which need app authentication this connection does not use. allowMissing is the one to be careful with: set true and a message that does not exist is CREATED instead, which posts to the room, and the id must be a client-assigned one. Leave it alone to edit only.

ParamTypeRequiredDefaultDescription
allowMissingbooleannonullOptional. True CREATES the message if it is not found, which posts to the space; the id must be client-assigned. Off unless set.
bodyJsonstringyesA Message as JSON carrying the fields the mask names.
namestringyesThe message's resource name, spaces//messages/, from gws_list_chat_messages. A client-assigned id works in place of the message half.
updateMaskstringyesRequired. Comma-separated field paths, or * for all. Supported: text, attachment, quoted_message_metadata.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Rename a section in the named person's Chat sidebar. Acts as that person and changes only their own view. Nothing filed in the section moves and nothing is deleted. updateMask is required and Google's one supported field path is display_name.

ParamTypeRequiredDefaultDescription
displayNamestringyesThe section's new name, up to 80 characters.
sectionIdstringyesThe section's id, from gws_list_chat_sections. Google's built-in ids are the constants default-direct-messages, default-spaces and default-apps. The full users//sections/ name works too — only the section half is used, because these routes always act on the named person's own sidebar.
updateMaskstringyesRequired. Google's one supported field path is display_name.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Change named fields of a Chat space, leaving every field the mask does not list alone. Acts as the named person, who must be a space manager for the access and permission settings. updateMask is required and decides what is written: space_details (send description AND guidelines together, or the one you omit is cleared), display_name, space_type (only GROUP_CHAT to SPACE, and only together with display_name), space_history_state, access_settings.audience, access_settings.access_permission_settings.discoverSpaceSetting and .joinSpaceSetting, and the seven permission_settings.* paths. Google requires space_history_state, either access_settings path and the permission_settings group each to travel ALONE in the mask. With useAdminAccess, space_type, space_history_state and both access_settings paths are not supported. Nothing here notifies anybody.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Space as JSON carrying the fields the mask names.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
updateMaskstringyesRequired. Comma-separated field paths to write, e.g. display_name or space_details.
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Change a member's ROLE in a Chat space — the only field Google allows this call to write. Acts as the named person. Nobody gains or loses the space itself and nothing is deleted, so this is not marked as changing things; what it does change is what they can do inside it, and promoting somebody to ROLE_MANAGER lets them delete the space. updateMask is required and its one supported value is role. Put the new role in the body as role: ROLE_MEMBER, ROLE_MANAGER or ROLE_ASSISTANT_MANAGER.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Membership as JSON carrying the new role: ROLE_MEMBER, ROLE_MANAGER or ROLE_ASSISTANT_MANAGER.
namestringyesThe membership's resource name, spaces//members/.
updateMaskstringyesRequired. Google's one supported field path is role.
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Change how loudly one Chat space notifies the named person. Acts as that person and changes THEIR OWN notifications only — nobody else in the space is affected, nothing is deleted and no message is sent to anyone. Worth knowing before setting it: OFF or MUTED means they stop hearing about that space until it is changed back. updateMask is required and Google's supported field paths are notification_setting and mute_setting. notificationSetting takes ALL, MAIN_CONVERSATIONS, FOR_YOU or OFF; muteSetting takes MUTED or UNMUTED.

ParamTypeRequiredDefaultDescription
muteSettingstringnonullOptional. MUTED or UNMUTED.
notificationSettingstringnonullOptional. ALL, MAIN_CONVERSATIONS, FOR_YOU or OFF.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too.
updateMaskstringyesRequired. Comma-separated: notification_setting and/or mute_setting.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Mark a Chat space read or unread for the named person, by moving their last-read timestamp. Acts as that person and changes only their own unread mark; no message is touched and nobody else sees a difference. A lastReadTime LATER than the newest message marks the space read — Google pulls the value back to that message's time — and an earlier one leaves it showing unread. It covers the space's top-level conversation only; replies in threads follow their own thread read state. updateMask is required and Google's one currently supported field path is last_read_time.

ParamTypeRequiredDefaultDescription
lastReadTimestringyesAn RFC-3339 timestamp. Later than the newest message marks the space read; earlier leaves it unread.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too.
updateMaskstringyesRequired. Google's one currently supported field path is last_read_time.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Pin a message to the top of its Chat space, where everyone in the space sees it. Acts as the named person. Not marked as changing things: the message itself is untouched and gws_unpin_chat_message puts it back exactly as it was. Give the space and the message separately — Google names the space in the route and takes the message as the thing being pinned.

ParamTypeRequiredDefaultDescription
messagestringyesThe message to pin, spaces//messages/.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Move a section up or down the named person's Chat sidebar. Acts as that person and changes only the ORDER of their own sidebar — nothing is deleted, nothing filed in the section moves and nobody else sees a difference. Give either relativePosition (START or END) or sortOrder, which must be greater than 0 and inserts the section there, shifting the one already at that position and everything below it down; a value past the end appends.

ParamTypeRequiredDefaultDescription
relativePositionstringnonullOptional. START or END.
sectionIdstringyesThe section's id, from gws_list_chat_sections. Google's built-in ids are the constants default-direct-messages, default-spaces and default-apps. The full users//sections/ name works too — only the section half is used, because these routes always act on the named person's own sidebar.
sortOrderintegernonullOptional. An absolute position instead, greater than 0.
userEmailstringyesThe primary email address of the person whose own Chat state this acts on. Every call acts as that person, and Google allows these routes to touch nobody else.

[Google Workspace] Take back a reaction on a Chat message. Acts as the named person, who can only remove their own. Not marked as changing things: the message is untouched and gws_add_chat_reaction puts the reaction back. Get the reaction's resource name from gws_list_chat_reactions.

ParamTypeRequiredDefaultDescription
namestringyesThe reaction's resource name, spaces//messages//reactions/, from gws_list_chat_reactions.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Remove someone from a Chat space. Acts as the named person. Marked as changing things because it TAKES AWAY ACCESS: the person loses the space and everything in it immediately, including conversations they could read a moment ago, and the only way back is to add them again with gws_add_chat_space_member — which then notifies them. Their past messages stay in the space. useAdminAccess cannot remove app memberships.

ParamTypeRequiredDefaultDescription
namestringyesThe membership's resource name, spaces//members/, from gws_list_chat_space_members. The member's email address works in place of the member half.
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Search Chat messages by keyword across the spaces the named person can see. Acts as the named person, and only ever over their own view — Google publishes no administrator mode for this search. space must be the literal spaces/- and nothing else — Google refuses every other value, a single space id included, with INVALID_ARGUMENT — so the search always spans every space the person can see; narrow it with space.name or space.display_name in the filter. filter is required and takes free-text keywords plus create_time, sender.name, space.name, space.display_name, attachment:*, annotations.user_mentions.user.name, has_link() and is_unread(); only AND works across different fields, and the word is implied if omitted. Maximum 1,000 characters. It is a read even though it is sent as a POST — nothing is written. Google returns at most 100 per page and defaults to 25.

ParamTypeRequiredDefaultDescription
filterstringyesRequired. Keywords plus optional field filters, e.g. "pending reports" AND create_time >= "2026-01-01T00:00:00Z". At most 1,000 characters.
markupSyntaxstringnonullOptional. The syntax the formattedText field comes back in: MARKUP_SYNTAX_CHAT or MARKUP_SYNTAX_MARKDOWN.
orderBystringnonullOptional. create_time desc (Google's default) or relevance desc. One attribute, descending only, direction after the attribute.
pageSizeintegernonullOptional. Results per page. Google's maximum is 100 and its default 25; it reduces anything larger itself.
pageTokenstringnonullOptional. Page token from a previous response.
spacestringyesRequired. The literal spaces/- and nothing else — Google refuses every other value, including a single space id, with INVALID_ARGUMENT. Narrow to particular spaces with space.name in the filter instead.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.
viewstringnonullOptional. SEARCH_MESSAGES_VIEW_BASIC (Google's default, matched messages only) or SEARCH_MESSAGES_VIEW_FULL, which adds metadata.

[Google Workspace] Search NAMED Chat spaces, including ones the named person is not a member of. Acts as the named person. query is required and must include space_type = "SPACE", which is the only legal type. With useAdminAccess set, customer = "customers/my_customer" is also required and the searchable fields widen to create_time, customer, display_name, external_user_allowed, last_active_time, space_history_state and space_type; without it only display_name, external_user_allowed and space_type are searchable, and Google returns an EMPTY answer rather than an error if display_name is left out. Only AND works across different fields. Pages up to 1000 with useAdminAccess and up to 100 without — Google reduces anything larger itself.

ParamTypeRequiredDefaultDescription
orderBystringnonullOptional. With admin access: membership_count.joined_direct_human_user_count, last_active_time or create_time, each ASC or DESC. Without it, only create_time DESC and relevance DESC.
pageSizeintegernonullOptional. Spaces per page: up to 1000 with useAdminAccess, up to 100 without. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
querystringyesRequired. The search query, at most 1,000 characters. Must include space_type = "SPACE". Example with admin access: customer = "customers/my_customer" AND space_type = "SPACE" AND display_name:"Project".
useAdminAccessbooleannonullOptional. Run with the named person's Workspace administrator rights, over spaces they are not a member of. Needs the manage chat and spaces conversations admin privilege AND the matching chat.admin scope; off unless set.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Post a message to a Chat space as the named person. Marked as changing things because it TELLS PEOPLE: everyone in the space is notified, the message appears under the named person's own name, and there is no quiet mode available here — Google's two non-default notification values both require app authentication, which this connection does not use. A posted message can be edited with gws_patch_chat_message or removed with gws_delete_chat_message, but not un-seen. Put the text in the body as text; reply into an existing conversation by adding thread with its name and setting messageReplyOption. Pass requestId to make a retry safe: the same id returns the message already posted rather than posting twice.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Message as JSON. text carries plain text; thread with a name replies into an existing thread.
messageIdstringnonullOptional. A custom id for the message so it can be read or changed later without Google's own. Must begin client-, be at most 63 characters of lowercase letters, digits and hyphens, and be unique in the space.
messageReplyOptionstringnonullOptional. REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD or REPLY_MESSAGE_OR_FAIL, used with thread in the body. Named spaces only.
notificationTypestringnonullOptional. NOTIFICATION_TYPE_NONE is Google's default and is normal delivery. NOTIFICATION_TYPE_FORCE_NOTIFY bypasses recipients' notification and Do Not Disturb settings and NOTIFICATION_TYPE_SILENT suppresses the notification entirely, but Google requires app authentication for BOTH, which this connection does not use — expect them to be refused.
requestIdstringnonullOptional. A unique id — a random UUID is recommended — that makes a retry return the message already posted instead of a duplicate.
spacestringyesThe space's resource name, spaces/, from gws_list_chat_spaces. The bare id works too — it is the segment after /chat/space/ in a Chat URL.
threadKeystringnonullOptional. Deprecated by Google in favour of thread.threadKey in the body; still accepted. Up to 4000 characters.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Create a Chat space AND invite people to it in one call. Acts as the named person, who is added automatically and must be left out of the memberships list. The invited people ARE told — Google publishes no way to add someone quietly — but nothing existing is changed or removed, so this is a create rather than a destructive act; the same invitation sent to an existing space through gws_add_chat_space_member is marked as changing things because it also hands the newcomer that space's history. space with its spaceType is required in the body; memberships holds at most 49 people besides the caller, each with member.name as users/ and member.type HUMAN. Pass requestId to make a retry safe.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA SetUpSpaceRequest as JSON: space (required, with spaceType), optionally memberships (at most 49, omitting the caller) and requestId.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Remove a pin from the top of a Chat space. Acts as the named person. Not marked as changing things: only the pin goes and THE MESSAGE STAYS exactly where it was, and gws_pin_chat_message puts the pin back. The pin's own resource name is spaces//messagePins/, and Google gives it the same id as the message it pins — a message spaces/AAA/messages/bbb.ccc pins as spaces/AAA/messagePins/bbb.ccc.

ParamTypeRequiredDefaultDescription
namestringyesThe pin's resource name, spaces//messagePins/, from gws_list_chat_message_pins.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

[Google Workspace] Replace the fields of a Chat message WHOLESALE. Acts as the named person, who can only edit their own messages. Marked as changing things because Google replaces each field the mask names rather than merging into it: a field listed with no value in the body is CLEARED, and the text that was there is gone with no undo. Prefer gws_patch_chat_message, which merges, unless a whole field really is being replaced. updateMask is required and takes the same paths as the patch. allowMissing set true CREATES the message if it is not found, which posts to the space.

ParamTypeRequiredDefaultDescription
allowMissingbooleannonullOptional. True CREATES the message if it is not found, which posts to the space; the id must be client-assigned. Off unless set.
bodyJsonstringyesA Message as JSON carrying the complete new value of every field the mask names.
namestringyesThe message's resource name, spaces//messages/, from gws_list_chat_messages. A client-assigned id works in place of the message half.
updateMaskstringyesRequired. Comma-separated field paths, or * for all. Supported: text, attachment, quoted_message_metadata.
userEmailstringyesThe primary email address of the person whose Chat this acts on. Every call acts as that person and sees only the spaces they are a member of.

Meet

ToolPlanAccessSummary
gws_create_meet_spaceProWriteCreate a Google Meet space owned by one person, and get back its meeting code and join link.
gws_end_meet_active_conferenceProDestructiveEnd the Google Meet call running in a space, right now.
gws_get_meet_conference_recordFreeRead-onlyGet one past Google Meet call: when it started, when it ended, which space it was held in, and when Google will delete the record.
gws_get_meet_participantFreeRead-onlyGet one attendee of a past Google Meet call: when they first joined, when they last left, and whether they were signed in, dialled in by phone, or anonymous.
gws_get_meet_participant_sessionFreeRead-onlyGet one join-and-leave session of one attendee of a past Google Meet call.
gws_get_meet_recordingFreeRead-onlyGet one recording of a past Google Meet call: when it started and stopped, its state, and where the MP4 lives in Google Drive.
gws_get_meet_smart_noteFreeRead-onlyGet one Gemini smart-notes record for a past Google Meet call: when note-taking started and stopped, its state, and which Google Doc holds the summary.
gws_get_meet_spaceFreeRead-onlyGet a Google Meet space: its meeting code, its join link, its dial-in numbers, its access and moderation settings, and the conference running in it right now if there is one.
gws_get_meet_transcriptFreeRead-onlyGet one transcription session of a past Google Meet call: when it started and stopped, its state, and which Google Doc holds the transcript.
gws_get_meet_transcript_entryFreeRead-onlyGet one speaker turn from a Google Meet transcript: the transcribed text, the participant who said it, the spoken language and its start and end times.
gws_list_meet_conference_recordsFreeRead-onlyList the past Google Meet calls one person can see, newest first.
gws_list_meet_participant_sessionsFreeRead-onlyList one attendee's separate join-and-leave sessions within a past Google Meet call, most recent first.
gws_list_meet_participantsFreeRead-onlyList who attended one past Google Meet call, most recent joiner first.
gws_list_meet_recordingsFreeRead-onlyList the recordings made during one past Google Meet call, oldest first.
gws_list_meet_smart_notesFreeRead-onlyList the Gemini "take notes for me" summaries generated during one past Google Meet call, oldest first.
gws_list_meet_transcript_entriesFreeRead-onlyRead what was said in a past Google Meet call as structured data: one entry per speaker turn, with the text, who said it, the spoken language and start and end times, oldest first.
gws_list_meet_transcriptsFreeRead-onlyList the transcription sessions of one past Google Meet call, oldest first.
gws_patch_meet_spaceProWriteChange a Google Meet space's settings - who can join without knocking, whether calls in it are automatically recorded, transcribed or summarised, and how moderation behaves.

[Google Workspace] Create a Google Meet space owned by one person, and get back its meeting code and join link. Acts as the named person, who becomes the owner. Emails nobody and invites nobody: this makes a room, and sending the link out is Calendar's job. Not marked as changing things because it adds a space and touches none that exist. The body is optional - leave it out and the space takes the organisation's defaults. Every setting lives under config: accessType (OPEN, TRUSTED or RESTRICTED), entryPointAccess (ALL or CREATOR_APP_ONLY), attendanceReportGenerationType (GENERATE_REPORT or DO_NOT_GENERATE), moderation (ON or OFF), moderationRestrictions (chatRestriction, reactionRestriction and presentRestriction each HOSTS_ONLY or NO_RESTRICTION, plus defaultJoinAsViewerType ON or OFF), and artifactConfig with recordingConfig.autoRecordingGeneration, transcriptionConfig.autoTranscriptionGeneration and smartNotesConfig.autoSmartNotesGeneration each ON or OFF. Turning any of those three on means every call in this space is recorded, transcribed or summarised without anybody asking again.

ParamTypeRequiredDefaultDescription
bodyJsonstringnonullOptional. A Space resource as JSON, with the settings under config - for example {"config":{"accessType":"TRUSTED","artifactConfig":{"recordingConfig":{"autoRecordingGeneration":"ON"}}}}. Omit for the organisation's defaults.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] End the Google Meet call running in a space, right now. Acts as the named person. Marked as changing things because it hangs up on EVERY PERSON IN THE CALL at once, without warning them and without a way to undo it: whatever was being discussed stops mid-sentence, and any recording, transcript or smart-notes session in progress stops with it. Read the space with gws_get_meet_space first - activeConference is what says whether anybody is actually in there, and this call does nothing to an empty space. The space itself survives and the same link still works, so the people cut off can rejoin, but the call they were in is over and becomes a separate conference record from the one they start next.

ParamTypeRequiredDefaultDescription
namestringyesThe meeting space, spaces/ - from gws_create_meet_space, or the space field of a conference record read with gws_list_meet_conference_records or gws_get_meet_conference_record. The bare id works too. This route takes the space ID ONLY. A meeting link ends in the meeting CODE, not the space id (https://meet.google.com/abc-mnop-xyz gives you abc-mnop-xyz), and Google accepts a meeting code as an alias of the space name only when GETTING a space: hand a link or a code to gws_get_meet_space first and use the name it returns here.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Get one past Google Meet call: when it started, when it ended, which space it was held in, and when Google will delete the record. Acts as the named person. An unset endTime means the call is still running. Google deletes the record, and everything under it, 30 days after the call ends - expireTime says exactly when.

ParamTypeRequiredDefaultDescription
namestringyesThe conference record, conferenceRecords/, from gws_list_meet_conference_records. The bare id works too.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Get one attendee of a past Google Meet call: when they first joined, when they last left, and whether they were signed in, dialled in by phone, or anonymous. Acts as the named person. A null latestEndTime means they are still in the call.

ParamTypeRequiredDefaultDescription
namestringyesThe participant, conferenceRecords//participants/, from gws_list_meet_participants. The full name is required - the id alone does not say which call it belongs to.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Get one join-and-leave session of one attendee of a past Google Meet call. Acts as the named person. An unset endTime means the session has not ended.

ParamTypeRequiredDefaultDescription
namestringyesThe session, conferenceRecords//participants//participantSessions/, from gws_list_meet_participant_sessions. The full name is required.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Get one recording of a past Google Meet call: when it started and stopped, its state, and where the MP4 lives in Google Drive. Acts as the named person. METADATA only - pass driveDestination.file to gws_download_drive_file for the video. The state reads STARTED, ENDED or FILE_GENERATED, and only FILE_GENERATED means the MP4 is ready.

ParamTypeRequiredDefaultDescription
namestringyesThe recording, conferenceRecords//recordings/, from gws_list_meet_recordings. The full name is required.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Get one Gemini smart-notes record for a past Google Meet call: when note-taking started and stopped, its state, and which Google Doc holds the summary. Acts as the named person. METADATA only - pass docsDestination.document to gws_export_drive_file to read the notes. The state reads STARTED, ENDED or FILE_GENERATED, and only FILE_GENERATED means the document is ready.

ParamTypeRequiredDefaultDescription
namestringyesThe smart note, conferenceRecords//smartNotes/, from gws_list_meet_smart_notes. The full name is required.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Get a Google Meet space: its meeting code, its join link, its dial-in numbers, its access and moderation settings, and the conference running in it right now if there is one. Acts as the named person. This tool alone also accepts the MEETING CODE - abc-mnop-xyz - in place of the space id. Google's warning comes with that: a meeting code should not be stored long term, because it can become detached from a space and be reused for a different one later, and it generally expires 365 days after last use. A space with no activeConference has nobody in it.

ParamTypeRequiredDefaultDescription
namestringyesThe meeting space, spaces/, or its bare id, or the meeting code abc-mnop-xyz. Space ids are case sensitive; meeting codes are not.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Get one transcription session of a past Google Meet call: when it started and stopped, its state, and which Google Doc holds the transcript. Acts as the named person. METADATA only - pass docsDestination.document to gws_export_drive_file for the document, or read gws_list_meet_transcript_entries for the speech as data. The state reads STARTED, ENDED or FILE_GENERATED, and only FILE_GENERATED means the document is ready.

ParamTypeRequiredDefaultDescription
namestringyesThe transcript, conferenceRecords//transcripts/, from gws_list_meet_transcripts. The full name is required.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Get one speaker turn from a Google Meet transcript: the transcribed text, the participant who said it, the spoken language and its start and end times. Acts as the named person. The participant field is a participant resource name that gws_get_meet_participant turns into a person.

ParamTypeRequiredDefaultDescription
namestringyesThe entry, conferenceRecords//transcripts//entries/, from gws_list_meet_transcript_entries. The full name is required.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] List the past Google Meet calls one person can see, newest first. Acts as the named person, and shows only the conferences they created or attended. A conference record is one CALL; the space it was held in is a separate, longer-lived thing read with gws_get_meet_space. Google deletes a conference record, and its participants, recordings, transcripts and smart notes, 30 days after the call ends, so older meetings have no record to find. filter takes Google's EBNF over space.meeting_code, space.name, start_time and end_time - for example space.meeting_code = "abc-mnop-xyz", or end_time IS NULL for the call happening right now. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Filter over space.meeting_code, space.name, start_time and end_time. Examples: space.name = "spaces/NAME"; start_time>="2026-01-01T00:00:00.000Z" AND start_time<="2026-01-02T00:00:00.000Z"; end_time IS NULL for the conference still running.
pageSizeintegernonullOptional. Conference records per page, up to 100. Google's default is 25.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] List one attendee's separate join-and-leave sessions within a past Google Meet call, most recent first. Acts as the named person. Google mints a new session id every time the person joins, including a second device or a rejoin after dropping out - which is why one attendee can have many sessions and why attendance time has to be added up across them. filter takes Google's EBNF over start_time and end_time; end_time IS NULL returns the sessions still open. Pages up to 250 at a time.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Filter over start_time and end_time. end_time IS NULL returns the sessions still open.
pageSizeintegernonullOptional. Sessions per page, up to 250. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
parentstringyesThe participant, conferenceRecords//participants/, from gws_list_meet_participants. The full name is required.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] List who attended one past Google Meet call, most recent joiner first. Acts as the named person. Each row is one HUMAN and carries the times they first joined and last left, plus whichever of signedinUser, anonymousUser or phoneUser describes how they got in. filter takes Google's EBNF over earliest_start_time and latest_end_time; Google's own example, latest_end_time IS NULL, returns the people still in the call. For the separate join-and-leave sessions behind one person, use gws_list_meet_participant_sessions. Pages up to 250 at a time. Google deletes a conference record, and its participants, 30 days after the call ends.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Filter over earliest_start_time and latest_end_time. latest_end_time IS NULL returns the people still in the call.
pageSizeintegernonullOptional. Participants per page, up to 250. Google's default is 100.
pageTokenstringnonullOptional. Page token from a previous response.
parentstringyesThe conference record, conferenceRecords/, from gws_list_meet_conference_records. The bare id works too.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] List the recordings made during one past Google Meet call, oldest first. Acts as the named person. METADATA only, not video: each row carries driveDestination.file, the Google Drive file id of the MP4, and driveDestination.exportUri, a browser playback link. To get the video itself, pass that file id to gws_download_drive_file. Each row also carries a state of STARTED, ENDED or FILE_GENERATED, and the MP4 is only there to fetch once the state reaches FILE_GENERATED. Pages up to 100 at a time. Google deletes a conference record, and the pointers to its recordings, 30 days after the call ends - the Drive file itself follows Drive's own retention.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Recordings per page, up to 100. Google's default is 10.
pageTokenstringnonullOptional. Page token from a previous response.
parentstringyesThe conference record, conferenceRecords/, from gws_list_meet_conference_records. The bare id works too.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] List the Gemini "take notes for me" summaries generated during one past Google Meet call, oldest first. Acts as the named person. METADATA only, not the notes: each row carries docsDestination.document, a Google Docs document id, and docsDestination.exportUri to open it in a browser. To read the notes, pass that document id to gws_export_drive_file - a Google Doc has no bytes to download until it is exported. Each row also carries a state of STARTED, ENDED or FILE_GENERATED, and only FILE_GENERATED means the document is ready. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Smart notes per page, up to 100. Google's default is 10.
pageTokenstringnonullOptional. Page token from a previous response.
parentstringyesThe conference record, conferenceRecords/, from gws_list_meet_conference_records. The bare id works too.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Read what was said in a past Google Meet call as structured data: one entry per speaker turn, with the text, who said it, the spoken language and start and end times, oldest first. Acts as the named person. This is the tool that answers questions about a meeting without touching Google Drive. Google's own caveat travels with it: these entries might not match the Google Docs transcript file, because speakers who interleave within milliseconds are resolved differently and because the Docs file can be edited after it is generated. One entry holds up to 10,000 words, so a long meeting is many pages. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Entries per page, up to 100. Google's default is 10.
pageTokenstringnonullOptional. Page token from a previous response.
parentstringyesThe transcript, conferenceRecords//transcripts/, from gws_list_meet_transcripts. The full name is required.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] List the transcription sessions of one past Google Meet call, oldest first. Acts as the named person. METADATA only, not the words: each row carries docsDestination.document, the Google Docs id of the transcript file. Two ways on from here - pass that document id to gws_export_drive_file for the document as Google wrote it, or use gws_list_meet_transcript_entries for the same speech as structured data with speakers and timestamps, which needs no Drive call. Each row carries a state of STARTED, ENDED or FILE_GENERATED, and only FILE_GENERATED means the document is ready. Pages up to 100 at a time.

ParamTypeRequiredDefaultDescription
pageSizeintegernonullOptional. Transcripts per page, up to 100. Google's default is 10.
pageTokenstringnonullOptional. Page token from a previous response.
parentstringyesThe conference record, conferenceRecords/, from gws_list_meet_conference_records. The bare id works too.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

[Google Workspace] Change a Google Meet space's settings - who can join without knocking, whether calls in it are automatically recorded, transcribed or summarised, and how moderation behaves. Acts as the named person. Emails nobody, ends nothing, and leaves any call currently running alone; it is a merge, which is why it is not marked as changing things. ONE VALUE OF updateMask BREAKS THAT: the literal * updates every field AND deletes the ones the body does not set, so a partial body sent with * silently resets the settings it left out. Leave updateMask empty for the plain merge Google defaults to, or name the exact fields, for example config.accessType. Settings live under config, the same shape gws_create_meet_space takes. Turning on autoRecordingGeneration, autoTranscriptionGeneration or autoSmartNotesGeneration means future calls in this space are recorded, transcribed or summarised without anybody being asked again.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesA Space resource as JSON carrying the settings to change, under config - for example {"config":{"accessType":"RESTRICTED"}}.
namestringyesThe meeting space, spaces/ - from gws_create_meet_space, or the space field of a conference record read with gws_list_meet_conference_records or gws_get_meet_conference_record. The bare id works too. This route takes the space ID ONLY. A meeting link ends in the meeting CODE, not the space id (https://meet.google.com/abc-mnop-xyz gives you abc-mnop-xyz), and Google accepts a meeting code as an alias of the space name only when GETTING a space: hand a link or a code to gws_get_meet_space first and use the name it returns here.
updateMaskstringnonullOptional. Which fields to change, comma-separated, for example config.accessType. Leave empty and Google updates only the fields the body carries values for. The literal * updates everything AND deletes fields the body does not set.
userEmailstringyesThe primary email address of the person whose meetings this acts on. Every call acts as that person, and Meet only shows them the spaces and conferences they created or joined.

Keep

ToolPlanAccessSummary
gws_create_keep_noteProWriteCreate a Google Keep note owned by a named person.
gws_delete_keep_noteProDestructivePERMANENTLY delete a Google Keep note belonging to a named person.
gws_download_keep_attachmentFreeRead-onlyDownload the contents of an attachment on a named person's Google Keep note and get back a temporary link to it.
gws_get_keep_noteFreeRead-onlyRead one Google Keep note belonging to a named person — its title, its body (either a block of text or a checklist), the people it is shared with, and the attachments hanging off it.
gws_list_keep_notesFreeRead-onlyList the Google Keep notes belonging to one named person.
gws_share_keep_noteProDestructiveGRANT other people or groups access to a named person's Google Keep note.
gws_unshare_keep_noteProDestructiveREVOKE access to a named person's Google Keep note.

[Google Workspace] Create a Google Keep note owned by a named person. Acts as that person, so the note lands in their own Keep and nobody else can see it until it is shared. bodyJson is a note: title, and body carrying either body.text.text for a block of text or body.list.listItems for a checklist — one or the other, never both. Google's limits are a title under 1,000 characters, a text body under 20,000 characters, and fewer than 1,000 checklist items each under 1,000 characters with at most one level of nesting. Everything else about a note is set by Google and ignored here. This adds a note and changes nothing that already exists. Google restricts the Keep API to Google Workspace organisations that have turned it on, and reaching it needs administrator-level access: a personal Google account cannot use these at all, and an organisation that has not enabled the API answers 403 while every other Google Workspace tool keeps working.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe note as JSON, e.g. {"title": "Renewals", "body": {"text": {"text": "Check the ACME contract"}}}.
userEmailstringyesThe primary email address of the person whose Keep notes this acts on. Every call acts as that person.

[Google Workspace] PERMANENTLY delete a Google Keep note belonging to a named person. Acts as that person, who has to be the note's owner. Google's own words for this call are that deleting a note removes it immediately and cannot be undone: it does NOT go to the trash a person can restore from in the Keep app, and everybody the note was shared with loses access at the same moment. There is no undo and no copy is kept anywhere. Read the note with gws_get_keep_note first if the contents matter. Google restricts the Keep API to Google Workspace organisations that have turned it on, and reaching it needs administrator-level access: a personal Google account cannot use these at all, and an organisation that has not enabled the API answers 403 while every other Google Workspace tool keeps working.

ParamTypeRequiredDefaultDescription
noteNamestringyesThe note to delete, notes/. The bare id works too.
userEmailstringyesThe primary email address of the person whose Keep notes this acts on. Every call acts as that person.

[Google Workspace] Download the contents of an attachment on a named person's Google Keep note and get back a temporary link to it. Acts as that person. attachmentName is the WHOLE name, notes//attachments/, exactly as gws_get_keep_note returns it in the note's attachments list; the attachment id on its own is refused, because it does not say which note the attachment belongs to. mimeType is required and has to be one of the types that same answer lists for the attachment — any other type fails with status 400. The answer is a link, a suggested filename, the size and an expiry, not the file itself. readTtlMinutes sets how long the link lasts, 15 minutes by default and 60 at most. Google restricts the Keep API to Google Workspace organisations that have turned it on, and reaching it needs administrator-level access: a personal Google account cannot use these at all, and an organisation that has not enabled the API answers 403 while every other Google Workspace tool keeps working.

ParamTypeRequiredDefaultDescription
attachmentNamestringyesThe attachment's full name, notes//attachments/, from gws_get_keep_note.
mimeTypestringyesThe media type to fetch, from the attachment's own mimeType list, e.g. image/jpeg.
readTtlMinutesintegernonullOptional. Minutes the download link stays valid: 15 by default, 60 at most.
userEmailstringyesThe primary email address of the person whose Keep notes this acts on. Every call acts as that person.

[Google Workspace] Read one Google Keep note belonging to a named person — its title, its body (either a block of text or a checklist), the people it is shared with, and the attachments hanging off it. Acts as the named person. This is the tool that supplies the two names the rest of the family needs: each attachment's full name for gws_download_keep_attachment, along with the media types that attachment is available in, and each permission's name for gws_unshare_keep_note. Google restricts the Keep API to Google Workspace organisations that have turned it on, and reaching it needs administrator-level access: a personal Google account cannot use these at all, and an organisation that has not enabled the API answers 403 while every other Google Workspace tool keeps working.

ParamTypeRequiredDefaultDescription
noteNamestringyesThe note's resource name, notes/, from gws_list_keep_notes. The bare id works too.
userEmailstringyesThe primary email address of the person whose Keep notes this acts on. Every call acts as that person.

[Google Workspace] List the Google Keep notes belonging to one named person. Acts as that person and reads their own notes; there is no organisation-wide view of everybody's notes here. filter narrows the list, and its field names are spelled with underscores rather than in the camel case the answer uses: the four Google accepts are create_time, update_time, trash_time and trashed — for example trashed=false, or create_time > "2026-01-01T00:00:00Z". Left alone, Google applies the trashed filter itself. Pages up to 100 notes at a time, and that ceiling is StackJack's own: Google publishes no maximum for this call, so asking for more would be an unbounded read. Google restricts the Keep API to Google Workspace organisations that have turned it on, and reaching it needs administrator-level access: a personal Google account cannot use these at all, and an organisation that has not enabled the API answers 403 while every other Google Workspace tool keeps working.

ParamTypeRequiredDefaultDescription
filterstringnonullOptional. Filter over create_time, update_time, trash_time or trashed, e.g. trashed=false.
pageSizeintegernonullOptional. Notes per page, up to 100.
pageTokenstringnonullOptional. Page token from a previous response.
userEmailstringyesThe primary email address of the person whose Keep notes this acts on. Every call acts as that person.

[Google Workspace] GRANT other people or groups access to a named person's Google Keep note. Acts as that person. Google publishes no caller-role requirement on this call — unlike gws_delete_keep_note, where Google does require the OWNER role — so a writer on the note can share it as well as its owner. Everyone named gets the WRITER role, which is the only role this call is allowed to create, and a writer can read the note, change what is in it, and change who else it is shared with. bodyJson is {"requests": [{"permission": {"role": "WRITER", "email": "someone@example.com"}}]}, and a group's address works in place of a person's. The request is all-or-nothing: if one grant fails, none of them is made. Google publishes no setting to suppress a notification on this call, so whether the new collaborator is emailed is Google's choice rather than one this tool can make. Taking the access back afterwards is gws_unshare_keep_note. Google restricts the Keep API to Google Workspace organisations that have turned it on, and reaching it needs administrator-level access: a personal Google account cannot use these at all, and an organisation that has not enabled the API answers 403 while every other Google Workspace tool keeps working.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe grants as JSON, e.g. {"requests": [{"permission": {"role": "WRITER", "email": "someone@example.com"}}]}.
noteNamestringyesThe note to share, notes/. The bare id works too.
userEmailstringyesThe primary email address of the person whose Keep notes this acts on. Every call acts as that person.

[Google Workspace] REVOKE access to a named person's Google Keep note. Acts as that person. Google publishes no caller-role requirement on this call — unlike gws_delete_keep_note, where Google does require the OWNER role — and the WRITER role carries the ability to change a note's permissions, so a writer, as well as the owner, can revoke access. Google's words are that the people named lose access immediately. bodyJson is {"names": ["notes//permissions/"]}, and those permission names come from reading the note with gws_get_keep_note — they are not email addresses. The owner's own access cannot be removed. The request is all-or-nothing: a permission name that is not on the note fails the whole call with status 400 and nothing is changed. Google restricts the Keep API to Google Workspace organisations that have turned it on, and reaching it needs administrator-level access: a personal Google account cannot use these at all, and an organisation that has not enabled the API answers 403 while every other Google Workspace tool keeps working.

ParamTypeRequiredDefaultDescription
bodyJsonstringyesThe permissions to remove as JSON, e.g. {"names": ["notes/abc/permissions/def"]}.
noteNamestringyesThe note to revoke access to, notes/. The bare id works too.
userEmailstringyesThe primary email address of the person whose Keep notes this acts on. Every call acts as that person.