---
title: "Actions: G"
description: "How to set up each action of the 33 apps starting with G."
label: "G"
generated: "the tool catalog in services/core/src/tool-catalog"
---


Apps starting with G. Add any of these from **Integrations → n8n → Add tools → Browse apps**; see [Set up an action](/build/set-up-actions) for each way a key is sent, and the [catalog index](/reference/actions) for every app.

## GetResponse

- **n8n node:** [GetResponse](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.getresponse/) (`n8n-nodes-base.getResponse`, version 1), 5 actions.
- **n8n performs it:** runs on the n8n credential *GetResponse API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/getresponse/)).
- **Veefore performs it:** 5 of 5 actions, with the key in a header, as `X-Auth-Token: api-key <key>`.
- **You enter:** API key.
- **API address:** `https://api.getresponse.com/v3`.
- **Get the key:** [getresponse.com](https://www.getresponse.com/help/where-do-i-find-the-api-key.html)

**GetResponse in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a contact | `POST /contacts` | — |
| Delete a contact | `DELETE /contacts/{contactId}` | `contactId` |
| Get a contact | `GET /contacts/{contactId}` | `contactId` |
| Get many contacts | `GET /contacts` | — |
| Update a contact | `POST /contacts/{contactId}` | `contactId` |

## Ghost

- **n8n node:** [Ghost](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.ghost/) (`n8n-nodes-base.ghost`, version 1), 2 actions.
- **n8n performs it:** runs on the n8n credential *Ghost Content API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/ghost/)).
- **Veefore performs it:** 2 of 2 actions, with the key in the query string, as `?key=<key>`.
- **You enter:** Content API key.
- **API address:** `https://{url}/ghost/api/{version}`.

**Ghost in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a post | `GET /content/posts/{identifier}` | `by`, `identifier`, `url`, `version` |
| Get many posts | `GET /content/posts` | `url`, `version` |

## Git

- **n8n node:** [Git](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.git/) (`n8n-nodes-base.git`, version 1.1), 15 actions.
- **n8n performs it:** runs on the n8n credential *Git* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/git/)).
- **Veefore performs it:** not available. Git is not a web API (a database, queue, file transfer or local step), so only n8n can perform it.

**Git in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Add a file or folder to commit | n8n performs it | `repositoryPath`, `pathsToAdd` |
| Add configuration property | n8n performs it | `repositoryPath`, `key`, `value` |
| Clone a repository | n8n performs it | `repositoryPath`, `sourceRepository` |
| Commit files or folders to git | n8n performs it | `repositoryPath` |
| Fetch from remote repository | n8n performs it | `repositoryPath` |
| Return current configuration | n8n performs it | `repositoryPath` |
| Return git commit history | n8n performs it | `repositoryPath` |
| Pull from remote repository | n8n performs it | `repositoryPath` |
| Push to remote repository | n8n performs it | `repositoryPath` |
| Push tags to remote repository | n8n performs it | `repositoryPath` |
| Return reference log | n8n performs it | `repositoryPath` |
| Return status of current repository | n8n performs it | `repositoryPath` |
| Switch to a different branch | n8n performs it | `repositoryPath`, `branchName` |
| Create a new tag | n8n performs it | `repositoryPath`, `name` |
| Set up a user | n8n performs it | `repositoryPath` |

## GitHub

- **n8n node:** [GitHub](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.github/) (`n8n-nodes-base.github`, version 1.1), 48 actions.
- **n8n performs it:** runs on the n8n credential *GitHub API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/github/)).
- **Veefore performs it:** 48 of 48 actions, with the key in a header, as `Authorization: token <key>`.
- **You enter:** API key.
- **API address:** `https://api.github.com`.
- **Get the key:** [github.com](https://github.com/settings/personal-access-tokens/new)

**GitHub in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a file | `PUT /repos/{owner}/{repository}/contents/{filePath}` | `owner`, `repository`, `filePath`, `binaryData`, `fileContent`, `commitMessage` |
| Delete a file | `DELETE /repos/{owner}/{repository}/contents/{filePath}` | `owner`, `repository`, `filePath`, `commitMessage` |
| Edit a file | `PUT /repos/{owner}/{repository}/contents/{filePath}` | `owner`, `repository`, `filePath`, `binaryData`, `fileContent`, `commitMessage` |
| Get a file | `GET /repos/{owner}/{repository}/contents/{filePath}` | `owner`, `repository`, `filePath`, `binaryPropertyName` |
| List files | `GET /repos/{owner}/{repository}/contents/{filePath}` | `owner`, `repository`, `filePath` |
| Create an issue | `POST /repos/{owner}/{repository}/issues` | `owner`, `repository`, `title` |
| Create a comment on an issue | `POST /repos/{owner}/{repository}/issues/{issueNumber}/comments` | `owner`, `repository`, `issueNumber` |
| Edit an issue | `PATCH /repos/{owner}/{repository}/issues/{issueNumber}` | `owner`, `repository`, `issueNumber` |
| Get an issue | `GET /repos/{owner}/{repository}/issues/{issueNumber}` | `owner`, `repository`, `issueNumber` |
| Lock an issue | `PUT /repos/{owner}/{repository}/issues/{issueNumber}/lock` | `owner`, `repository`, `issueNumber` |
| Get repositories for an organization | `GET /orgs/{owner}/repos` | `owner` |
| Get members for an organization | `GET /orgs/{owner}/members` | `owner` |
| Create a pull request | `POST /repos/{owner}/{repository}/pulls` | `base`, `head`, `title`, `owner`, `repository` |
| Update a pull request | `PATCH /repos/{owner}/{repository}/pulls/{pullRequestNumber}` | `pullRequestNumber`, `owner`, `repository` |
| Close a pull request | `PATCH /repos/{owner}/{repository}/pulls/{pullRequestNumber}` | `pullRequestNumber`, `owner`, `repository` |
| Reopen a pull request | `PATCH /repos/{owner}/{repository}/pulls/{pullRequestNumber}` | `pullRequestNumber`, `owner`, `repository` |
| Get a pull request | `GET /repos/{owner}/{repository}/pulls/{pullRequestNumber}` | `pullRequestNumber`, `owner`, `repository` |
| Create a comment on a pull request | `POST /repos/{owner}/{repository}/issues/{pullRequestNumber}/comments` | `pullRequestNumber`, `body`, `owner`, `repository` |
| Edit a comment on a pull request | `PATCH /repos/{owner}/{repository}/issues/comments/{commentId}` | `commentId`, `body`, `owner`, `repository` |
| Get a pull request diff | `GET /repos/{owner}/{repository}/pulls/{pullRequestNumber}` | `pullRequestNumber`, `owner`, `repository` |
| Get a pull request patch | `GET /repos/{owner}/{repository}/pulls/{pullRequestNumber}` | `pullRequestNumber`, `owner`, `repository` |
| Merge a pull request | `PUT /repos/{owner}/{repository}/pulls/{pullRequestNumber}/merge` | `pullRequestNumber`, `owner`, `repository` |
| Create a release | `POST /repos/{owner}/{repository}/releases` | `owner`, `repository`, `releaseTag` |
| Delete a release | `DELETE /repos/{owner}/{repository}/releases/{release_id}` | `owner`, `repository`, `release_id` |
| Get a release | `GET /repos/{owner}/{repository}/releases/{release_id}` | `owner`, `repository`, `release_id` |
| Get many releases | `GET /repos/{owner}/{repository}/releases` | `owner`, `repository` |
| Update a release | `PATCH /repos/{owner}/{repository}/releases/{release_id}` | `owner`, `repository`, `release_id` |
| Get a repository | `GET /repos/{owner}/{repository}` | `owner`, `repository` |
| Get issues of a repository | `GET /repos/{owner}/{repository}/issues` | `owner`, `repository` |
| Get the license of a repository | `GET /repos/{owner}/{repository}/license` | `owner`, `repository` |
| Get the profile of a repository | `GET /repos/{owner}/{repository}/community/profile` | `owner`, `repository` |
| Get pull requests of a repository | `GET /repos/{owner}/{repository}/pulls` | `owner`, `repository` |
| List popular paths in a repository | `GET /repos/{owner}/{repository}/traffic/popular/paths` | `owner`, `repository` |
| List the top referrers of a repository | `GET /repos/{owner}/{repository}/traffic/popular/referrers` | `owner`, `repository` |
| Create a review | `POST /repos/{owner}/{repository}/pulls/{pullRequestNumber}/reviews` | `owner`, `repository`, `pullRequestNumber` |
| Get a review | `GET /repos/{owner}/{repository}/pulls/{pullRequestNumber}/reviews/{reviewId}` | `owner`, `repository`, `pullRequestNumber`, `reviewId` |
| Get many reviews | `GET /repos/{owner}/{repository}/pulls/{pullRequestNumber}/reviews` | `owner`, `repository`, `pullRequestNumber` |
| Update a review | `PUT /repos/{owner}/{repository}/pulls/{pullRequestNumber}/reviews/{reviewId}` | `owner`, `repository`, `pullRequestNumber`, `reviewId` |
| Get a user's repositories | `GET /users/{owner}/repos` | `owner` |
| Get a user's issues | `GET /issues` | — |
| Invite a user | `POST /orgs/{organization}/invitations` | `organization`, `email` |
| Disable a workflow | `PUT /repos/{owner}/{repository}/actions/workflows/{workflowId}/disable` | `owner`, `repository`, `workflowId` |
| Dispatch a workflow event | `POST /repos/{owner}/{repository}/actions/workflows/{workflowId}/dispatches` | `owner`, `repository`, `workflowId`, `ref` |
| Dispatch a workflow event and wait for completion | `POST /repos/{owner}/{repository}/actions/workflows/{workflowId}/dispatches` | `owner`, `repository`, `workflowId`, `ref` |
| Enable a workflow | `PUT /repos/{owner}/{repository}/actions/workflows/{workflowId}/enable` | `owner`, `repository`, `workflowId` |
| Get a workflow | `GET /repos/{owner}/{repository}/actions/workflows/{workflowId}` | `owner`, `repository`, `workflowId` |
| Get the usage of a workflow | `GET /repos/{owner}/{repository}/actions/workflows/{workflowId}/timing` | `owner`, `repository`, `workflowId` |
| List workflows | `GET /repos/{owner}/{repository}/actions/workflows` | `owner`, `repository` |

**GitHub API (OpenAPI)**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create an issue | `POST https://api.github.com/repos/{owner}/{repo}/issues` | `owner`, `repo`, `title` |
| Comment on an issue | `POST https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}/comments` | `owner`, `repo`, `issue_number`, `body` |
| Get an issue | `GET https://api.github.com/repos/{owner}/{repo}/issues/{issue_number}` | `owner`, `repo`, `issue_number` |

Use a fine-grained personal access token limited to the repositories involved.

## GitLab

- **n8n node:** [GitLab](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gitlab/) (`n8n-nodes-base.gitlab`, version 1), 18 actions.
- **n8n performs it:** runs on the n8n credential *GitLab API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/gitlab/)).
- **Veefore performs it:** 18 of 18 actions, with the key in a header, as `Private-Token: <key>`.
- **You enter:** API key.
- **API address:** `https://gitlab.com/api/v4`.
- **Get the key:** [docs.gitlab.com](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#personal-access-token-scopes)

**GitLab in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a file | `GET /projects/{owner}%2F{repository}/repository/files/{filePath}` | `owner`, `repository`, `binaryData`, `fileContent`, `commitMessage`, `branch` and 1 more |
| Delete a file | `DELETE /projects/{owner}%2F{repository}/repository/files/{filePath}` | `owner`, `repository`, `commitMessage`, `branch`, `filePath` |
| Edit a file | `GET /projects/{owner}%2F{repository}/repository/files/{filePath}` | `owner`, `repository`, `binaryData`, `fileContent`, `commitMessage`, `branch` and 1 more |
| Get a file | `GET /projects/{owner}%2F{repository}/repository/files/{filePath}` | `owner`, `repository`, `binaryPropertyName`, `filePath` |
| List files | `GET /projects/{owner}%2F{repository}/repository/tree` | `owner`, `repository` |
| Create an issue | `POST /projects/{owner}%2F{repository}/issues` | `owner`, `repository`, `title` |
| Create a comment on an issue | `POST /projects/{owner}%2F{repository}/issues/{issueNumber}/notes` | `owner`, `repository`, `issueNumber` |
| Edit an issue | `PUT /projects/{owner}%2F{repository}/issues/{issueNumber}` | `owner`, `repository`, `issueNumber` |
| Get an issue | `GET /projects/{owner}%2F{repository}/issues/{issueNumber}` | `owner`, `repository`, `issueNumber` |
| Lock an issue | `PUT /projects/{owner}%2F{repository}/issues/{issueNumber}` | `owner`, `repository`, `issueNumber` |
| Create a release | `POST /projects/{owner}%2F{repository}/releases` | `owner`, `repository`, `releaseTag` |
| Delete a release | `DELETE /projects/{projectId}/releases/{tag_name}` | `owner`, `repository`, `projectId`, `tag_name` |
| Get a release | `GET /projects/{projectId}/releases/{tag_name}` | `owner`, `repository`, `projectId`, `tag_name` |
| Get many releases | `GET /projects/{projectId}/releases` | `owner`, `repository`, `projectId` |
| Update a release | `PUT /projects/{projectId}/releases/{tag_name}` | `owner`, `repository`, `projectId`, `tag_name` |
| Get a repository | `GET /projects/{owner}%2F{repository}` | `owner`, `repository` |
| Get issues of a repository | `GET /projects/{owner}%2F{repository}/issues` | `owner`, `repository` |
| Get a user's repositories | `GET /users/{owner}/projects` | `owner` |

## Gmail

- **n8n node:** [Gmail](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/) (`n8n-nodes-base.gmail`, version 2.2), 26 actions.
- **n8n performs it:** runs on the n8n credential *Gmail OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 25 of 26 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/gmail.labels https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.action https://mail.google.com/ https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/gmail.compose`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://www.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Gmail in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Add label to message | `POST /gmail/v1/users/me/messages/{messageId}/modify` | `messageId`, `labelIds` |
| Delete a message | `DELETE /gmail/v1/users/me/messages/{messageId}` | `messageId` |
| Get a message | `GET /gmail/v1/users/me/messages/{messageId}` | `messageId` |
| Get many messages | `GET /gmail/v1/users/me/messages` | — |
| Mark a message as read | `POST /gmail/v1/users/me/messages/{messageId}/modify` | `messageId` |
| Mark a message as unread | `POST /gmail/v1/users/me/messages/{messageId}/modify` | `messageId` |
| Remove label from message | `POST /gmail/v1/users/me/messages/{messageId}/modify` | `messageId`, `labelIds` |
| Reply to a message | `GET /gmail/v1/users/me/messages/{messageId}` | `messageId`, `emailType`, `message` |
| Send a message | `POST /gmail/v1/users/me/messages/send` | `sendTo`, `subject`, `emailType`, `message` |
| Send message and wait for response | n8n performs it | `sendTo`, `subject`, `message` |
| Create a label | `POST /gmail/v1/users/me/labels` | `name` |
| Delete a label | `DELETE /gmail/v1/users/me/labels/{labelId}` | `labelId` |
| Get a label info | `GET /gmail/v1/users/me/labels/{labelId}` | `labelId` |
| Get many labels | `GET /gmail/v1/users/me/labels` | — |
| Create a draft | `POST /gmail/v1/users/me/drafts` | `subject`, `emailType`, `message` |
| Delete a draft | `DELETE /gmail/v1/users/me/drafts/{messageId}` | `messageId` |
| Get a draft | `GET /gmail/v1/users/me/drafts/{messageId}` | `messageId` |
| Get many drafts | `GET /gmail/v1/users/me/drafts` | — |
| Add label to thread | `POST /gmail/v1/users/me/threads/{threadId}/modify` | `threadId`, `labelIds` |
| Delete a thread | `DELETE /gmail/v1/users/me/threads/{threadId}` | `threadId` |
| Get a thread | `GET /gmail/v1/users/me/threads/{threadId}` | `threadId` |
| Get many threads | `GET /gmail/v1/users/me/threads` | — |
| Remove label from thread | `POST /gmail/v1/users/me/threads/{threadId}/modify` | `threadId`, `labelIds` |
| Reply to a message | `GET /gmail/v1/users/me/messages/{messageId}` | `threadId`, `emailType`, `message`, `messageId` |
| Trash a thread | `POST /gmail/v1/users/me/threads/{threadId}/trash` | `threadId` |
| Untrash a thread | `POST /gmail/v1/users/me/threads/{threadId}/untrash` | `threadId` |

## Gong

- **n8n node:** [Gong](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gong/) (`n8n-nodes-base.gong`, version 1), 4 actions.
- **n8n performs it:** runs on the n8n credential *Gong API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/gong/)).
- **Veefore performs it:** 4 of 4 actions, with HTTP basic auth: username Access Key, password Access Key Secret.
- **You enter:** Access Key, Access Key Secret.
- **API address:** `https://api.gong.io`.
- **Get the key:** [gong.app.gong.io](https://gong.app.gong.io/settings/api/documentation)

**Gong in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get call | `POST /v2/calls/extensive` | `call` |
| Get many calls | `POST /v2/calls/extensive` | — |
| Get user | `POST /v2/users/extensive` | `user` |
| Get many users | `POST /v2/users/extensive` | — |

## Google Ads

- **n8n node:** [Google Ads](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googleads/) (`n8n-nodes-base.googleAds`, version 1), 2 actions.
- **n8n performs it:** runs on the n8n credential *Google Ads OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 2 of 2 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/adwords`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://googleads.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Ads in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get many campaigns | `POST /v25/customers/{clientCustomerId}/googleAds:search` | `managerCustomerId`, `clientCustomerId` |
| Get a campaign | `POST /v25/customers/{clientCustomerId}/googleAds:search` | `managerCustomerId`, `clientCustomerId`, `campaignId` |

## Google Analytics

- **n8n node:** [Google Analytics](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googleanalytics/) (`n8n-nodes-base.googleAnalytics`, version 2), 2 actions.
- **n8n performs it:** runs on the n8n credential *Google Analytics OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 2 of 2 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/analytics https://www.googleapis.com/auth/analytics.readonly`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://analyticsreporting.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Analytics in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a report | `POST https://analyticsdata.googleapis.com/v1beta/properties/{propertyId}:runReport` | `propertyId`, `dateRange` |
| Search user activity data | `POST /v4/userActivity:search` | `viewId`, `userId` |

## Google BigQuery

- **n8n node:** [Google BigQuery](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlebigquery/) (`n8n-nodes-base.googleBigQuery`, version 2.1), 2 actions.
- **n8n performs it:** runs on the n8n credential *Google BigQuery OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 2 of 2 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/bigquery https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/drive`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://bigquery.googleapis.com/bigquery`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google BigQuery in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Execute a SQL query | `POST /v2/projects/{projectId}/jobs` | `projectId` |
| Insert rows in a table | `POST /v2/projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll` | `projectId`, `datasetId`, `tableId` |

## Google Books

- **n8n node:** [Google Books](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlebooks/) (`n8n-nodes-base.googleBooks`, version 2), 9 actions.
- **n8n performs it:** runs on the n8n credential *Google Books OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 9 of 9 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/books`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://www.googleapis.com/books`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Books in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a bookshelf | `GET /v1/mylibrary/bookshelves/{shelfId}` | `myLibrary`, `userId`, `shelfId` |
| Get many bookshelves | `GET /v1/mylibrary/bookshelves` | `myLibrary`, `userId` |
| Add a bookshelf volume | `POST /v1/mylibrary/bookshelves/{shelfId}/addVolume` | `shelfId`, `volumeId` |
| Clear a bookshelf volume | `POST /v1/mylibrary/bookshelves/{shelfId}/clearVolumes` | `shelfId` |
| Get many bookshelf volumes | `GET /v1/mylibrary/bookshelves/{shelfId}/volumes` | `myLibrary`, `userId`, `shelfId` |
| Move a bookshelf volume | `POST /v1/mylibrary/bookshelves/{shelfId}/moveVolume` | `shelfId`, `volumeId`, `volumePosition` |
| Remove a bookshelf volume | `POST /v1/mylibrary/bookshelves/{shelfId}/removeVolume` | `shelfId`, `volumeId` |
| Get a volume | `GET /v1/volumes/{volumeId}` | `volumeId` |
| Get many volumes | `GET /v1/volumes?q={searchQuery}` | `searchQuery` |

## Google Business Profile

- **n8n node:** [Google Business Profile](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlebusinessprofile/) (`n8n-nodes-base.googleBusinessProfile`, version 1), 9 actions.
- **n8n performs it:** runs on the n8n credential *Google Business Profile OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 9 of 9 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/business.manage`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://mybusiness.googleapis.com/v4`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Business Profile in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create post | `POST /{account}/{location}/localPosts` | `account`, `location`, `postType`, `summary` |
| Delete post | `DELETE /{post}` | `account`, `location`, `post` |
| Get post | `GET /{post}` | `account`, `location`, `post` |
| Get many posts | `GET /{account}/{location}/localPosts` | `account`, `location` |
| Update a post | `PATCH /{post}` | `account`, `location`, `post` |
| Delete a reply to a review | `DELETE /{account}/{location}/reviews/{review}/reply` | `account`, `location`, `review` |
| Get review | `GET /{account}/{location}/reviews/{review}` | `account`, `location`, `review` |
| Get many reviews | `GET /{account}/{location}/reviews` | `account`, `location`, `limit` |
| Reply to review | `PUT /{account}/{location}/reviews/{review}/reply` | `account`, `location`, `review` |

## Google Calendar

- **n8n node:** [Google Calendar](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlecalendar/) (`n8n-nodes-base.googleCalendar`, version 1.3), 6 actions.
- **n8n performs it:** runs on the n8n credential *Google Calendar OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 6 of 6 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/calendar.events`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://www.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Calendar in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get availability in a calendar | `POST /calendar/v3/freeBusy` | `calendar`, `timeMin`, `timeMax` |
| Create an event | `POST /calendar/v3/calendars/{calendarId}/events` | `calendar`, `start`, `end`, `calendarId` |
| Delete an event | `DELETE /calendar/v3/calendars/{calendarId}/events/{eventId}` | `calendar`, `eventId`, `calendarId` |
| Get an event | `GET /calendar/v3/calendars/{calendarId}/events/{eventId}` | `calendar`, `eventId`, `calendarId` |
| Get many events | `GET /calendar/v3/calendars/{calendarId}/events` | `calendar`, `calendarId` |
| Update an event | `PATCH /calendar/v3/calendars/{calendarId}/events/{eventId}` | `calendar`, `eventId`, `calendarId` |

## Google Chat

- **n8n node:** [Google Chat](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlechat/) (`n8n-nodes-base.googleChat`, version 1), 9 actions.
- **n8n performs it:** runs on the n8n credential *Google Service Account API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** not available. This uses a Google service account, which signs its own tokens; n8n performs it.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Chat in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a member | n8n performs it | `memberId` |
| Get many members | n8n performs it | `spaceId` |
| Create a message | n8n performs it | `spaceId` |
| Delete a message | n8n performs it | `messageId` |
| Get a message | n8n performs it | `messageId` |
| Send message and wait for response | n8n performs it | `spaceId`, `message` |
| Update a message | n8n performs it | `messageId` |
| Get a space | n8n performs it | `spaceId` |
| Get many spaces | n8n performs it | — |

## Google Cloud Firestore

- **n8n node:** [Google Cloud Firestore](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlefirebasecloudfirestore/) (`n8n-nodes-base.googleFirebaseCloudFirestore`, version 1.1), 7 actions.
- **n8n performs it:** runs on the n8n credential *Google Firebase Cloud Firestore OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 7 of 7 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/datastore https://www.googleapis.com/auth/firebase`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://firestore.googleapis.com/v1/projects`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Cloud Firestore in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a document | `POST /{projectId}/databases/{database}/documents/{collection}` | `projectId`, `database`, `collection`, `columns` |
| Create or update a document | `POST /{projectId}/databases/{database}/documents:batchWrite` | `projectId`, `database`, `collection`, `updateKey`, `columns` |
| Delete a document | `DELETE /{projectId}/databases/{database}/documents/{collection}/{documentId}` | `projectId`, `database`, `collection`, `documentId` |
| Get a document | `POST /{projectId}/databases/{database}/documents:batchGet` | `projectId`, `database`, `collection`, `documentId` |
| Get many documents | `GET /{projectId}/databases/{database}/documents/{collection}` | `projectId`, `database`, `collection`, `returnAll` |
| Query a document | `POST /{projectId}/databases/{database}/documents:runQuery` | `projectId`, `database`, `query` |
| Get many collections | `POST /{projectId}/databases/{database}/documents:listCollectionIds` | `projectId`, `database`, `returnAll` |

## Google Cloud Natural Language

- **n8n node:** [Google Cloud Natural Language](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlecloudnaturallanguage/) (`n8n-nodes-base.googleCloudNaturalLanguage`, version 1), 1 action.
- **n8n performs it:** runs on the n8n credential *Google Cloud Natural Language OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 1 of 1 action, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/cloud-language https://www.googleapis.com/auth/cloud-platform`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://language.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Cloud Natural Language in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Analyze sentiment | `POST /v1/documents:analyzeSentiment` | `source`, `content` |

## Google Cloud Realtime Database

- **n8n node:** [Google Cloud Realtime Database](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlefirebaserealtimedatabase/) (`n8n-nodes-base.googleFirebaseRealtimeDatabase`, version 1), 5 actions.
- **n8n performs it:** runs on the n8n credential *Google Firebase Realtime Database OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** no action has an endpoint Veefore can call; n8n performs them.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Cloud Realtime Database in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Write data to a database | n8n performs it | `projectId`, `path`, `attributes` |
| Delete data from a database | n8n performs it | `projectId`, `path` |
| Get a record from a database | n8n performs it | `projectId` |
| Append to a list of data | n8n performs it | `projectId`, `path`, `attributes` |
| Update item in a database | n8n performs it | `projectId`, `path`, `attributes` |

## Google Cloud Storage

- **n8n node:** [Google Cloud Storage](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlecloudstorage/) (`n8n-nodes-base.googleCloudStorage`, version 1.1), 10 actions.
- **n8n performs it:** runs on the n8n credential *Google Cloud Storage OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 10 of 10 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/cloud-platform.read-only https://www.googleapis.com/auth/devstorage.full_control https://www.googleapis.com/auth/devstorage.read_only https://www.googleapis.com/auth/devstorage.read_write`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://storage.googleapis.com/storage/v1`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Cloud Storage in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a new Bucket | `POST /b/` | `projectRLC`, `bucketName` |
| Delete an empty Bucket | `DELETE /b/{bucketName}` | `bucketName` |
| Get a Bucket | `GET /b/{bucketName}` | `bucketName` |
| Get a list of Buckets for a given project | `GET /b/` | `projectRLC` |
| Update the metadata of a Bucket | `PATCH /b/{bucketName}` | `bucketName` |
| Create an object | `POST /b/{bucketName}/o/` | `bucketName`, `objectName` |
| Delete an object from a bucket | `DELETE /b/{bucketName}/o/{objectName}` | `bucketName`, `objectName` |
| Get object data or metadata | `GET /b/{bucketName}/o/{objectName}` | `bucketName`, `objectName` |
| Get a list of objects | `GET /b/{bucketName}/o/` | `bucketName` |
| Update an object's metadata | `PATCH /b/{bucketName}/o/{objectName}` | `bucketName`, `objectName` |

## Google Contacts

- **n8n node:** [Google Contacts](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlecontacts/) (`n8n-nodes-base.googleContacts`, version 1), 5 actions.
- **n8n performs it:** runs on the n8n credential *Google Contacts OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 5 of 5 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/contacts`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://people.googleapis.com/v1`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Contacts in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a contact | `POST /people:createContact` | — |
| Delete a contact | `DELETE /people/{contactId}:deleteContact` | `contactId` |
| Get a contact | `GET /people/{contactId}` | `contactId` |
| Get many contacts | `GET /people:searchContacts` | — |
| Update a contact | `PATCH /people/{contactId}:updateContact` | `contactId` |

## Google Docs

- **n8n node:** [Google Docs](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledocs/) (`n8n-nodes-base.googleDocs`, version 2), 3 actions.
- **n8n performs it:** runs on the n8n credential *Google Docs OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 3 of 3 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/documents https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.file`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://docs.googleapis.com/v1`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Docs in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a document | `POST https://www.googleapis.com/drive/v3/files` | `driveId`, `folderId`, `title` |
| Get a document | `GET /documents/{documentId}` | `documentURL`, `documentId` |
| Update a document | `POST /documents/{documentId}:batchUpdate` | `documentURL`, `documentId` |

## Google Drive

- **n8n node:** [Google Drive](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googledrive/) (`n8n-nodes-base.googleDrive`, version 3), 17 actions.
- **n8n performs it:** runs on the n8n credential *Google Drive OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 17 of 17 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.appdata https://www.googleapis.com/auth/drive.photos.readonly`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://www.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Drive in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Copy file | `POST /drive/v3/files/{fileId}/copy` | `fileId` |
| Create file from text | `POST /drive/v3/files` | — |
| Delete a file | `DELETE /drive/v3/files/{fileId}` | `fileId` |
| Download file | `GET /drive/v3/files/{fileId}` | `fileId` |
| Move file | `PATCH /drive/v3/files/{fileId}` | `fileId`, `driveId`, `folderId` |
| Share file | `POST /drive/v3/files/{fileId}/permissions` | `fileId` |
| Update file | `PATCH /upload/drive/v3/files/{fileId}` | `fileId` |
| Upload file | `POST /upload/drive/v3/files` | `inputDataFieldName`, `driveId`, `folderId` |
| Search files and folders | `GET /files` | — |
| Create folder | `POST /drive/v3/files` | `driveId`, `folderId` |
| Delete folder | `DELETE /drive/v3/files/{folderNoRootId}` | `folderNoRootId` |
| Share folder | `POST /drive/v3/files/{folderNoRootId}/permissions` | `folderNoRootId` |
| Create shared drive | `POST /drive/v3/drives` | — |
| Delete shared drive | `DELETE /drive/v3/drives/{driveId}` | `driveId` |
| Get shared drive | `GET /drive/v3/drives/{driveId}` | `driveId` |
| Get many shared drives | `GET /drives` | — |
| Update shared drive | `PATCH /drive/v3/drives/{driveId}` | `driveId` |

## Google Gemini

- **n8n node:** [Google Gemini](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.googlegemini/) (`@n8n/n8n-nodes-langchain.googleGemini`, version 1.2), 15 actions.
- **n8n performs it:** runs on the n8n credential *Google Gemini(PaLM) Api* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 14 of 15 actions, with the key in a header, as `x-goog-api-key: <key>`.
- **You enter:** API key.
- **API address:** `https://generativelanguage.googleapis.com`.
- **Get the key:** [aistudio.google.com](https://aistudio.google.com/app/apikey)

**Google Gemini in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Analyze audio | `POST /v1beta/{modelId}:generateContent` | `modelId` |
| Transcribe a recording | `POST /v1beta/{modelId}:generateContent` | `modelId` |
| Analyze document | `POST /v1beta/{modelId}:generateContent` | `modelId` |
| Create a File Search store | `POST /v1beta/fileSearchStores` | `displayName` |
| Delete a File Search store | `DELETE /v1beta/{fileSearchStoreName}` | `fileSearchStoreName` |
| List all File Search stores | `GET /v1beta/fileSearchStores` | — |
| Upload a file to a File Search store | `GET /v1beta/{operationName}` | `fileSearchStoreName`, `displayName`, `operationName` |
| Analyze an image | `POST /v1beta/{modelId}:generateContent` | `modelId` |
| Generate an image | `POST /v1beta/{modelId}:generateContent` | `modelId` |
| Edit an image | `POST /v1beta/{model}:generateContent` | `modelId`, `model` |
| Upload a media file | `GET /v1beta/{name}` | `name` |
| Message a model | `POST /v1beta/{modelId}:generateContent` | `modelId` |
| Analyze video | `POST /v1beta/{modelId}:generateContent` | `modelId` |
| Generate a video | `POST /v1beta/{modelId}:predictLongRunning` | `modelId` |
| Download a video | n8n performs it | — |

**Google Gemini API (OpenAPI)**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Generate content with Gemini | `POST https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent` | `model`, `contents` |

Use an API key from Google AI Studio. model is the id alone (gemini-2.5-flash, not models/gemini-2.5-flash); contents is a list such as [{"parts":[{"text":"Hello"}]}].

## Google Perspective

- **n8n node:** [Google Perspective](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googleperspective/) (`n8n-nodes-base.googlePerspective`, version 1), 1 action.
- **n8n performs it:** runs on the n8n credential *Google Perspective OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 1 of 1 action, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/userinfo.email`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://commentanalyzer.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Perspective in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Analyze Comment | `POST /v1alpha1/comments:analyze` | `text` |

## Google Sheets

- **n8n node:** [Google Sheets](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/) (`n8n-nodes-base.googleSheets`, version 4.7), 10 actions.
- **n8n performs it:** runs on the n8n credential *Google Sheets OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 8 of 10 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive.metadata`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://sheets.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Sheets in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create spreadsheet | `POST /v4/spreadsheets` | — |
| Delete spreadsheet | `DELETE https://www.googleapis.com/drive/v3/files/{documentId}` | `documentId` |
| Append or update row in sheet | n8n performs it | `documentId`, `sheetName` |
| Append row in sheet | `POST /v4/spreadsheets/{documentId}/values/{sheetName}:append` | `documentId`, `sheetName` |
| Clear sheet | `POST /v4/spreadsheets/{documentId}/values/{sheetName}:clear` | `documentId`, `sheetName` |
| Create sheet | `POST /v4/spreadsheets/{documentId}:batchUpdate` | `documentId`, `title` |
| Delete sheet | `POST /v4/spreadsheets/{documentId}:batchUpdate` | `documentId`, `sheetName` |
| Delete rows or columns from sheet | `POST /v4/spreadsheets/{documentId}:batchUpdate` | `documentId`, `sheetName` |
| Get row(s) in sheet | `GET /v4/spreadsheets/{documentId}/values/{sheetName}` | `documentId`, `sheetName` |
| Update row in sheet | n8n performs it | `documentId`, `sheetName` |

## Google Slides

- **n8n node:** [Google Slides](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googleslides/) (`n8n-nodes-base.googleSlides`, version 2), 6 actions.
- **n8n performs it:** runs on the n8n credential *Google Slides OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 6 of 6 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/presentations`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://slides.googleapis.com/v1`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Slides in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a page | `GET /presentations/{presentationId}/pages/{pageObjectId}` | `presentationId`, `pageObjectId` |
| Get the thumbnail for a page | `GET /presentations/{presentationId}/pages/{pageObjectId}/thumbnail` | `presentationId`, `pageObjectId` |
| Create a presentation | `POST /presentations` | `title` |
| Get a presentation | `GET /presentations/{presentationId}` | `presentationId` |
| Get slides from a presentation | `GET /presentations/{presentationId}` | `presentationId` |
| Replace text in a presentation | `POST /presentations/{presentationId}:batchUpdate` | `presentationId` |

## Google Tasks

- **n8n node:** [Google Tasks](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googletasks/) (`n8n-nodes-base.googleTasks`, version 1), 5 actions.
- **n8n performs it:** runs on the n8n credential *Google Tasks OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 5 of 5 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/tasks`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://www.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Tasks in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a task | `POST /tasks/v1/lists/{task}/tasks` | `task` |
| Delete a task | `DELETE /tasks/v1/lists/{task}/tasks/{taskId}` | `task`, `taskId` |
| Get a task | `GET /tasks/v1/lists/{task}/tasks/{taskId}` | `task`, `taskId` |
| Get many tasks | `GET /tasks/v1/lists/{task}/tasks` | `task` |
| Update a task | `PATCH /tasks/v1/lists/{task}/tasks/{taskId}` | `task`, `taskId` |

## Google Translate

- **n8n node:** [Google Translate](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googletranslate/) (`n8n-nodes-base.googleTranslate`, version 2), 1 action.
- **n8n performs it:** runs on the n8n credential *Google Translate OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 1 of 1 action, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/cloud-translation`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://translation.googleapis.com`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Translate in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Translate a language | `POST /language/translate/v2` | `text`, `translateTo` |

## Google Workspace Admin

- **n8n node:** [Google Workspace Admin](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gsuiteadmin/) (`n8n-nodes-base.gSuiteAdmin`, version 1), 16 actions.
- **n8n performs it:** runs on the n8n credential *Google Workspace Admin OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/google/)).
- **Veefore performs it:** 16 of 16 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://oauth2.googleapis.com/token` (scope `https://www.googleapis.com/auth/admin.directory.group https://www.googleapis.com/auth/admin.directory.user https://www.googleapis.com/auth/admin.directory.domain.readonly https://www.googleapis.com/auth/admin.directory.userschema.readonly https://www.googleapis.com/auth/admin.directory.device.chromeos https://www.googleapis.com/auth/admin.directory.orgunit.readonly`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://www.googleapis.com/admin`.
- **Get the key:** [console.cloud.google.com](https://console.cloud.google.com/apis/credentials)

**Google Workspace Admin in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get ChromeOS device | `GET /directory/v1/customer/my_customer/devices/chromeos/{deviceId}?projection={projection}` | `deviceId`, `projection` |
| Get many ChromeOS devices | `GET /directory/v1/customer/{customer}/devices/chromeos/` | `projection`, `customer` |
| Update ChromeOS device | `PUT /directory/v1/customer/my_customer/devices/chromeos/{deviceId}` | `deviceId` |
| Change status of ChromeOS device | `POST /directory/v1/customer/my_customer/devices/chromeos/{deviceId}/action` | `deviceId`, `action` |
| Create a group | `POST /directory/v1/groups` | `email` |
| Delete a group | `DELETE /directory/v1/groups/{groupId}` | `groupId` |
| Get a group | `GET /directory/v1/groups/{groupId}` | `groupId` |
| Get many groups | `GET /directory/v1/groups` | — |
| Update a group | `PUT /directory/v1/groups/{groupId}` | `groupId` |
| Add user to group | `POST /directory/v1/groups/{groupId}/members` | `userId`, `groupId` |
| Create a user | `POST /directory/v1/users` | `firstName`, `lastName`, `password`, `domain` |
| Delete a user | `DELETE /directory/v1/users/{userId}` | `userId` |
| Get a user | `GET /directory/v1/users/{userId}` | `userId`, `output`, `projection` |
| Get many users | `GET /directory/v1/users` | `output`, `projection` |
| Remove user from group | `DELETE /directory/v1/groups/{groupId}/members/{userId}` | `userId`, `groupId` |
| Update a user | `PUT /directory/v1/users/{userId}` | `userId` |

## Gotify

- **n8n node:** [Gotify](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gotify/) (`n8n-nodes-base.gotify`, version 1), 3 actions.
- **n8n performs it:** runs on the n8n credential *Gotify API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/gotify/)).
- **Veefore performs it:** 3 of 3 actions, with the key in a header, as `X-Gotify-Key: <key>`.
- **You enter:** App token.
- **API address:** `https://{url}`.
- **Get the key:** [gotify.net](https://gotify.net/docs/pushmsg)

**Gotify in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a message | `POST /message` | `message`, `url` |
| Delete a message | `DELETE /message/{messageId}` | `messageId`, `url` |
| Get many messages | `GET /message` | `url` |

## GoToWebinar

- **n8n node:** [GoToWebinar](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gotowebinar/) (`n8n-nodes-base.goToWebinar`, version 1), 22 actions.
- **n8n performs it:** runs on the n8n credential *GoToWebinar OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/gotowebinar/)).
- **Veefore performs it:** 22 of 22 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://api.getgo.com/oauth/v2/token`.
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://api.getgo.com/G2W/rest/v2`.
- **Get the key:** [developer.goto.com](https://developer.goto.com/)

**GoToWebinar in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get an attendee | `GET /organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}` | `webinarKey`, `sessionKey`, `registrantKey`, `organizerKey` |
| Get many attendees | `GET /organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/attendees` | `webinarKey`, `sessionKey`, `organizerKey` |
| Get details of an attendee | `GET /organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/attendees/{registrantKey}/{details}` | `webinarKey`, `sessionKey`, `registrantKey`, `details`, `organizerKey` |
| Create a coorganizer | `POST /organizers/{organizerKey}/webinars/{webinarKey}/coorganizers` | `webinarKey`, `isExternal`, `organizerKey` |
| Delete a coorganizer | `DELETE /organizers/{organizerKey}/webinars/{webinarKey}/coorganizers/{coorganizerKey}` | `webinarKey`, `isExternal`, `organizerKey`, `coorganizerKey` |
| Get many coorganizers | `GET /organizers/{organizerKey}/webinars/{webinarKey}/coorganizers` | `webinarKey`, `organizerKey` |
| Reinvite a coorganizer | `POST /organizers/{organizerKey}/webinars/{webinarKey}/coorganizers/{coorganizerKey}/resendInvitation` | `webinarKey`, `isExternal`, `organizerKey`, `coorganizerKey` |
| Create a panelist | `POST /organizers/{organizerKey}/webinars/{webinarKey}/panelists` | `name`, `email`, `webinarKey`, `organizerKey` |
| Delete a panelist | `DELETE /organizers/{organizerKey}/webinars/{webinarKey}/panelists/{panelistKey}` | `webinarKey`, `panelistKey`, `organizerKey` |
| Get many panelists | `GET /organizers/{organizerKey}/webinars/{webinarKey}/panelists` | `webinarKey`, `organizerKey` |
| Reinvite a panelist | `POST /organizers/{organizerKey}/webinars/{webinarKey}/panelists/{panelistKey}/resendInvitation` | `webinarKey`, `panelistKey`, `organizerKey` |
| Create a registrant | `POST /organizers/{organizerKey}/webinars/{webinarKey}/registrants` | `webinarKey`, `organizerKey` |
| Delete a registrant | `DELETE /organizers/{organizerKey}/webinars/{webinarKey}/registrants/{registrantKey}` | `webinarKey`, `registrantKey`, `organizerKey` |
| Get a registrant | `GET /organizers/{organizerKey}/webinars/{webinarKey}/registrants/{registrantKey}` | `webinarKey`, `registrantKey`, `organizerKey` |
| Get many registrants | `GET /organizers/{organizerKey}/webinars/{webinarKey}/registrants` | `webinarKey`, `organizerKey` |
| Get a session | `GET /organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}` | `webinarKey`, `sessionKey`, `organizerKey` |
| Get many sessions | `GET /organizers/{organizerKey}/webinars/{webinarKey}/sessions` | `organizerKey`, `webinarKey` |
| Get details on a session | `GET /organizers/{organizerKey}/webinars/{webinarKey}/sessions/{sessionKey}/{details}` | `webinarKey`, `sessionKey`, `organizerKey`, `details` |
| Create a webinar | `POST /organizers/{organizerKey}/webinars` | `subject`, `organizerKey` |
| Get a webinar | `GET /organizers/{organizerKey}/webinars/{webinarKey}` | `webinarKey`, `organizerKey` |
| Get many webinars | `GET /accounts/{accountKey}/webinars` | `accountKey` |
| Update a webinar | `PUT /organizers/{organizerKey}/webinars/{webinarKey}` | `webinarKey`, `notifyParticipants`, `organizerKey` |

## Grafana

- **n8n node:** [Grafana](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.grafana/) (`n8n-nodes-base.grafana`, version 1), 16 actions.
- **n8n performs it:** runs on the n8n credential *Grafana API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/grafana/)).
- **Veefore performs it:** 16 of 16 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://{baseUrl}/api`.
- **Get the key:** [grafana.com](https://grafana.com/docs/grafana/latest/administration/api-keys/#create-an-api-key)

**Grafana in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a dashboard | `POST /dashboards/db` | `title`, `baseUrl` |
| Delete a dashboard | `DELETE /dashboards/uid/{uid}` | `dashboardUidOrUrl`, `baseUrl`, `uid` |
| Get a dashboard | `GET /dashboards/uid/{uid}` | `dashboardUidOrUrl`, `baseUrl`, `uid` |
| Get many dashboards | `GET /search` | `baseUrl` |
| Update a dashboard | `POST /dashboards/db` | `dashboardUidOrUrl`, `baseUrl` |
| Create a team | `POST /teams` | `name`, `baseUrl` |
| Delete a team | `DELETE /teams/{teamId}` | `teamId`, `baseUrl` |
| Get a team | `GET /teams/{teamId}` | `teamId`, `baseUrl` |
| Get many teams | `GET /teams/search` | `baseUrl` |
| Update a team | `PUT /teams/{teamId}` | `teamId`, `baseUrl` |
| Add a team member | `POST /teams/{teamId}/members` | `userId`, `teamId`, `baseUrl` |
| Get many team members | `GET /teams/{teamId}` | `teamId`, `baseUrl` |
| Remove a team member | `DELETE /teams/{teamId}/members/{memberId}` | `memberId`, `teamId`, `baseUrl` |
| Delete a user | `DELETE /org/users/{userId}` | `userId`, `baseUrl` |
| Get many users | `GET /org/users` | `baseUrl` |
| Update a user | `PATCH /org/users/{userId}` | `userId`, `baseUrl` |

## Grist

- **n8n node:** [Grist](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.grist/) (`n8n-nodes-base.grist`, version 1), 5 actions.
- **n8n performs it:** runs on the n8n credential *Grist API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/grist/)).
- **Veefore performs it:** 5 of 5 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://{host}/api`.

**Grist in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Insert or update rows in a table | `PUT /docs/{docId}/tables/{tableId}/records` | `docId`, `tableId`, `host` |
| Create rows in a table | `POST /docs/{docId}/tables/{tableId}/records` | `docId`, `tableId`, `host` |
| Delete rows from a table | `POST /docs/{docId}/tables/{tableId}/data/delete` | `docId`, `tableId`, `rowId`, `host` |
| Read rows from a table | `GET /docs/{docId}/tables/{tableId}/records` | `docId`, `tableId`, `host` |
| Update rows in a table | `PATCH /docs/{docId}/tables/{tableId}/records` | `docId`, `tableId`, `rowId`, `host` |

## Groq

- **Veefore performs it:** 1 action from Groq's OpenAPI document, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **Get the key:** [console.groq.com](https://console.groq.com/keys)

**Groq API (OpenAPI)**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Chat completion with Groq | `POST https://api.groq.com/openai/v1/chat/completions` | `messages`, `model` |

Use an API key from console.groq.com. messages is a list such as [{"role":"user","content":"Hello"}]; model is e.g. llama-3.3-70b-versatile.
