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 — 15 tools
- Groups — 9 tools
- Group Members — 7 tools
- Organizational Units — 6 tools
- ChromeOS Devices — 9 tools
- Mobile Devices — 4 tools
- Domains — 8 tools
- Chrome Policy — 13 tools
- Vault — 29 tools
- Licences — 7 tools
- Alert Center — 11 tools
- Reports — 4 tools
- Group Settings — 3 tools
- Data Transfer — 5 tools
- Calendar Resources — 19 tools
- Custom User Schemas — 6 tools
- Account Security — 10 tools
- Admin Roles — 11 tools
- Customer — 3 tools
- Shared Drives — 7 tools
- Gmail Settings — 44 tools
- Reseller — 17 tools
- Cloud Channel — 60 tools
- Cloud Identity — 69 tools
- Chrome Management — 49 tools
- Gmail content — 32 tools
- Drive files — 48 tools
- Calendar — 33 tools
- People — 24 tools
- Tasks — 14 tools
- Chat — 51 tools
- Meet — 18 tools
- Keep — 7 tools
Users
gws_create_user details
gws_create_user details
[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.
gws_create_user_alias details
gws_create_user_alias details
[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.
gws_delete_user details
gws_delete_user details
[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.
gws_delete_user_alias details
gws_delete_user_alias details
[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.
gws_delete_user_photo details
gws_delete_user_photo details
[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.
gws_get_user details
gws_get_user details
[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.
gws_get_user_photo details
gws_get_user_photo details
[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.
gws_list_user_aliases details
gws_list_user_aliases details
[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.
gws_list_users details
gws_list_users details
[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.
gws_make_user_admin details
gws_make_user_admin details
[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.
gws_patch_user details
gws_patch_user details
[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.
gws_sign_out_user details
gws_sign_out_user details
[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.
gws_undelete_user details
gws_undelete_user details
[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 "/".
gws_update_user details
gws_update_user details
[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.
gws_update_user_photo details
gws_update_user_photo details
[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"}.
Groups
gws_create_group details
gws_create_group details
[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.
gws_create_group_alias details
gws_create_group_alias details
[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.
gws_delete_group details
gws_delete_group details
[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.
gws_delete_group_alias details
gws_delete_group_alias details
[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.
gws_get_group details
gws_get_group details
[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.
gws_list_group_aliases details
gws_list_group_aliases details
[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.
gws_list_groups details
gws_list_groups details
[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.
gws_patch_group details
gws_patch_group details
[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.
gws_update_group details
gws_update_group details
[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.
Group Members
gws_add_group_member details
gws_add_group_member details
[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.
gws_check_group_membership details
gws_check_group_membership details
[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.
gws_get_group_member details
gws_get_group_member details
[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.
gws_list_group_members details
gws_list_group_members details
[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.
gws_patch_group_member details
gws_patch_group_member details
[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.
gws_remove_group_member details
gws_remove_group_member details
[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.
gws_update_group_member details
gws_update_group_member details
[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.
Organizational Units
gws_create_org_unit details
gws_create_org_unit details
[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.
gws_delete_org_unit details
gws_delete_org_unit details
[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.
gws_get_org_unit details
gws_get_org_unit details
[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.
gws_list_org_units details
gws_list_org_units details
[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.
gws_patch_org_unit details
gws_patch_org_unit details
[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.
gws_update_org_unit details
gws_update_org_unit details
[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.
ChromeOS Devices
gws_batch_change_chromeos_device_status details
gws_batch_change_chromeos_device_status details
[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.
gws_count_chromeos_devices details
gws_count_chromeos_devices details
[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.
gws_get_chromeos_device details
gws_get_chromeos_device details
[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.
gws_get_chromeos_device_command details
gws_get_chromeos_device_command details
[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.
gws_issue_chromeos_device_command details
gws_issue_chromeos_device_command details
[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.
gws_list_chromeos_devices details
gws_list_chromeos_devices details
[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.
gws_move_chromeos_devices_to_org_unit details
gws_move_chromeos_devices_to_org_unit details
[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".
gws_patch_chromeos_device details
gws_patch_chromeos_device details
[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.
gws_update_chromeos_device details
gws_update_chromeos_device details
[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.
Mobile Devices
gws_delete_mobile_device details
gws_delete_mobile_device details
[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.
gws_get_mobile_device details
gws_get_mobile_device details
[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.
gws_issue_mobile_device_action details
gws_issue_mobile_device_action details
[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.
gws_list_mobile_devices details
gws_list_mobile_devices details
[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.
Domains
gws_create_domain details
gws_create_domain details
[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"}.
gws_create_domain_alias details
gws_create_domain_alias details
[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"}.
gws_delete_domain details
gws_delete_domain details
[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.
gws_delete_domain_alias details
gws_delete_domain_alias details
[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.
gws_get_domain details
gws_get_domain details
[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.
gws_get_domain_alias details
gws_get_domain_alias details
[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.
gws_list_domain_aliases details
gws_list_domain_aliases details
[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.
gws_list_domains details
gws_list_domains details
[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.
Chrome Policy
gws_batch_delete_chrome_group_policies details
gws_batch_delete_chrome_group_policies details
[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.
gws_batch_inherit_chrome_org_unit_policies details
gws_batch_inherit_chrome_org_unit_policies details
[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.
gws_batch_modify_chrome_group_policies details
gws_batch_modify_chrome_group_policies details
[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.
gws_batch_modify_chrome_org_unit_policies details
gws_batch_modify_chrome_org_unit_policies details
[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.
gws_define_chrome_certificate details
gws_define_chrome_certificate details
[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.
gws_define_chrome_network details
gws_define_chrome_network details
[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.
gws_get_chrome_policy_schema details
gws_get_chrome_policy_schema details
[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?".
gws_list_chrome_group_policy_priority details
gws_list_chrome_group_policy_priority details
[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"}.
gws_list_chrome_policy_schemas details
gws_list_chrome_policy_schemas details
[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.
gws_remove_chrome_certificate details
gws_remove_chrome_certificate details
[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.
gws_remove_chrome_network details
gws_remove_chrome_network details
[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.
gws_reorder_chrome_group_policies details
gws_reorder_chrome_group_policies details
[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.
gws_resolve_chrome_policies details
gws_resolve_chrome_policies details
[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"}}.
Vault
gws_add_vault_held_accounts details
gws_add_vault_held_accounts details
[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.
gws_add_vault_matter_permission details
gws_add_vault_matter_permission details
[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.
gws_close_vault_matter details
gws_close_vault_matter details
[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.
gws_count_vault_matter_accounts details
gws_count_vault_matter_accounts details
[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.
gws_create_vault_export details
gws_create_vault_export details
[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.
gws_create_vault_held_account details
gws_create_vault_held_account details
[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"}.
gws_create_vault_hold details
gws_create_vault_hold details
[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.
gws_create_vault_matter details
gws_create_vault_matter details
[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.
gws_create_vault_saved_query details
gws_create_vault_saved_query details
[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.
gws_delete_vault_export details
gws_delete_vault_export details
[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.
gws_delete_vault_held_account details
gws_delete_vault_held_account details
[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.
gws_delete_vault_hold details
gws_delete_vault_hold details
[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.
gws_delete_vault_matter details
gws_delete_vault_matter details
[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.
gws_delete_vault_saved_query details
gws_delete_vault_saved_query details
[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.
gws_get_vault_export details
gws_get_vault_export details
[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.
gws_get_vault_hold details
gws_get_vault_hold details
[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.
gws_get_vault_matter details
gws_get_vault_matter details
[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.
gws_get_vault_saved_query details
gws_get_vault_saved_query details
[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.
gws_list_vault_exports details
gws_list_vault_exports details
[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.
gws_list_vault_held_accounts details
gws_list_vault_held_accounts details
[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.
gws_list_vault_holds details
gws_list_vault_holds details
[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.
gws_list_vault_matters details
gws_list_vault_matters details
[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.
gws_list_vault_saved_queries details
gws_list_vault_saved_queries details
[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.
gws_remove_vault_held_accounts details
gws_remove_vault_held_accounts details
[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.
gws_remove_vault_matter_permission details
gws_remove_vault_matter_permission details
[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.
gws_reopen_vault_matter details
gws_reopen_vault_matter details
[Google Workspace] Reopen a closed Vault matter so work can continue in it. Not destructive — it restores the matter to OPEN.
gws_undelete_vault_matter details
gws_undelete_vault_matter details
[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.
gws_update_vault_hold details
gws_update_vault_hold details
[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.
gws_update_vault_matter details
gws_update_vault_matter details
[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.
Licences
gws_create_license_assignment details
gws_create_license_assignment details
[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.
gws_delete_license_assignment details
gws_delete_license_assignment details
[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.
gws_get_license_assignment details
gws_get_license_assignment details
[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.
gws_list_license_assignments_for_product details
gws_list_license_assignments_for_product details
[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.
gws_list_license_assignments_for_sku details
gws_list_license_assignments_for_sku details
[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.
gws_patch_license_assignment details
gws_patch_license_assignment details
[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"}.
gws_update_license_assignment details
gws_update_license_assignment details
[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.
Alert Center
gws_batch_delete_alerts details
gws_batch_delete_alerts details
[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.
gws_batch_undelete_alerts details
gws_batch_undelete_alerts details
[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.
gws_create_alert_feedback details
gws_create_alert_feedback details
[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.
gws_delete_alert details
gws_delete_alert details
[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.
gws_get_alert details
gws_get_alert details
[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.
gws_get_alert_metadata details
gws_get_alert_metadata details
[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.
gws_get_alert_settings details
gws_get_alert_settings details
[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.
gws_list_alert_feedback details
gws_list_alert_feedback details
[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.
gws_list_alerts details
gws_list_alerts details
[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.
gws_patch_alert_settings details
gws_patch_alert_settings details
[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.
gws_undelete_alert details
gws_undelete_alert details
[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.
Reports
gws_get_customer_usage_report details
gws_get_customer_usage_report details
[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.
gws_get_entity_usage_report details
gws_get_entity_usage_report details
[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.
gws_get_user_usage_report details
gws_get_user_usage_report details
[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.
gws_list_audit_activities details
gws_list_audit_activities details
[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.
Group Settings
gws_get_group_settings details
gws_get_group_settings details
[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.
gws_patch_group_settings details
gws_patch_group_settings details
[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.
gws_update_group_settings details
gws_update_group_settings details
[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.
Data Transfer
gws_create_data_transfer details
gws_create_data_transfer details
[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.
gws_get_data_transfer details
gws_get_data_transfer details
[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.
gws_get_transfer_application details
gws_get_transfer_application details
[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.
gws_list_data_transfers details
gws_list_data_transfers details
[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.
gws_list_transfer_applications details
gws_list_transfer_applications details
[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.
Calendar Resources
gws_create_building details
gws_create_building details
[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.
gws_create_calendar_feature details
gws_create_calendar_feature details
[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.
gws_create_calendar_resource details
gws_create_calendar_resource details
[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.
gws_delete_building details
gws_delete_building details
[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.
gws_delete_calendar_feature details
gws_delete_calendar_feature details
[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.
gws_delete_calendar_resource details
gws_delete_calendar_resource details
[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.
gws_get_building details
gws_get_building details
[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.
gws_get_calendar_feature details
gws_get_calendar_feature details
[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.
gws_get_calendar_resource details
gws_get_calendar_resource details
[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.
gws_list_buildings details
gws_list_buildings details
[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.
gws_list_calendar_features details
gws_list_calendar_features details
[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.
gws_list_calendar_resources details
gws_list_calendar_resources details
[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.
gws_patch_building details
gws_patch_building details
[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.
gws_patch_calendar_feature details
gws_patch_calendar_feature details
[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.
gws_patch_calendar_resource details
gws_patch_calendar_resource details
[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.
gws_rename_calendar_feature details
gws_rename_calendar_feature details
[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.
gws_update_building details
gws_update_building details
[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.
gws_update_calendar_feature details
gws_update_calendar_feature details
[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.
gws_update_calendar_resource details
gws_update_calendar_resource details
[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.
Custom User Schemas
gws_create_schema details
gws_create_schema details
[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.
gws_delete_schema details
gws_delete_schema details
[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".
gws_get_schema details
gws_get_schema details
[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).
gws_list_schemas details
gws_list_schemas details
[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.
gws_patch_schema details
gws_patch_schema details
[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.
gws_update_schema details
gws_update_schema details
[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.
Account Security
gws_delete_user_app_password details
gws_delete_user_app_password details
[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.
gws_delete_user_token details
gws_delete_user_token details
[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.
gws_generate_user_verification_codes details
gws_generate_user_verification_codes details
[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.
gws_get_user_app_password details
gws_get_user_app_password details
[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.
gws_get_user_token details
gws_get_user_token details
[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.
gws_invalidate_user_verification_codes details
gws_invalidate_user_verification_codes details
[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.
gws_list_user_app_passwords details
gws_list_user_app_passwords details
[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.
gws_list_user_tokens details
gws_list_user_tokens details
[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.
gws_list_user_verification_codes details
gws_list_user_verification_codes details
[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.
gws_turn_off_user_two_step_verification details
gws_turn_off_user_two_step_verification details
[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.
Admin Roles
gws_create_role details
gws_create_role details
[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.
gws_create_role_assignment details
gws_create_role_assignment details
[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.
gws_delete_role details
gws_delete_role details
[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.
gws_delete_role_assignment details
gws_delete_role_assignment details
[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.
gws_get_role details
gws_get_role details
[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.
gws_get_role_assignment details
gws_get_role_assignment details
[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.
gws_list_privileges details
gws_list_privileges details
[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.
gws_list_role_assignments details
gws_list_role_assignments details
[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.
gws_list_roles details
gws_list_roles details
[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.
gws_patch_role details
gws_patch_role details
[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.
gws_update_role details
gws_update_role details
[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.
Customer
gws_get_customer details
gws_get_customer details
[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.
gws_patch_customer details
gws_patch_customer details
[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.
gws_update_customer details
gws_update_customer details
[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.
Shared Drives
gws_create_shared_drive details
gws_create_shared_drive details
gws_delete_shared_drive details
gws_delete_shared_drive details
gws_get_shared_drive details
gws_get_shared_drive details
gws_hide_shared_drive details
gws_hide_shared_drive details
gws_list_shared_drives details
gws_list_shared_drives details
gws_patch_shared_drive details
gws_patch_shared_drive details
gws_unhide_shared_drive details
gws_unhide_shared_drive details
Gmail Settings
gws_create_gmail_cse_identity details
gws_create_gmail_cse_identity details
[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.
gws_create_gmail_cse_keypair details
gws_create_gmail_cse_keypair details
[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.
gws_create_gmail_delegate details
gws_create_gmail_delegate details
[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.
gws_create_gmail_filter details
gws_create_gmail_filter details
[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).
gws_create_gmail_forwarding_address details
gws_create_gmail_forwarding_address details
[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.
gws_create_gmail_send_as_alias details
gws_create_gmail_send_as_alias details
[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.
gws_delete_gmail_cse_identity details
gws_delete_gmail_cse_identity details
[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.
gws_delete_gmail_delegate details
gws_delete_gmail_delegate details
[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.
gws_delete_gmail_filter details
gws_delete_gmail_filter details
[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.
gws_delete_gmail_forwarding_address details
gws_delete_gmail_forwarding_address details
[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.
gws_delete_gmail_send_as_alias details
gws_delete_gmail_send_as_alias details
[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.
gws_delete_gmail_smime_info details
gws_delete_gmail_smime_info details
[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.
gws_disable_gmail_cse_keypair details
gws_disable_gmail_cse_keypair details
[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.
gws_enable_gmail_cse_keypair details
gws_enable_gmail_cse_keypair details
[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.
gws_get_gmail_auto_forwarding details
gws_get_gmail_auto_forwarding details
[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.
gws_get_gmail_cse_identity details
gws_get_gmail_cse_identity details
[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.
gws_get_gmail_cse_keypair details
gws_get_gmail_cse_keypair details
[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.
gws_get_gmail_delegate details
gws_get_gmail_delegate details
[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.
gws_get_gmail_filter details
gws_get_gmail_filter details
[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.
gws_get_gmail_forwarding_address details
gws_get_gmail_forwarding_address details
[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.
gws_get_gmail_imap_settings details
gws_get_gmail_imap_settings details
[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.
gws_get_gmail_language_settings details
gws_get_gmail_language_settings details
[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.
gws_get_gmail_pop_settings details
gws_get_gmail_pop_settings details
[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.
gws_get_gmail_send_as_alias details
gws_get_gmail_send_as_alias details
[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.
gws_get_gmail_smime_info details
gws_get_gmail_smime_info details
[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.
gws_get_gmail_vacation_settings details
gws_get_gmail_vacation_settings details
[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.
gws_insert_gmail_smime_info details
gws_insert_gmail_smime_info details
[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.
gws_list_gmail_cse_identities details
gws_list_gmail_cse_identities details
[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.
gws_list_gmail_cse_keypairs details
gws_list_gmail_cse_keypairs details
[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.
gws_list_gmail_delegates details
gws_list_gmail_delegates details
[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.
gws_list_gmail_filters details
gws_list_gmail_filters details
[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.
gws_list_gmail_forwarding_addresses details
gws_list_gmail_forwarding_addresses details
[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.
gws_list_gmail_send_as_aliases details
gws_list_gmail_send_as_aliases details
[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.
gws_list_gmail_smime_info details
gws_list_gmail_smime_info details
[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.
gws_patch_gmail_cse_identity details
gws_patch_gmail_cse_identity details
[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.
gws_patch_gmail_send_as_alias details
gws_patch_gmail_send_as_alias details
[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.
gws_set_default_gmail_smime_info details
gws_set_default_gmail_smime_info details
[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.
gws_update_gmail_auto_forwarding details
gws_update_gmail_auto_forwarding details
[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).
gws_update_gmail_imap_settings details
gws_update_gmail_imap_settings details
[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.
gws_update_gmail_language_settings details
gws_update_gmail_language_settings details
[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.
gws_update_gmail_pop_settings details
gws_update_gmail_pop_settings details
[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.
gws_update_gmail_send_as_alias details
gws_update_gmail_send_as_alias details
[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.
gws_update_gmail_vacation_settings details
gws_update_gmail_vacation_settings details
[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).
gws_verify_gmail_send_as_alias details
gws_verify_gmail_send_as_alias details
[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.
Reseller
gws_activate_reseller_subscription details
gws_activate_reseller_subscription details
[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.
gws_change_reseller_subscription_plan details
gws_change_reseller_subscription_plan details
[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.
gws_change_reseller_subscription_renewal details
gws_change_reseller_subscription_renewal details
[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.
gws_change_reseller_subscription_seats details
gws_change_reseller_subscription_seats details
[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.
gws_create_reseller_customer details
gws_create_reseller_customer details
[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.
gws_create_reseller_subscription details
gws_create_reseller_subscription details
[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.
gws_delete_reseller_subscription details
gws_delete_reseller_subscription details
[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.
gws_get_reseller_customer details
gws_get_reseller_customer details
[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.
gws_get_reseller_notify_details details
gws_get_reseller_notify_details details
[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.
gws_get_reseller_subscription details
gws_get_reseller_subscription details
[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.
gws_list_reseller_subscriptions details
gws_list_reseller_subscriptions details
[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.
gws_patch_reseller_customer details
gws_patch_reseller_customer details
[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"}.
gws_register_reseller_notify details
gws_register_reseller_notify details
[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.
gws_start_reseller_subscription_paid_service details
gws_start_reseller_subscription_paid_service details
[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.
gws_suspend_reseller_subscription details
gws_suspend_reseller_subscription details
[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.
gws_unregister_reseller_notify details
gws_unregister_reseller_notify details
[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.
gws_update_reseller_customer details
gws_update_reseller_customer details
[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.
Cloud Channel
gws_activate_channel_entitlement details
gws_activate_channel_entitlement details
[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.
gws_cancel_channel_entitlement details
gws_cancel_channel_entitlement details
[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":"..."}.
gws_change_channel_entitlement_offer details
gws_change_channel_entitlement_offer details
[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":"..."}.
gws_change_channel_entitlement_parameters details
gws_change_channel_entitlement_parameters details
[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":"..."}.
gws_change_channel_entitlement_renewal details
gws_change_channel_entitlement_renewal details
[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.
gws_check_channel_cloud_identity_accounts details
gws_check_channel_cloud_identity_accounts details
[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.
gws_create_channel_customer details
gws_create_channel_customer details
[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"}}.
gws_create_channel_customer_repricing_config details
gws_create_channel_customer_repricing_config details
[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":}}.
gws_create_channel_entitlement details
gws_create_channel_entitlement details
[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.
gws_create_channel_partner_customer details
gws_create_channel_partner_customer details
[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"}}.
gws_create_channel_partner_link details
gws_create_channel_partner_link details
[Google Workspace] Invite a sub-reseller to sell under this reseller account. NOT marked as changing things: the link starts in an invited state and orders nothing — the sub-reseller has to accept it, and no customer and no bill is touched until they do. Body is Google's ChannelPartnerLink: {"resellerCloudIdentityId":"C01234abc","linkState":"INVITED"}. The response carries the invite link to send them.
gws_create_channel_partner_repricing_config details
gws_create_channel_partner_repricing_config details
[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"}}.
gws_delete_channel_customer details
gws_delete_channel_customer details
[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.
gws_delete_channel_customer_repricing_config details
gws_delete_channel_customer_repricing_config details
[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.
gws_delete_channel_partner_customer details
gws_delete_channel_partner_customer details
[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.
gws_delete_channel_partner_repricing_config details
gws_delete_channel_partner_repricing_config details
[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.
gws_fetch_channel_report_results details
gws_fetch_channel_report_results details
[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":["..."]}.
gws_get_channel_customer details
gws_get_channel_customer details
[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.
gws_get_channel_customer_repricing_config details
gws_get_channel_customer_repricing_config details
[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.
gws_get_channel_entitlement details
gws_get_channel_entitlement details
[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.
gws_get_channel_operation details
gws_get_channel_operation details
[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.
gws_get_channel_partner_customer details
gws_get_channel_partner_customer details
[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.
gws_get_channel_partner_link details
gws_get_channel_partner_link details
[Google Workspace] Get 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. Get the id from gws_list_channel_partner_links.
gws_get_channel_partner_repricing_config details
gws_get_channel_partner_repricing_config details
[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.
gws_import_channel_customer details
gws_import_channel_customer details
[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}.
gws_import_channel_partner_customer details
gws_import_channel_partner_customer details
[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.
gws_list_channel_billable_skus details
gws_list_channel_billable_skus details
[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.
gws_list_channel_customer_repricing_configs details
gws_list_channel_customer_repricing_configs details
[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.
gws_list_channel_customers details
gws_list_channel_customers details
[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.
gws_list_channel_entitlement_changes details
gws_list_channel_entitlement_changes details
[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.
gws_list_channel_entitlements details
gws_list_channel_entitlements details
[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.
gws_list_channel_offers details
gws_list_channel_offers details
[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.
gws_list_channel_operations details
gws_list_channel_operations details
[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.
gws_list_channel_partner_customers details
gws_list_channel_partner_customers details
[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.
gws_list_channel_partner_links details
gws_list_channel_partner_links details
[Google Workspace] List the channel partner links under this reseller — the sub-resellers, or 'distributors below you', that sell on this account's behalf. This is where a channelPartnerLinkId comes from, and every partner-scoped customer and repricing tool needs one. view selects how much of each link is returned and takes one of UNSPECIFIED, BASIC or FULL. Paginates with pageToken/nextPageToken; pageSize is clamped to 200, which is Google's own maximum.
gws_list_channel_partner_repricing_configs details
gws_list_channel_partner_repricing_configs details
[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.
gws_list_channel_product_skus details
gws_list_channel_product_skus details
[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.
gws_list_channel_products details
gws_list_channel_products details
[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.
gws_list_channel_purchasable_offers details
gws_list_channel_purchasable_offers details
[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.
gws_list_channel_purchasable_skus details
gws_list_channel_purchasable_skus details
[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.
gws_list_channel_reports details
gws_list_channel_reports details
[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.
gws_list_channel_sku_groups details
gws_list_channel_sku_groups details
[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.
gws_list_channel_subscribers details
gws_list_channel_subscribers details
[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.
gws_list_channel_transferable_offers details
gws_list_channel_transferable_offers details
[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.
gws_list_channel_transferable_skus details
gws_list_channel_transferable_skus details
[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.
gws_lookup_channel_entitlement_offer details
gws_lookup_channel_entitlement_offer details
[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.
gws_patch_channel_customer details
gws_patch_channel_customer details
[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.
gws_patch_channel_customer_repricing_config details
gws_patch_channel_customer_repricing_config details
[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"}}}}}.
gws_patch_channel_partner_customer details
gws_patch_channel_partner_customer details
[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.
gws_patch_channel_partner_link details
gws_patch_channel_partner_link details
[Google Workspace] Change a channel partner link's state — chiefly to suspend a sub-reseller or to reinstate one. A merging PATCH: nothing you leave out of the update mask is touched, and no customer's entitlement or bill changes here. Body is Google's UpdateChannelPartnerLinkRequest, which wraps the link and the mask: {"channelPartnerLink":{"linkState":"SUSPENDED"},"updateMask":"link_state"}. Suspending a link stops the sub-reseller transacting; their customers' existing entitlements are not cancelled by this call.
gws_patch_channel_partner_repricing_config details
gws_patch_channel_partner_repricing_config details
[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.
gws_provision_channel_cloud_identity details
gws_provision_channel_cloud_identity details
[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"}}.
gws_query_channel_eligible_billing_accounts details
gws_query_channel_eligible_billing_accounts details
[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.
gws_register_channel_subscriber details
gws_register_channel_subscriber details
[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.
gws_run_channel_report details
gws_run_channel_report details
[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"}.
gws_start_channel_entitlement_paid_service details
gws_start_channel_entitlement_paid_service details
[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":"..."}.
gws_suspend_channel_entitlement details
gws_suspend_channel_entitlement details
[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":"..."}.
gws_transfer_channel_entitlements details
gws_transfer_channel_entitlements details
[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.
gws_transfer_channel_entitlements_to_google details
gws_transfer_channel_entitlements_to_google details
[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"}]}.
gws_unregister_channel_subscriber details
gws_unregister_channel_subscriber details
[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.
Cloud Identity
gws_add_identity_saml_idp_credential details
gws_add_identity_saml_idp_credential details
[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.
gws_approve_identity_device_user details
gws_approve_identity_device_user details
[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.
gws_block_identity_device_user details
gws_block_identity_device_user details
[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.
gws_cancel_identity_device_user_wipe details
gws_cancel_identity_device_user_wipe details
[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.
gws_cancel_identity_device_wipe details
gws_cancel_identity_device_wipe details
[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.
gws_cancel_identity_user_invitation details
gws_cancel_identity_user_invitation details
[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.
gws_check_identity_transitive_membership details
gws_check_identity_transitive_membership details
[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.
gws_check_identity_user_invitable details
gws_check_identity_user_invitable details
[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.
gws_create_identity_allowlisted_domain details
gws_create_identity_allowlisted_domain details
[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.
gws_create_identity_device details
gws_create_identity_device details
[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.
gws_create_identity_group details
gws_create_identity_group details
[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.
gws_create_identity_membership details
gws_create_identity_membership details
[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.
gws_create_identity_oidc_sso_profile details
gws_create_identity_oidc_sso_profile details
[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.
gws_create_identity_policy details
gws_create_identity_policy details
[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".
gws_create_identity_saml_sso_profile details
gws_create_identity_saml_sso_profile details
[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.
gws_create_identity_sso_assignment details
gws_create_identity_sso_assignment details
[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.
gws_delete_identity_allowlisted_domain details
gws_delete_identity_allowlisted_domain details
[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.
gws_delete_identity_device details
gws_delete_identity_device details
[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.
gws_delete_identity_device_user details
gws_delete_identity_device_user details
[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.
gws_delete_identity_group details
gws_delete_identity_group details
[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.
gws_delete_identity_membership details
gws_delete_identity_membership details
[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.
gws_delete_identity_oidc_sso_profile details
gws_delete_identity_oidc_sso_profile details
[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.
gws_delete_identity_policy details
gws_delete_identity_policy details
[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.
gws_delete_identity_saml_idp_credential details
gws_delete_identity_saml_idp_credential details
[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.
gws_delete_identity_saml_sso_profile details
gws_delete_identity_saml_sso_profile details
[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.
gws_delete_identity_sso_assignment details
gws_delete_identity_sso_assignment details
[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.
gws_get_identity_allowlisted_domain details
gws_get_identity_allowlisted_domain details
[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.
gws_get_identity_device details
gws_get_identity_device details
[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.
gws_get_identity_device_client_state details
gws_get_identity_device_client_state details
[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.
gws_get_identity_device_user details
gws_get_identity_device_user details
[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.
gws_get_identity_group details
gws_get_identity_group details
[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.
gws_get_identity_group_security_settings details
gws_get_identity_group_security_settings details
[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.
gws_get_identity_membership details
gws_get_identity_membership details
[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.
gws_get_identity_membership_graph details
gws_get_identity_membership_graph details
[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.
gws_get_identity_oidc_sso_profile details
gws_get_identity_oidc_sso_profile details
[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.
gws_get_identity_policy details
gws_get_identity_policy details
[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.
gws_get_identity_saml_idp_credential details
gws_get_identity_saml_idp_credential details
[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.
gws_get_identity_saml_sso_profile details
gws_get_identity_saml_sso_profile details
[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.
gws_get_identity_sso_assignment details
gws_get_identity_sso_assignment details
[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.
gws_get_identity_user_invitation details
gws_get_identity_user_invitation details
[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.
gws_list_identity_allowlisted_domains details
gws_list_identity_allowlisted_domains details
[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.
gws_list_identity_device_client_states details
gws_list_identity_device_client_states details
[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.
gws_list_identity_device_users details
gws_list_identity_device_users details
[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.
gws_list_identity_devices details
gws_list_identity_devices details
[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.
gws_list_identity_groups details
gws_list_identity_groups details
[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.
gws_list_identity_memberships details
gws_list_identity_memberships details
[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.
gws_list_identity_oidc_sso_profiles details
gws_list_identity_oidc_sso_profiles details
[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.
gws_list_identity_policies details
gws_list_identity_policies details
[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.
gws_list_identity_saml_idp_credentials details
gws_list_identity_saml_idp_credentials details
[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.
gws_list_identity_saml_sso_profiles details
gws_list_identity_saml_sso_profiles details
[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.
gws_list_identity_sso_assignments details
gws_list_identity_sso_assignments details
[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.
gws_list_identity_user_invitations details
gws_list_identity_user_invitations details
[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.
gws_lookup_identity_device_users details
gws_lookup_identity_device_users details
[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.
gws_lookup_identity_group details
gws_lookup_identity_group details
[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/.
gws_lookup_identity_membership details
gws_lookup_identity_membership details
[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/.
gws_modify_identity_membership_roles details
gws_modify_identity_membership_roles details
[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"]}.
gws_patch_identity_group details
gws_patch_identity_group details
[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"}.
gws_patch_identity_oidc_sso_profile details
gws_patch_identity_oidc_sso_profile details
[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.
gws_patch_identity_policy details
gws_patch_identity_policy details
[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.
gws_patch_identity_saml_sso_profile details
gws_patch_identity_saml_sso_profile details
[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.
gws_patch_identity_sso_assignment details
gws_patch_identity_sso_assignment details
[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.
gws_search_identity_direct_groups details
gws_search_identity_direct_groups details
[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.
gws_search_identity_groups details
gws_search_identity_groups details
[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.
gws_search_identity_transitive_groups details
gws_search_identity_transitive_groups details
[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.
gws_search_identity_transitive_memberships details
gws_search_identity_transitive_memberships details
[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.
gws_send_identity_user_invitation details
gws_send_identity_user_invitation details
[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.
gws_update_identity_group_security_settings details
gws_update_identity_group_security_settings details
[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'"}}.
gws_wipe_identity_device details
gws_wipe_identity_device details
[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.
gws_wipe_identity_device_user details
gws_wipe_identity_device_user details
[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.
Chrome Management
gws_count_chrome_active_devices details
gws_count_chrome_active_devices details
[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.
gws_count_chrome_app_requests details
gws_count_chrome_app_requests details
[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.
gws_count_chrome_browsers_needing_attention details
gws_count_chrome_browsers_needing_attention details
[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.
gws_count_chrome_crash_events details
gws_count_chrome_crash_events details
[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.
gws_count_chrome_devices_needing_attention details
gws_count_chrome_devices_needing_attention details
[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.
gws_count_chrome_devices_per_boot_type details
gws_count_chrome_devices_per_boot_type details
[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.
gws_count_chrome_devices_per_release_channel details
gws_count_chrome_devices_per_release_channel details
[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.
gws_count_chrome_devices_reaching_auto_expiration details
gws_count_chrome_devices_reaching_auto_expiration details
[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.
gws_count_chrome_hardware_fleet_devices details
gws_count_chrome_hardware_fleet_devices details
[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.
gws_count_chrome_installed_apps details
gws_count_chrome_installed_apps details
[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.
gws_count_chrome_print_jobs_by_printer details
gws_count_chrome_print_jobs_by_printer details
[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.
gws_count_chrome_print_jobs_by_user details
gws_count_chrome_print_jobs_by_user details
[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.
gws_count_chrome_profile_versions details
gws_count_chrome_profile_versions details
[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.
gws_count_chrome_versions details
gws_count_chrome_versions details
[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.
gws_create_chrome_connector_config details
gws_create_chrome_connector_config details
[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.
gws_create_chrome_profile_command details
gws_create_chrome_profile_command details
[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.
gws_create_chrome_telemetry_notification_config details
gws_create_chrome_telemetry_notification_config details
[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.
gws_delete_chrome_connector_config details
gws_delete_chrome_connector_config details
[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.
gws_delete_chrome_profile details
gws_delete_chrome_profile details
[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.
gws_delete_chrome_telemetry_notification_config details
gws_delete_chrome_telemetry_notification_config details
[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.
gws_disable_chrome_security_insights details
gws_disable_chrome_security_insights details
[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.
gws_enable_chrome_security_insights details
gws_enable_chrome_security_insights details
[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.
gws_find_chrome_installed_app_devices details
gws_find_chrome_installed_app_devices details
[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.
gws_find_chrome_installed_app_profiles details
gws_find_chrome_installed_app_profiles details
[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.
gws_get_chrome_android_app details
gws_get_chrome_android_app details
[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.
gws_get_chrome_app details
gws_get_chrome_app details
[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.
gws_get_chrome_connector_config details
gws_get_chrome_connector_config details
[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.
gws_get_chrome_profile details
gws_get_chrome_profile details
[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.
gws_get_chrome_profile_command details
gws_get_chrome_profile_command details
[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.
gws_get_chrome_security_insights_status details
gws_get_chrome_security_insights_status details
[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.
gws_get_chrome_telemetry_device details
gws_get_chrome_telemetry_device details
[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.
gws_get_chrome_telemetry_user details
gws_get_chrome_telemetry_user details
[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.
gws_get_chrome_web_app details
gws_get_chrome_web_app details
[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.
gws_list_chrome_connector_configs details
gws_list_chrome_connector_configs details
[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.
gws_list_chrome_devices_requesting_extension details
gws_list_chrome_devices_requesting_extension details
[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.
gws_list_chrome_print_jobs details
gws_list_chrome_print_jobs details
[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.
gws_list_chrome_profile_commands details
gws_list_chrome_profile_commands details
[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.
gws_list_chrome_profiles details
gws_list_chrome_profiles details
[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.
gws_list_chrome_telemetry_devices details
gws_list_chrome_telemetry_devices details
[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.
gws_list_chrome_telemetry_events details
gws_list_chrome_telemetry_events details
[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.
gws_list_chrome_telemetry_notification_configs details
gws_list_chrome_telemetry_notification_configs details
[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.
gws_list_chrome_telemetry_users details
gws_list_chrome_telemetry_users details
[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.
gws_list_chrome_users_requesting_extension details
gws_list_chrome_users_requesting_extension details
[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.
gws_move_chrome_third_party_profile_user details
gws_move_chrome_third_party_profile_user details
[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.
gws_patch_chrome_connector_config details
gws_patch_chrome_connector_config details
[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.
gws_query_chrome_content_transfer_breakdowns details
gws_query_chrome_content_transfer_breakdowns details
[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.
gws_query_chrome_content_transfers details
gws_query_chrome_content_transfers details
[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.
gws_query_chrome_url_visit_breakdowns details
gws_query_chrome_url_visit_breakdowns details
[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.
gws_query_chrome_url_visits details
gws_query_chrome_url_visits details
[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.
Gmail content
gws_batch_delete_gmail_messages details
gws_batch_delete_gmail_messages details
[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.
gws_batch_modify_gmail_messages details
gws_batch_modify_gmail_messages details
[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.
gws_create_gmail_draft details
gws_create_gmail_draft details
[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.
gws_create_gmail_label details
gws_create_gmail_label details
[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.
gws_delete_gmail_draft details
gws_delete_gmail_draft details
[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.
gws_delete_gmail_label details
gws_delete_gmail_label details
[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.
gws_delete_gmail_message details
gws_delete_gmail_message details
[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.
gws_delete_gmail_thread details
gws_delete_gmail_thread details
[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.
gws_download_gmail_attachment details
gws_download_gmail_attachment details
[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.
gws_get_gmail_draft details
gws_get_gmail_draft details
[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.
gws_get_gmail_label details
gws_get_gmail_label details
[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.
gws_get_gmail_message details
gws_get_gmail_message details
[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.
gws_get_gmail_profile details
gws_get_gmail_profile details
[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.
gws_get_gmail_thread details
gws_get_gmail_thread details
[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.
gws_import_gmail_message details
gws_import_gmail_message details
[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.
gws_insert_gmail_message details
gws_insert_gmail_message details
[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.
gws_list_gmail_drafts details
gws_list_gmail_drafts details
[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.
gws_list_gmail_history details
gws_list_gmail_history details
[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.
gws_list_gmail_labels details
gws_list_gmail_labels details
[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.
gws_list_gmail_messages details
gws_list_gmail_messages details
[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.
gws_list_gmail_threads details
gws_list_gmail_threads details
[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.
gws_modify_gmail_message details
gws_modify_gmail_message details
[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.
gws_modify_gmail_thread details
gws_modify_gmail_thread details
[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.
gws_patch_gmail_label details
gws_patch_gmail_label details
[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.
gws_send_gmail_draft details
gws_send_gmail_draft details
[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.
gws_send_gmail_message details
gws_send_gmail_message details
[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.
gws_trash_gmail_message details
gws_trash_gmail_message details
[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.
gws_trash_gmail_thread details
gws_trash_gmail_thread details
[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.
gws_untrash_gmail_message details
gws_untrash_gmail_message details
[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.
gws_untrash_gmail_thread details
gws_untrash_gmail_thread details
[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.
gws_update_gmail_draft details
gws_update_gmail_draft details
[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.
gws_update_gmail_label details
gws_update_gmail_label details
[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.
Drive files
gws_approve_drive_approval details
gws_approve_drive_approval details
[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.
gws_cancel_drive_approval details
gws_cancel_drive_approval details
[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.
gws_comment_drive_approval details
gws_comment_drive_approval details
[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.
gws_copy_drive_file details
gws_copy_drive_file details
[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.
gws_create_drive_comment details
gws_create_drive_comment details
[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.
gws_create_drive_file details
gws_create_drive_file details
[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.
gws_create_drive_permission details
gws_create_drive_permission details
[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.
gws_create_drive_reply details
gws_create_drive_reply details
[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.
gws_decline_drive_approval details
gws_decline_drive_approval details
[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.
gws_delete_drive_comment details
gws_delete_drive_comment details
[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.
gws_delete_drive_file details
gws_delete_drive_file details
[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.
gws_delete_drive_permission details
gws_delete_drive_permission details
[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.
gws_delete_drive_reply details
gws_delete_drive_reply details
[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.
gws_delete_drive_revision details
gws_delete_drive_revision details
[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.
gws_download_drive_file details
gws_download_drive_file details
[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.
gws_empty_drive_trash details
gws_empty_drive_trash details
[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.
gws_export_drive_file details
gws_export_drive_file details
[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.
gws_generate_drive_file_ids details
gws_generate_drive_file_ids details
[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.
gws_get_drive_about details
gws_get_drive_about details
[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.
gws_get_drive_access_proposal details
gws_get_drive_access_proposal details
[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.
gws_get_drive_app details
gws_get_drive_app details
[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.
gws_get_drive_approval details
gws_get_drive_approval details
[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.
gws_get_drive_changes_start_token details
gws_get_drive_changes_start_token details
[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.
gws_get_drive_comment details
gws_get_drive_comment details
[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.
gws_get_drive_file details
gws_get_drive_file details
[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.
gws_get_drive_operation details
gws_get_drive_operation details
[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.
gws_get_drive_permission details
gws_get_drive_permission details
[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.
gws_get_drive_reply details
gws_get_drive_reply details
[Google Workspace] Read one reply on a comment. Acts as the named file owner. The reply id comes from gws_list_drive_replies.
gws_get_drive_revision details
gws_get_drive_revision details
[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.
gws_list_drive_access_proposals details
gws_list_drive_access_proposals details
[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.
gws_list_drive_approvals details
gws_list_drive_approvals details
[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.
gws_list_drive_apps details
gws_list_drive_apps details
[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).
gws_list_drive_changes details
gws_list_drive_changes details
[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.
gws_list_drive_comments details
gws_list_drive_comments details
[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.
gws_list_drive_file_labels details
gws_list_drive_file_labels details
[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.
gws_list_drive_files details
gws_list_drive_files details
[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.
gws_list_drive_permissions details
gws_list_drive_permissions details
[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.
gws_list_drive_replies details
gws_list_drive_replies details
[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.
gws_list_drive_revisions details
gws_list_drive_revisions details
[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.
gws_modify_drive_file_labels details
gws_modify_drive_file_labels details
[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.
gws_patch_drive_comment details
gws_patch_drive_comment details
[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.
gws_patch_drive_file details
gws_patch_drive_file details
[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.
gws_patch_drive_permission details
gws_patch_drive_permission details
[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.
gws_patch_drive_reply details
gws_patch_drive_reply details
[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.
gws_patch_drive_revision details
gws_patch_drive_revision details
[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.
gws_reassign_drive_approval details
gws_reassign_drive_approval details
[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.
gws_resolve_drive_access_proposal details
gws_resolve_drive_access_proposal details
[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.
gws_start_drive_approval details
gws_start_drive_approval details
[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.
Calendar
gws_clear_calendar details
gws_clear_calendar details
[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.
gws_create_calendar details
gws_create_calendar details
[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.
gws_create_calendar_acl_rule details
gws_create_calendar_acl_rule details
[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.
gws_create_calendar_event details
gws_create_calendar_event details
[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.
gws_create_calendar_list_entry details
gws_create_calendar_list_entry details
[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.
gws_delete_calendar details
gws_delete_calendar details
[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.
gws_delete_calendar_acl_rule details
gws_delete_calendar_acl_rule details
[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.
gws_delete_calendar_event details
gws_delete_calendar_event details
[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.
gws_delete_calendar_list_entry details
gws_delete_calendar_list_entry details
[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.
gws_get_calendar details
gws_get_calendar details
[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.
gws_get_calendar_acl_rule details
gws_get_calendar_acl_rule details
[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.
gws_get_calendar_colors details
gws_get_calendar_colors details
[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.
gws_get_calendar_event details
gws_get_calendar_event details
[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.
gws_get_calendar_list_entry details
gws_get_calendar_list_entry details
[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.
gws_get_calendar_setting details
gws_get_calendar_setting details
[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.
gws_import_calendar_event details
gws_import_calendar_event details
[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.
gws_list_calendar_acl_rules details
gws_list_calendar_acl_rules details
[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.
gws_list_calendar_event_instances details
gws_list_calendar_event_instances details
[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.
gws_list_calendar_events details
gws_list_calendar_events details
[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.
gws_list_calendar_list details
gws_list_calendar_list details
[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.
gws_list_calendar_settings details
gws_list_calendar_settings details
[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.
gws_move_calendar_event details
gws_move_calendar_event details
[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.
gws_patch_calendar details
gws_patch_calendar details
[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.
gws_patch_calendar_acl_rule details
gws_patch_calendar_acl_rule details
[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.
gws_patch_calendar_event details
gws_patch_calendar_event details
[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.
gws_patch_calendar_list_entry details
gws_patch_calendar_list_entry details
[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.
gws_query_calendar_free_busy details
gws_query_calendar_free_busy details
[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.
gws_quick_add_calendar_event details
gws_quick_add_calendar_event details
[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.
gws_transfer_calendar_ownership details
gws_transfer_calendar_ownership details
[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.
gws_update_calendar details
gws_update_calendar details
[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.
gws_update_calendar_acl_rule details
gws_update_calendar_acl_rule details
[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.
gws_update_calendar_event details
gws_update_calendar_event details
[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.
gws_update_calendar_list_entry details
gws_update_calendar_list_entry details
[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.
People
gws_batch_create_contacts details
gws_batch_create_contacts details
[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.
gws_batch_delete_contacts details
gws_batch_delete_contacts details
[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.
gws_batch_get_contact_groups details
gws_batch_get_contact_groups details
[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.
gws_batch_get_people details
gws_batch_get_people details
[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.
gws_batch_update_contacts details
gws_batch_update_contacts details
[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.
gws_copy_other_contact_to_my_contacts details
gws_copy_other_contact_to_my_contacts details
[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.
gws_create_contact details
gws_create_contact details
[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.
gws_create_contact_group details
gws_create_contact_group details
[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.
gws_delete_contact details
gws_delete_contact details
[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.
gws_delete_contact_group details
gws_delete_contact_group details
[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.
gws_delete_contact_photo details
gws_delete_contact_photo details
[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.
gws_get_contact_group details
gws_get_contact_group details
[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.
gws_get_person details
gws_get_person details
[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.
gws_list_contact_groups details
gws_list_contact_groups details
[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.
gws_list_contacts details
gws_list_contacts details
[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.
gws_list_directory_people details
gws_list_directory_people details
[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.
gws_list_other_contacts details
gws_list_other_contacts details
[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.
gws_modify_contact_group_members details
gws_modify_contact_group_members details
[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.
gws_patch_contact details
gws_patch_contact details
[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.
gws_search_contacts details
gws_search_contacts details
[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.
gws_search_directory_people details
gws_search_directory_people details
[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.
gws_search_other_contacts details
gws_search_other_contacts details
[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.
gws_update_contact_group details
gws_update_contact_group details
[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.
gws_update_contact_photo details
gws_update_contact_photo details
[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.
Tasks
gws_clear_completed_tasks details
gws_clear_completed_tasks details
[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.
gws_create_task details
gws_create_task details
[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.
gws_create_task_list details
gws_create_task_list details
[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.
gws_delete_task details
gws_delete_task details
[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.
gws_delete_task_list details
gws_delete_task_list details
[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.
gws_get_task details
gws_get_task details
[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.
gws_get_task_list details
gws_get_task_list details
[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.
gws_list_task_lists details
gws_list_task_lists details
[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.
gws_list_tasks details
gws_list_tasks details
[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.
gws_move_task details
gws_move_task details
[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.
gws_patch_task details
gws_patch_task details
[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.
gws_patch_task_list details
gws_patch_task_list details
[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.
gws_update_task details
gws_update_task details
[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.
gws_update_task_list details
gws_update_task_list details
[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.
Chat
gws_add_chat_reaction details
gws_add_chat_reaction details
[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.
gws_add_chat_space_member details
gws_add_chat_space_member details
[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.
gws_create_chat_custom_emoji details
gws_create_chat_custom_emoji details
[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.
gws_create_chat_section details
gws_create_chat_section details
[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.
gws_create_chat_space details
gws_create_chat_space details
[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.
gws_delete_chat_custom_emoji details
gws_delete_chat_custom_emoji details
[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.
gws_delete_chat_message details
gws_delete_chat_message details
[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.
gws_delete_chat_section details
gws_delete_chat_section details
[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.
gws_delete_chat_space details
gws_delete_chat_space details
[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.
gws_download_chat_attachment details
gws_download_chat_attachment details
[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.
gws_find_chat_direct_message details
gws_find_chat_direct_message details
[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.
gws_find_chat_group_chats details
gws_find_chat_group_chats details
[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.
gws_get_chat_availability details
gws_get_chat_availability details
[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.
gws_get_chat_custom_emoji details
gws_get_chat_custom_emoji details
[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.
gws_get_chat_message details
gws_get_chat_message details
[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.
gws_get_chat_space details
gws_get_chat_space details
[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.
gws_get_chat_space_event details
gws_get_chat_space_event details
[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.
gws_get_chat_space_member details
gws_get_chat_space_member details
[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.
gws_get_chat_space_notification_setting details
gws_get_chat_space_notification_setting details
[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.
gws_get_chat_space_read_state details
gws_get_chat_space_read_state details
[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.
gws_get_chat_thread_read_state details
gws_get_chat_thread_read_state details
[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.
gws_list_chat_custom_emojis details
gws_list_chat_custom_emojis details
[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.
gws_list_chat_message_pins details
gws_list_chat_message_pins details
[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.
gws_list_chat_messages details
gws_list_chat_messages details
[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.
gws_list_chat_reactions details
gws_list_chat_reactions details
[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.
gws_list_chat_section_items details
gws_list_chat_section_items details
[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.
gws_list_chat_sections details
gws_list_chat_sections details
[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.
gws_list_chat_space_events details
gws_list_chat_space_events details
[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.
gws_list_chat_space_members details
gws_list_chat_space_members details
[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.
gws_list_chat_spaces details
gws_list_chat_spaces details
[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.
gws_mark_chat_active details
gws_mark_chat_active details
[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.
gws_mark_chat_away details
gws_mark_chat_away details
[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.
gws_mark_chat_do_not_disturb details
gws_mark_chat_do_not_disturb details
[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.
gws_move_chat_section_item details
gws_move_chat_section_item details
[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.
gws_patch_chat_availability details
gws_patch_chat_availability details
[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.
gws_patch_chat_message details
gws_patch_chat_message details
[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.
gws_patch_chat_section details
gws_patch_chat_section details
[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.
gws_patch_chat_space details
gws_patch_chat_space details
[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.
gws_patch_chat_space_member details
gws_patch_chat_space_member details
[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.
gws_patch_chat_space_notification_setting details
gws_patch_chat_space_notification_setting details
[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.
gws_patch_chat_space_read_state details
gws_patch_chat_space_read_state details
[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.
gws_pin_chat_message details
gws_pin_chat_message details
[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.
gws_position_chat_section details
gws_position_chat_section details
[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.
gws_remove_chat_reaction details
gws_remove_chat_reaction details
[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.
gws_remove_chat_space_member details
gws_remove_chat_space_member details
[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.
gws_search_chat_messages details
gws_search_chat_messages details
[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.
gws_search_chat_spaces details
gws_search_chat_spaces details
[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.
gws_send_chat_message details
gws_send_chat_message details
[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.
gws_setup_chat_space details
gws_setup_chat_space details
[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.
gws_unpin_chat_message details
gws_unpin_chat_message details
[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.
gws_update_chat_message details
gws_update_chat_message details
[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.
Meet
gws_create_meet_space details
gws_create_meet_space details
[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.
gws_end_meet_active_conference details
gws_end_meet_active_conference details
[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.
gws_get_meet_conference_record details
gws_get_meet_conference_record details
[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.
gws_get_meet_participant details
gws_get_meet_participant details
[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.
gws_get_meet_participant_session details
gws_get_meet_participant_session details
[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.
gws_get_meet_recording details
gws_get_meet_recording details
[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.
gws_get_meet_smart_note details
gws_get_meet_smart_note details
[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.
gws_get_meet_space details
gws_get_meet_space details
[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.
gws_get_meet_transcript details
gws_get_meet_transcript details
[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.
gws_get_meet_transcript_entry details
gws_get_meet_transcript_entry details
[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.
gws_list_meet_conference_records details
gws_list_meet_conference_records details
[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.
gws_list_meet_participant_sessions details
gws_list_meet_participant_sessions details
[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.
gws_list_meet_participants details
gws_list_meet_participants details
[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.
gws_list_meet_recordings details
gws_list_meet_recordings details
[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.
gws_list_meet_smart_notes details
gws_list_meet_smart_notes details
[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.
gws_list_meet_transcript_entries details
gws_list_meet_transcript_entries details
[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.
gws_list_meet_transcripts details
gws_list_meet_transcripts details
[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.
gws_patch_meet_space details
gws_patch_meet_space details
[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.
Keep
gws_create_keep_note details
gws_create_keep_note details
[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.
gws_delete_keep_note details
gws_delete_keep_note details
[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.
gws_download_keep_attachment details
gws_download_keep_attachment details
[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.
gws_get_keep_note details
gws_get_keep_note details
[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.
gws_list_keep_notes details
gws_list_keep_notes details
[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.
gws_share_keep_note details
gws_share_keep_note details
gws_unshare_keep_note details
gws_unshare_keep_note details
More in Tools Reference
Atera ToolsAuvik ToolsAvanan (Check Point Harmony Email) ToolsConnectWise Sell ToolsStill need help? Ask the team