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


Apps starting with S. 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.

## S3

- **n8n node:** [S3](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.s3/) (`n8n-nodes-base.s3`, version 1), 12 actions.
- **n8n performs it:** runs on the n8n credential *S3* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/s3/)).
- **Veefore performs it:** not available. An S3-compatible server is signed for its own host and region, which Veefore does not do; n8n performs it.
- **Get the key:** [cloud.digitalocean.com](https://cloud.digitalocean.com/account/api/spaces)

**S3 in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a bucket | n8n performs it | `name` |
| Delete a bucket | n8n performs it | `name` |
| Get many buckets | n8n performs it | — |
| Search a bucket | n8n performs it | `bucketName` |
| Copy a file | n8n performs it | `sourcePath`, `destinationPath` |
| Delete a file | n8n performs it | `bucketName`, `fileKey` |
| Download a file | n8n performs it | `bucketName`, `fileKey`, `binaryPropertyName` |
| Get many files | n8n performs it | `bucketName` |
| Upload a file | n8n performs it | `bucketName`, `binaryPropertyName` |
| Create a folder | n8n performs it | `bucketName`, `folderName` |
| Delete a folder | n8n performs it | `bucketName`, `folderKey` |
| Get many folders | n8n performs it | `bucketName` |

## Salesforce

- **n8n node:** [Salesforce](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.salesforce/) (`n8n-nodes-base.salesforce`, version 1.1), 65 actions.
- **n8n performs it:** runs on the n8n credential *Salesforce OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/salesforce/)).
- **Veefore performs it:** 65 of 65 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://login.salesforce.com/services/oauth2/token` (scope `full refresh_token`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://{instanceUrl}/services/data/v59.0`.
- **Get the key:** [login.salesforce.com](https://login.salesforce.com/lightning/setup/NavigationMenus/home)

**Salesforce in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Add a note to an account | `POST /sobjects/note` | `accountId`, `title`, `instanceUrl` |
| Create an account | `PATCH /sobjects/account/{externalId}/{externalIdValue}` | `name`, `instanceUrl`, `externalId`, `externalIdValue` |
| Create or update an account | `PATCH /sobjects/account/{externalId}/{externalIdValue}` | `externalId`, `externalIdValue`, `name`, `instanceUrl` |
| Delete an account | `DELETE /sobjects/account/{accountId}` | `accountId`, `instanceUrl` |
| Get an account | `GET /sobjects/account/{accountId}` | `accountId`, `instanceUrl` |
| Get many accounts | `GET /query` | `instanceUrl` |
| Get an account summary | `GET /sobjects/account` | `instanceUrl` |
| Update an account | `PATCH /sobjects/account/{accountId}` | `accountId`, `instanceUrl` |
| Create an attachment | `POST /sobjects/attachment` | `parentId`, `name`, `binaryPropertyName`, `instanceUrl` |
| Delete an attachment | `DELETE /sobjects/attachment/{attachmentId}` | `attachmentId`, `instanceUrl` |
| Get an attachment | `GET /sobjects/attachment/{attachmentId}` | `attachmentId`, `instanceUrl` |
| Get many attachments | `GET /query` | `instanceUrl` |
| Get an attachment summary | `GET /sobjects/attachment` | `instanceUrl` |
| Update an attachment | `PATCH /sobjects/attachment/{attachmentId}` | `attachmentId`, `instanceUrl` |
| Add a comment to a case | `POST /sobjects/casecomment` | `caseId`, `instanceUrl` |
| Create a case | `POST /sobjects/case` | `type`, `instanceUrl` |
| Delete a case | `DELETE /sobjects/case/{caseId}` | `caseId`, `instanceUrl` |
| Get a case | `GET /sobjects/case/{caseId}` | `caseId`, `instanceUrl` |
| Get many cases | `GET /query` | `instanceUrl` |
| Get a case summary | `GET /sobjects/case` | `instanceUrl` |
| Update a case | `PATCH /sobjects/case/{caseId}` | `caseId`, `instanceUrl` |
| Add a contact to a campaign | `POST /sobjects/CampaignMember` | `contactId`, `campaignId`, `instanceUrl` |
| Add a note to a contact | `POST /sobjects/note` | `contactId`, `title`, `instanceUrl` |
| Create a contact | `PATCH /sobjects/contact/{externalId}/{externalIdValue}` | `lastname`, `instanceUrl`, `externalId`, `externalIdValue` |
| Create or update a contact | `PATCH /sobjects/contact/{externalId}/{externalIdValue}` | `externalId`, `externalIdValue`, `lastname`, `instanceUrl` |
| Delete a contact | `DELETE /sobjects/contact/{contactId}` | `contactId`, `instanceUrl` |
| Get a contact | `GET /sobjects/contact/{contactId}` | `contactId`, `instanceUrl` |
| Get many contacts | `GET /query` | `instanceUrl` |
| Get a contact summary | `GET /sobjects/contact` | `instanceUrl` |
| Update a contact | `PATCH /sobjects/contact/{contactId}` | `contactId`, `instanceUrl` |
| Create a custom object | `PATCH /sobjects/{customObject}/{externalId}/{externalIdValue}` | `customObject`, `instanceUrl`, `externalId`, `externalIdValue` |
| Create or update a custom object | `PATCH /sobjects/{customObject}/{externalId}/{externalIdValue}` | `customObject`, `externalId`, `externalIdValue`, `instanceUrl` |
| Delete a custom object | `DELETE /sobjects/{customObject}/{recordId}` | `customObject`, `recordId`, `instanceUrl` |
| Get a custom object | `GET /sobjects/{customObject}/{recordId}` | `customObject`, `recordId`, `instanceUrl` |
| Get many custom objects | `GET /query` | `customObject`, `instanceUrl` |
| Update a custom object | `PATCH /sobjects/{customObject}/{recordId}` | `customObject`, `recordId`, `instanceUrl` |
| Upload a document | `POST /sobjects/ContentVersion` | `title`, `binaryPropertyName`, `instanceUrl` |
| Get many flows | `GET /actions/custom/flow` | `instanceUrl` |
| Invoke a flow | `POST /actions/custom/flow/{apiName}` | `apiName`, `instanceUrl` |
| Add a lead to a campaign | `POST /sobjects/CampaignMember` | `leadId`, `campaignId`, `instanceUrl` |
| Add a note to a lead | `POST /sobjects/note` | `leadId`, `title`, `instanceUrl` |
| Create a lead | `PATCH /sobjects/lead/{externalId}/{externalIdValue}` | `company`, `lastname`, `instanceUrl`, `externalId`, `externalIdValue` |
| Create or update a lead | `PATCH /sobjects/lead/{externalId}/{externalIdValue}` | `externalId`, `externalIdValue`, `company`, `lastname`, `instanceUrl` |
| Delete a lead | `DELETE /sobjects/lead/{leadId}` | `leadId`, `instanceUrl` |
| Get a lead | `GET /sobjects/lead/{leadId}` | `leadId`, `instanceUrl` |
| Get many leads | `GET /query` | `instanceUrl` |
| Get a lead summary | `GET /sobjects/lead` | `instanceUrl` |
| Update a lead | `PATCH /sobjects/lead/{leadId}` | `leadId`, `instanceUrl` |
| Add a note to an opportunity | `POST /sobjects/note` | `opportunityId`, `title`, `instanceUrl` |
| Create an opportunity | `PATCH /sobjects/opportunity/{externalId}/{externalIdValue}` | `name`, `closeDate`, `stageName`, `instanceUrl`, `externalId`, `externalIdValue` |
| Create or update an opportunity | `PATCH /sobjects/opportunity/{externalId}/{externalIdValue}` | `externalId`, `externalIdValue`, `name`, `closeDate`, `stageName`, `instanceUrl` |
| Delete an opportunity | `DELETE /sobjects/opportunity/{opportunityId}` | `opportunityId`, `instanceUrl` |
| Get an opportunity | `GET /sobjects/opportunity/{opportunityId}` | `opportunityId`, `instanceUrl` |
| Get many opportunities | `GET /query` | `instanceUrl` |
| Get an opportunity summary | `GET /sobjects/opportunity` | `instanceUrl` |
| Update an opportunity | `PATCH /sobjects/opportunity/{opportunityId}` | `opportunityId`, `instanceUrl` |
| Perform a query | `GET /query` | `query`, `instanceUrl` |
| Create a task | `POST /sobjects/task` | `status`, `instanceUrl` |
| Delete a task | `DELETE /sobjects/task/{taskId}` | `taskId`, `instanceUrl` |
| Get a task | `GET /sobjects/task/{taskId}` | `taskId`, `instanceUrl` |
| Get many tasks | `GET /query` | `instanceUrl` |
| Get a task summary | `GET /sobjects/task` | `instanceUrl` |
| Update a task | `PATCH /sobjects/task/{taskId}` | `taskId`, `instanceUrl` |
| Get a user | `GET /sobjects/user/{userId}` | `userId`, `instanceUrl` |
| Get many users | `GET /query` | `instanceUrl` |

## Salesmate

- **n8n node:** [Salesmate](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.salesmate/) (`n8n-nodes-base.salesmate`, version 1), 15 actions.
- **n8n performs it:** runs on the n8n credential *Salesmate API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/salesmate/)).
- **Veefore performs it:** 15 of 15 actions, with the key in a header, as `sessionToken: <key>`.
- **You enter:** Session token, Your Salesmate domain.
- **Also sent:** Your Salesmate domain in the `x-linkname` header.
- **API address:** `https://apis.salesmate.io`.
- **Get the key:** [salesmate.io](https://www.salesmate.io/)

**Salesmate in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create an activity | `POST /v1/activities` | `title`, `owner`, `type` |
| Delete an activity | `DELETE /v1/activities/{id}` | `id` |
| Get an activity | `GET /v1/activities/{id}` | `id` |
| Get many activities | `POST /v2/activities/search` | — |
| Update an activity | `PUT /v1/activities/{id}` | `id` |
| Create a company | `POST /v1/companies` | `name`, `owner` |
| Delete a company | `DELETE /v1/companies/{companyId}` | `id`, `companyId` |
| Get a company | `GET /v1/companies/{id}` | `id` |
| Get many companies | `POST /v2/companies/search` | — |
| Update a company | `PUT /v1/companies/{id}` | `id` |
| Create a deal | `POST /v1/deals` | `title`, `owner`, `primaryContact`, `pipeline`, `status`, `stage` and 1 more |
| Delete a deal | `DELETE /v1/deals/{id}` | `id` |
| Get a deal | `GET /v1/deals/{id}` | `id` |
| Get many deals | `POST /v2/deals/search` | — |
| Update a deal | `PUT /v1/deals/{id}` | `id` |

## SeaTable

- **n8n node:** [SeaTable](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.seatable/) (`n8n-nodes-base.seaTable`, version 2), 16 actions.
- **n8n performs it:** runs on the n8n credential *SeaTable API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/seatable/)).
- **Veefore performs it:** not available. SeaTable first exchanges the API token for a base token; n8n performs it.
- **Get the key:** [cloud.seatable.io](https://cloud.seatable.io/)

**SeaTable in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a row | n8n performs it | `tableName` |
| Delete a row | n8n performs it | `tableName`, `rowId` |
| Get a row | n8n performs it | `tableName`, `rowId` |
| Get many rows | n8n performs it | `tableName` |
| Add a row lock | n8n performs it | `tableName`, `rowId` |
| Search a row by keyword | n8n performs it | `tableName`, `searchColumn`, `searchTerm` |
| Remove a row lock | n8n performs it | `tableName`, `rowId` |
| Update a row | n8n performs it | `tableName`, `rowId` |
| Create a snapshot | n8n performs it | — |
| Get metadata of a base | n8n performs it | — |
| Get username from email or name | n8n performs it | `searchString` |
| Add a row link | n8n performs it | `tableName`, `linkColumn`, `linkColumnSourceId`, `linkColumnTargetId` |
| List row links | n8n performs it | `tableName`, `linkColumn`, `rowId` |
| Remove a row link | n8n performs it | `tableName`, `linkColumn`, `linkColumnSourceId`, `linkColumnTargetId` |
| Get the public URL from asset path | n8n performs it | `assetPath` |
| Upload a file or image | n8n performs it | `tableName`, `uploadColumn`, `rowId`, `dataPropertyName` |

## SecurityScorecard

- **n8n node:** [SecurityScorecard](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.securityscorecard/) (`n8n-nodes-base.securityScorecard`, version 1), 19 actions.
- **n8n performs it:** runs on the n8n credential *SecurityScorecard API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/securityscorecard/)).
- **Veefore performs it:** 18 of 19 actions, with the key in a header, as `Authorization: Token <key>`.
- **You enter:** API key.
- **API address:** `https://api.securityscorecard.io`.
- **Get the key:** [securityscorecard.readme.io](https://securityscorecard.readme.io/docs/getting-started#step-1-get-an-api-key)

**SecurityScorecard in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a company factor scores and issue counts | `GET /companies/{scorecardIdentifier}/factors` | `scorecardIdentifier` |
| Get a company's historical factor scores | `GET /companies/{scorecardIdentifier}/history/factors/score` | `scorecardIdentifier` |
| Get a company's historical scores | `GET /companies/{scorecardIdentifier}/history/factors/score` | `scorecardIdentifier` |
| Get company information and a summary of their scorecard | `GET /companies/{scorecardIdentifier}` | `scorecardIdentifier` |
| Get a company's score improvement plan | `GET /companies/{scorecardIdentifier}/score-plans/by-target/{score}` | `scorecardIdentifier`, `score` |
| Get factor scores for an industry | `GET /industries/{industry}/history/factors` | `industry` |
| Get historical factor scores for an industry | `GET /industries/{industry}/history/factors` | `industry` |
| Get the score for an industry | `GET /industries/{industry}/score` | `industry` |
| Create an invite | `POST /invitations` | `email`, `firstName`, `lastName`, `message` |
| Create a portfolio | `POST /portfolios` | `name` |
| Delete a portfolio | `DELETE /portfolios/{portfolioId}` | `portfolioId` |
| Get many portfolios | `GET /portfolios` | — |
| Update a portfolio | `PUT /portfolios/{portfolioId}` | `portfolioId`, `name` |
| Add a portfolio company | `PUT /portfolios/{portfolioId}/companies/{domain}` | `portfolioId`, `domain` |
| Get many portfolio companies | `GET /portfolios/{portfolioId}/companies` | `portfolioId` |
| Remove a portfolio company | `DELETE /portfolios/{portfolioId}/companies/{domain}` | `portfolioId`, `domain` |
| Download a report | n8n performs it | `url`, `binaryPropertyName` |
| Generate a report | `POST /reports/{report}` | `report`, `scorecardIdentifier` |
| Get many reports | `GET /reports/recent` | — |

## Segment

- **n8n node:** [Segment](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.segment/) (`n8n-nodes-base.segment`, version 1), 4 actions.
- **n8n performs it:** runs on the n8n credential *Segment API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/segment/)).
- **Veefore performs it:** 4 of 4 actions, with HTTP basic auth: username Write key, password empty.
- **You enter:** Write key.
- **API address:** `https://api.segment.io/v1`.
- **Get the key:** [app.segment.com](https://app.segment.com/)

**Segment in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Add a user to a group | `POST /group` | `groupId` |
| Create an identity | `POST /identify` | — |
| Track an event | `POST /track` | `event` |
| Track a page | `POST /page` | — |

## Send Email

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

**Send Email in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Send an Email | n8n performs it | `fromEmail`, `toEmail` |
| Send message and wait for response | n8n performs it | `fromEmail`, `toEmail`, `subject`, `message` |

## SendGrid

- **n8n node:** [SendGrid](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.sendgrid/) (`n8n-nodes-base.sendGrid`, version 1), 10 actions.
- **n8n performs it:** runs on the n8n credential *SendGrid API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/sendgrid/)).
- **Veefore performs it:** 10 of 10 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://api.sendgrid.com/v3`.
- **Get the key:** [app.sendgrid.com](https://app.sendgrid.com/settings/api_keys)

**SendGrid in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create or update a contact | `PUT /marketing/contacts` | `email` |
| Delete a contact | `DELETE /marketing/contacts` | — |
| Get a contact | `POST /marketing/contacts/search` | `by`, `contactId` |
| Get many contacts | `POST /result` | — |
| Create a list | `POST /marketing/lists` | `name` |
| Delete a list | `DELETE /marketing/lists/{listId}` | `listId` |
| Get a list | `GET /marketing/lists/{listId}` | `listId` |
| Get many lists | `GET /result` | — |
| Update a list | `PATCH /marketing/lists/{listId}` | `listId`, `name` |
| Send an email | `POST /mail/send` | `dynamicTemplate`, `contentValue` |

**SendGrid API (OpenAPI)**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Send an email | `POST https://api.sendgrid.com/v3/mail/send` | `personalizations`, `from` |

## Sendy

- **n8n node:** [Sendy](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.sendy/) (`n8n-nodes-base.sendy`, version 1), 6 actions.
- **n8n performs it:** runs on the n8n credential *Sendy API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/sendy/)).
- **Veefore performs it:** 6 of 6 actions, with the key in the request body, as the `api_key` field.
- **You enter:** API key.
- **API address:** `https://{url}`.

**Sendy in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a campaign | `POST /api/campaigns/create.php` | `brandId`, `url` |
| Add a subscriber | `POST /subscribe` | `url` |
| Count a subscriber | `POST /api/subscribers/active-subscriber-count.php` | `url` |
| Delete a subscriber | `POST /api/subscribers/delete.php` | `url` |
| Remove a subscriber | `POST /unsubscribe` | `url` |
| Get subscriber's status | `POST /api/subscribers/subscription-status.php` | `url` |

## Sentry.io

- **n8n node:** [Sentry.io](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.sentryio/) (`n8n-nodes-base.sentryIo`, version 1), 25 actions.
- **n8n performs it:** runs on the n8n credential *Sentry.io API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/sentryio/)).
- **Veefore performs it:** 25 of 25 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://sentry.io`.
- **Get the key:** [sentry.io](https://sentry.io/settings/account/api/auth-tokens/)

**Sentry.io in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get an event | `GET /api/0/projects/{organizationSlug}/{projectSlug}/events/{eventId}/` | `organizationSlug`, `projectSlug`, `eventId` |
| Get many events | `GET /api/0/projects/{organizationSlug}/{projectSlug}/events/` | `organizationSlug`, `projectSlug` |
| Delete an issue | `DELETE /api/0/issues/{issueId}/` | `issueId` |
| Get an issue | `GET /api/0/issues/{issueId}/` | `issueId` |
| Get many issues | `GET /api/0/projects/{organizationSlug}/{projectSlug}/issues/` | `organizationSlug`, `projectSlug` |
| Update an issue | `PUT /api/0/issues/{issueId}/` | `issueId` |
| Create an organization | `POST /api/0/organizations/` | `name` |
| Get an organization | `GET /api/0/organizations/{organizationSlug}/` | `organizationSlug` |
| Get many organizations | `GET /api/0/organizations/` | — |
| Update an organization | `PUT /api/0/organizations/{organization_slug}/` | `organization_slug` |
| Create a project | `POST /api/0/teams/{organizationSlug}/{teamSlug}/projects/` | `organizationSlug`, `teamSlug`, `name` |
| Delete a project | `DELETE /api/0/projects/{organizationSlug}/{projectSlug}/` | `organizationSlug`, `projectSlug` |
| Get a project | `GET /api/0/projects/{organizationSlug}/{projectSlug}/` | `organizationSlug`, `projectSlug` |
| Get many projects | `GET /api/0/projects/` | — |
| Update a project | `PUT /api/0/projects/{organizationSlug}/{projectSlug}/` | `organizationSlug`, `projectSlug` |
| Create a release | `POST /api/0/organizations/{organizationSlug}/releases/` | `organizationSlug`, `version`, `url`, `projects` |
| Delete a release | `DELETE /api/0/organizations/{organizationSlug}/releases/{version}/` | `organizationSlug`, `version` |
| Get a release by version ID | `GET /api/0/organizations/{organizationSlug}/releases/{version}/` | `organizationSlug`, `version` |
| Get many releases | `GET /api/0/organizations/{organizationSlug}/releases/` | `organizationSlug` |
| Update a release | `PUT /api/0/organizations/{organizationSlug}/releases/{version}/` | `organizationSlug`, `version` |
| Create a team | `POST /api/0/organizations/{organizationSlug}/teams/` | `organizationSlug`, `name` |
| Delete a team | `DELETE /api/0/teams/{organizationSlug}/{teamSlug}/` | `organizationSlug`, `teamSlug` |
| Get a team | `GET /api/0/teams/{organizationSlug}/{teamSlug}/` | `organizationSlug`, `teamSlug` |
| Get many teams | `GET /api/0/organizations/{organizationSlug}/teams/` | `organizationSlug` |
| Update a team | `PUT /api/0/teams/{organizationSlug}/{teamSlug}/` | `organizationSlug`, `teamSlug` |

## ServiceNow

- **n8n node:** [ServiceNow](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.servicenow/) (`n8n-nodes-base.serviceNow`, version 1), 25 actions.
- **n8n performs it:** runs on the n8n credential *ServiceNow OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/servicenow/)).
- **Veefore performs it:** 25 of 25 actions, with HTTP basic auth: username User, password Password.
- **You enter:** User, Password.
- **API address:** `https://{subdomain}.service-now.com/api`.
- **Get the key:** [developer.servicenow.com](https://developer.servicenow.com/)

**ServiceNow in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Upload an attachment | `POST /now/attachment/file` | `tableName`, `id`, `inputDataFieldName`, `subdomain` |
| Delete an attachment | `DELETE /now/attachment/{attachmentId}` | `attachmentId`, `subdomain` |
| Get an attachment | `GET /now/attachment/{attachmentId}` | `attachmentId`, `download`, `subdomain` |
| Get many attachments | `GET /now/attachment` | `tableName`, `download`, `subdomain` |
| Get many business services | `GET /now/table/cmdb_ci_service` | `subdomain` |
| Get many configuration items | `GET /now/table/cmdb_ci` | `subdomain` |
| Get many departments | `GET /now/table/cmn_department` | `subdomain` |
| Get many dictionaries | `GET /now/table/sys_dictionary` | `subdomain` |
| Create an incident | `POST /now/table/incident` | `short_description`, `subdomain` |
| Delete an incident | `DELETE /now/table/incident/{id}` | `id`, `subdomain` |
| Get an incident | `GET /now/table/incident/{id}` | `id`, `subdomain` |
| Get many incidents | `GET /now/table/incident` | `subdomain` |
| Update an incident | `PATCH /now/table/incident/{id}` | `id`, `subdomain` |
| Create a table record | `POST /now/table/{tableName}` | `tableName`, `subdomain` |
| Delete a table record | `DELETE /now/table/{tableName}/{id}` | `tableName`, `id`, `subdomain` |
| Get a table record | `GET /now/table/{tableName}/{id}` | `tableName`, `id`, `subdomain` |
| Get many table records | `GET /now/table/{tableName}` | `tableName`, `subdomain` |
| Update a table record | `PATCH /now/table/{tableName}/{id}` | `tableName`, `id`, `subdomain` |
| Create a user | `POST /now/table/sys_user` | `short_description`, `subdomain` |
| Delete a user | `DELETE /now/table/sys_user/{id}` | `id`, `subdomain` |
| Get a user | `GET /now/table/sys_user/{id}` | `getOption`, `id`, `subdomain` |
| Get many users | `GET /now/table/sys_user` | `subdomain` |
| Update a user | `PATCH /now/table/sys_user/{id}` | `id`, `subdomain` |
| Get many user groups | `GET /now/table/sys_user_group` | `subdomain` |
| Get many user roles | `GET /now/table/sys_user_role` | `subdomain` |

## seven

- **n8n node:** [seven](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.sms77/) (`n8n-nodes-base.sms77`, version 1), 2 actions.
- **n8n performs it:** runs on the n8n credential *seven API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/sms77/)).
- **Veefore performs it:** 2 of 2 actions, with the key in a header, as `X-Api-Key: <key>`.
- **You enter:** API key.
- **API address:** `https://gateway.seven.io/api`.
- **Get the key:** [app.seven.io](https://app.seven.io/developer#create-api-key)

**seven in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Send an SMS | `POST /sms` | `to`, `message` |
| Convert text to voice | `POST /voice` | `to`, `message` |

## Shopify

- **n8n node:** [Shopify](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.shopify/) (`n8n-nodes-base.shopify`, version 1), 10 actions.
- **n8n performs it:** runs on the n8n credential *Shopify API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/shopify/)).
- **Veefore performs it:** 10 of 10 actions, with the key in a header, as `X-Shopify-Access-Token: <key>`.
- **You enter:** API key.
- **API address:** `https://{shopSubdomain}.myshopify.com/admin/api/2024-07`.
- **Get the key:** [shopify.dev](https://shopify.dev/docs/apps/build/authentication-authorization/access-token-types/generate-app-access-tokens-admin)

**Shopify in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create an order | `POST /orders.json` | `shopSubdomain` |
| Delete an order | `DELETE /orders/{orderId}.json` | `orderId`, `shopSubdomain` |
| Get an order | `GET /orders/{orderId}.json` | `orderId`, `shopSubdomain` |
| Get many orders | `GET /orders.json` | `shopSubdomain` |
| Update an order | `PUT /orders/{orderId}.json` | `orderId`, `shopSubdomain` |
| Create a product | `POST /products.json` | `title`, `shopSubdomain` |
| Delete a product | `DELETE /products/{productId}.json` | `productId`, `shopSubdomain` |
| Get a product | `GET /products/{productId}.json` | `productId`, `shopSubdomain` |
| Get many products | `GET /products.json` | `shopSubdomain` |
| Update a product | `PUT /products/{productId}.json` | `productId`, `shopSubdomain` |

## SIGNL4

- **n8n node:** [SIGNL4](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.signl4/) (`n8n-nodes-base.signl4`, version 1), 2 actions.
- **n8n performs it:** runs on the n8n credential *SIGNL4 Webhook* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/signl4/)).
- **Veefore performs it:** 2 of 2 actions, with the key in the URL path, where the endpoint has `{credential}`.
- **You enter:** API key.
- **API address:** `https://connect.signl4.com/webhook/{credential}`.
- **Get the key:** [account.signl4.com](https://account.signl4.com/)

**SIGNL4 in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Send an alert | `POST https://connect.signl4.com/webhook/{credential}` | — |
| Resolve an alert | `POST https://connect.signl4.com/webhook/{credential}` | — |

## Slack

- **n8n node:** [Slack](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/) (`n8n-nodes-base.slack`, version 2.7), 48 actions.
- **n8n performs it:** runs on the n8n credential *Slack API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/slack/)).
- **Veefore performs it:** 47 of 48 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://slack.com/api`.
- **Get the key:** [api.slack.com](https://api.slack.com/apps)

**Slack in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Archive a channel | `POST /conversations.archive` | — |
| Close a channel | `POST /conversations.close` | `channelId` |
| Create a channel | `POST /conversations.create` | `channelId`, `channelVisibility` |
| Get a channel | `POST /conversations.info` | `channelId` |
| Get many channels | `GET /conversations.list` | — |
| Get the history of a channel | `GET /conversations.history` | `channelId` |
| Invite a user to a channel | `POST /conversations.invite` | `channelId`, `userIds` |
| Join a channel | `POST /conversations.join` | `channelId` |
| Kick a user from a channel | `POST /conversations.kick` | `channelId` |
| Leave a channel | `POST /conversations.leave` | `channelId` |
| Get members of a channel | `GET /conversations.members` | `channelId` |
| Open a channel | `POST /conversations.open` | — |
| Rename a channel | `POST /conversations.rename` | `channelId`, `name` |
| Get a thread of messages posted to a channel | `GET /conversations.replies` | `channelId`, `ts` |
| Set the purpose of a channel | `POST /conversations.setPurpose` | `channelId`, `purpose` |
| Set the topic of a channel | `POST /conversations.setTopic` | `channelId`, `topic` |
| Unarchive a channel | `POST /conversations.unarchive` | `channelId` |
| Get a file | `GET /files.info` | — |
| Get many files | `GET /files.list` | — |
| Upload a file | `POST /files.upload` | `binaryPropertyName` |
| Delete a message | `POST /chat.delete` | `select`, `channelId`, `timestamp` |
| Delete a scheduled message | `POST /chat.deleteScheduledMessage` | `channelId`, `scheduledMessageId` |
| Get many scheduled messages | `GET /chat.scheduledMessages.list` | — |
| Get a message permalink | `GET /chat.getPermalink` | `timestamp` |
| Schedule a message | `POST /chat.scheduleMessage` | `select`, `channelId`, `text`, `postAt` |
| Search for messages | `GET /search.messages` | `query` |
| Send a message | `POST /chat.postMessage` | `select`, `channelId`, `text` |
| Send message and wait for response | n8n performs it | `select`, `message` |
| Update a message | `POST /chat.update` | `channelId`, `ts` |
| Add a reaction | `POST /reactions.add` | `channelId`, `timestamp`, `name` |
| Get a reaction | `GET /reactions.get` | `channelId`, `timestamp` |
| Remove a reaction | `POST /reactions.remove` | `channelId`, `timestamp`, `name` |
| Add a star | `POST /stars.add` | `target` |
| Delete a star | `POST /stars.remove` | — |
| Get many stars | `GET /stars.list` | — |
| Get information about a user | `GET /users.info` | — |
| Get many users | `GET /users.list` | — |
| Get a user's profile | `GET /users.profile.get` | — |
| Get a user's presence status | `GET /users.getPresence` | — |
| Look up a user by email | `GET /users.lookupByEmail` | `email` |
| Update a user's profile | `POST /users.profile.set` | — |
| Add users to a user group | `POST /usergroups.users.update` | `userGroupId`, `users` |
| Create a user group | `POST /usergroups.create` | `name` |
| Disable a user group | `POST /usergroups.disable` | `userGroupId` |
| Enable a user group | `POST /usergroups.enable` | `userGroupId` |
| Get many user groups | `GET /usergroups.list` | — |
| Get users from a user group | `GET /usergroups.list` | `userGroupId` |
| Update a user group | `POST /usergroups.update` | `userGroupId` |

**Slack API (OpenAPI)**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Post a message | `POST https://slack.com/api/chat.postMessage` | `channel`, `text` or `blocks` or `attachments` |
| Update a message | `POST https://slack.com/api/chat.update` | `channel`, `ts` |
| Find a user by email | `GET https://slack.com/api/users.lookupByEmail` | `email` |

Use a bot token (xoxb-…) from your Slack app, with the scopes these methods list.

## Snowflake

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

**Snowflake in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Execute a SQL query | n8n performs it | `query` |
| Insert rows in database | n8n performs it | `table` |
| Update rows in database | n8n performs it | `table`, `updateKey` |

## Splunk

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

**Splunk in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a fired alerts report | `GET /services/alerts/fired_alerts` | `baseUrl` |
| Get metrics | `GET /services/alerts/metric_alerts` | `baseUrl` |
| Create a search report | `POST /services/saved/searches` | `searchJobId`, `baseUrl` |
| Delete a search report | `DELETE /services/saved/searches/{reportId}` | `reportId`, `baseUrl` |
| Get a search report | `GET /services/saved/searches/{reportId}` | `reportId`, `baseUrl` |
| Get many search reports | `GET /services/saved/searches` | `baseUrl` |
| Create a search job | `POST /services/search/jobs` | `search`, `baseUrl` |
| Delete a search job | `DELETE /services/search/jobs/{searchJobId}` | `searchJobId`, `baseUrl` |
| Get a search job | `GET /services/search/jobs/{searchJobId}` | `searchJobId`, `baseUrl` |
| Get many search jobs | `GET /services/search/jobs` | `baseUrl` |
| Get the result of a search job | `GET /services/search/jobs/{searchJobId}/results` | `searchJobId`, `baseUrl` |
| Create a user | `POST /services/authentication/users` | `name`, `roles`, `password`, `baseUrl` |
| Delete a user | `DELETE /services/authentication/users/{userId}` | `userId`, `baseUrl` |
| Get a user | `GET /services/authentication/users/{userId}` | `userId`, `baseUrl` |
| Get many users | `GET /services/authentication/users` | `baseUrl` |
| Update a user | `POST /services/authentication/users/{userId}` | `userId`, `baseUrl` |

## Spotify

- **n8n node:** [Spotify](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.spotify/) (`n8n-nodes-base.spotify`, version 1), 30 actions.
- **n8n performs it:** runs on the n8n credential *Spotify OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/spotify/)).
- **Veefore performs it:** 30 of 30 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://accounts.spotify.com/api/token` (scope `user-read-playback-state playlist-read-collaborative user-modify-playback-state playlist-modify-public user-read-currently-playing playlist-read-private user-read-recently-played playlist-modify-private user-library-read user-follow-read`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://api.spotify.com/v1`.
- **Get the key:** [developer.spotify.com](https://developer.spotify.com/documentation/web-api/concepts/apps)

**Spotify in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get an album | `GET /albums/{id}` | `id` |
| Get new album releases | `GET /browse/new-releases` | `returnAll`, `limit` |
| Get an album's tracks by URI or ID | `GET /albums/{id}/tracks` | `id`, `returnAll`, `limit` |
| Search albums by keyword | `GET /search` | `query`, `returnAll`, `limit` |
| Get an artist | `GET /artists/{id}` | `id` |
| Get an artist's albums by URI or ID | `GET /artists/{id}/albums` | `id`, `returnAll`, `limit` |
| Get an artist's related artists by URI or ID | `GET /artists/{id}/related-artists` | `id` |
| Get an artist's top tracks by URI or ID | `GET /artists/{id}/top-tracks` | `id`, `country` |
| Search artists by keyword | `GET /search` | `query`, `returnAll`, `limit` |
| Get liked tracks | `GET /me/tracks` | `returnAll`, `limit` |
| Get your followed artists | `GET /me/following` | `returnAll`, `limit` |
| Add a song to a queue | `POST /me/player/queue` | `id` |
| Get the currently playing track | `GET /me/player/currently-playing` | — |
| Skip to the next track | `POST /me/player/next` | — |
| Pause the player | `PUT /me/player/pause` | — |
| Skip to the previous song | `POST /me/player/previous` | — |
| Get the recently played tracks | `GET /me/player/recently-played` | `returnAll`, `limit` |
| Resume the player | `PUT /me/player/play` | — |
| Set volume on the player | `PUT /me/player/volume` | `volumePercent` |
| Start music on the player | `PUT /me/player/play` | `id` |
| Add an Item to a playlist | `POST /playlists/{id}/tracks` | `id`, `trackID` |
| Create a playlist | `POST /me/playlists` | `name` |
| Get a playlist | `GET /playlists/{id}` | `id` |
| Get a user's playlists | `GET /me/playlists` | `returnAll`, `limit` |
| Get a playlist's tracks by URI or ID | `GET /playlists/{id}/tracks` | `id`, `returnAll`, `limit` |
| Remove an item from a playlist | `DELETE /playlists/{id}/tracks` | `id`, `trackID` |
| Search playlists by keyword | `GET /search` | `query`, `returnAll`, `limit` |
| Get a track | `GET /tracks/{id}` | `id` |
| Get audio features of a track | `GET /audio-features/{id}` | `id` |
| Search tracks by keyword | `GET /search` | `query`, `returnAll`, `limit` |

## Stackby

- **n8n node:** [Stackby](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.stackby/) (`n8n-nodes-base.stackby`, version 1), 4 actions.
- **n8n performs it:** runs on the n8n credential *Stackby API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/stackby/)).
- **Veefore performs it:** 4 of 4 actions, with the key in a header, as `api-key: <key>`.
- **You enter:** API key.
- **API address:** `https://stackby.com/api/betav1`.
- **Get the key:** [stackby.com](https://www.stackby.com/account)

**Stackby in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Append | `POST /rowcreate/{recordKey}` | `stackId`, `table`, `columns`, `recordKey` |
| Delete | `DELETE /rowdelete/{stackId}/{table}` | `stackId`, `table`, `id` |
| List | `GET /rowlist/{stackId}/{table}` | `stackId`, `table` |
| Read | `GET /rowlist/{stackId}/{table}` | `stackId`, `table`, `id` |

## Storyblok

- **n8n node:** [Storyblok](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.storyblok/) (`n8n-nodes-base.storyblok`, version 1), 2 actions.
- **n8n performs it:** runs on the n8n credential *Storyblok Content API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/storyblok/)).
- **Veefore performs it:** 2 of 2 actions, with the key in the query string, as `?token=<key>`.
- **You enter:** Content API token.
- **API address:** `https://api.storyblok.com`.
- **Get the key:** [storyblok.com](https://www.storyblok.com/faq/retrieve-and-generate-access-tokens)

**Storyblok in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a story | `GET /v1/cdn/stories/{identifier}` | `identifier` |
| Get many stories | `GET /v1/cdn/stories` | — |

## Strapi

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

**Strapi in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create an entry | `POST /{contentType}` | `contentType`, `url` |
| Delete an entry | `DELETE /{contentType}/{entryId}` | `contentType`, `entryId`, `url` |
| Get an entry | `GET /{contentType}/{entryId}` | `contentType`, `entryId`, `url` |
| Get many entries | `GET /{contentType}` | `contentType`, `url` |
| Update an entry | `PUT /{contentType}/{entryId}` | `contentType`, `updateKey`, `url`, `entryId` |

## Strava

- **n8n node:** [Strava](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.strava/) (`n8n-nodes-base.strava`, version 1.1), 9 actions.
- **n8n performs it:** runs on the n8n credential *Strava OAuth2 API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/strava/)).
- **Veefore performs it:** 9 of 9 actions, with OAuth 2.0 with a refresh token; Veefore renews access tokens at `https://www.strava.com/oauth/token` (scope `activity:read_all,activity:write`).
- **You enter:** OAuth client ID, Client secret, Refresh token.
- **API address:** `https://www.strava.com/api/v3`.
- **Get the key:** [strava.com](https://www.strava.com/settings/api)

**Strava in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create an activity | `POST /activities` | `name`, `startDate`, `elapsedTime` |
| Get an activity | `GET /activities/{activityId}` | `activityId` |
| Get all activity comments | `GET /activities/{activityId}/comments` | `activityId` |
| Get all activity kudos | `GET /activities/{activityId}/kudos` | `activityId` |
| Get all activity laps | `GET /activities/{activityId}/laps` | `activityId` |
| Get many activities | `GET /activities` | — |
| Get all activity streams | `GET /activities/{activityId}/streams` | `activityId`, `keys` |
| Get all activity zones | `GET /activities/{activityId}/zones` | `activityId` |
| Update an activity | `PUT /activities/{activityId}` | `activityId` |

## Stripe

- **n8n node:** [Stripe](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.stripe/) (`n8n-nodes-base.stripe`, version 1), 20 actions.
- **n8n performs it:** runs on the n8n credential *Stripe API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/stripe/)).
- **Veefore performs it:** 20 of 20 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **API address:** `https://api.stripe.com/v1`.
- **Get the key:** [dashboard.stripe.com](https://dashboard.stripe.com/apikeys)

**Stripe in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Get a balance | `GET /balance` | — |
| Create a charge | `POST /charges` | `customerId`, `amount`, `currency`, `source` |
| Get a charge | `GET /charges/{chargeId}` | `chargeId` |
| Get many charges | `GET /charges` | — |
| Update a charge | `POST /charges/{chargeId}` | `chargeId` |
| Create a coupon | `POST /coupons` | `duration`, `type`, `percentOff` |
| Get many coupons | `GET /coupons` | — |
| Create a customer | `POST /customers` | `name` |
| Delete a customer | `DELETE /customers/{customerId}` | `customerId` |
| Get a customer | `GET /customers/{customerId}` | `customerId` |
| Get many customers | `GET /customers` | — |
| Update a customer | `POST /customers/{customerId}` | `customerId` |
| Add a customer card | `POST /customers/{customerId}/sources` | `customerId`, `token` |
| Get a customer card | `GET /customers/{customerId}/sources/{sourceId}` | `customerId`, `sourceId` |
| Remove a customer card | `DELETE /customers/{customerId}/sources/{cardId}` | `customerId`, `cardId` |
| Create a meter event | `POST /billing/meter_events` | `eventName`, `customerId`, `value` |
| Create a source | `POST /sources` | `customerId`, `type` |
| Delete a source | `DELETE /customers/{customerId}/sources/{sourceId}` | `customerId`, `sourceId` |
| Get a source | `GET /sources/{sourceId}` | `sourceId` |
| Create a token | `POST /tokens` | `type` |

**Stripe API (OpenAPI)**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Refund a payment | `POST https://api.stripe.com/v1/refunds` | `charge` or `payment_intent` |
| Create a customer | `POST https://api.stripe.com/v1/customers` | — |
| Get a customer | `GET https://api.stripe.com/v1/customers/{customer}` | `customer` |
| Search customers | `GET https://api.stripe.com/v1/customers/search` | `query` |
| Get a charge | `GET https://api.stripe.com/v1/charges/{charge}` | `charge` |

Use a restricted key with only the permissions these actions need.

## Supabase

- **n8n node:** [Supabase](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.supabase/) (`n8n-nodes-base.supabase`, version 1), 5 actions.
- **n8n performs it:** runs on the n8n credential *Supabase API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/supabase/)).
- **Veefore performs it:** 5 of 5 actions, with a bearer token, sent as `Authorization: Bearer <token>`.
- **You enter:** Token.
- **Also sent:** the key again in the `apikey` header.
- **API address:** `https://api.supabase.com/v1`.
- **Get the key:** [supabase.com](https://supabase.com/dashboard/project/_/settings/api-keys)

**Supabase in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a row | `POST /{tableId}` | `tableId` |
| Delete a row | `DELETE /{tableId}` | `tableId` |
| Get a row | `GET /{tableId}` | `tableId` |
| Get many rows | `GET /{tableId}` | `tableId` |
| Update a row | `PATCH /{tableId}` | `tableId` |

## SyncroMSP

- **n8n node:** [SyncroMSP](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.syncromsp/) (`n8n-nodes-base.syncroMsp`, version 1), 20 actions.
- **n8n performs it:** runs on the n8n credential *SyncroMSP API* ([how to set it up](https://docs.n8n.io/integrations/builtin/credentials/syncromsp/)).
- **Veefore performs it:** 20 of 20 actions, with the key in the query string, as `?api_key=<key>`.
- **You enter:** API key.
- **API address:** `https://{subdomain}.syncromsp.com/api/v1`.
- **Get the key:** [admin.syncromsp.com](https://admin.syncromsp.com/)

**SyncroMSP in n8n**

| Action | Veefore calls | Fields to fill |
| --- | --- | --- |
| Create a contact | `POST /contacts` | `customerId`, `subdomain` |
| Delete a contact | `DELETE /contacts/{contactId}` | `contactId`, `subdomain` |
| Get a contact | `GET /contacts/{contactId}` | `contactId`, `subdomain` |
| Get many contacts | `GET /contacts` | `subdomain` |
| Update a contact | `PUT /contacts/{contactId}` | `subdomain`, `contactId` |
| Create a customer | `POST /customers` | `subdomain` |
| Delete a customer | `DELETE /customers/{customerId}` | `customerId`, `subdomain` |
| Get a customer | `GET /customers/{customerId}` | `customerId`, `subdomain` |
| Get many customers | `GET /customers` | `subdomain` |
| Update a customer | `PUT /customers/{customerId}` | `subdomain`, `customerId` |
| Create an RMM alert | `POST /rmm_alerts` | `subdomain` |
| Delete an RMM alert | `DELETE /rmm_alerts/{alertId}` | `alertId`, `subdomain` |
| Get an RMM alert | `GET /rmm_alerts/{alertId}` | `alertId`, `subdomain` |
| Get many RMM alerts | `GET /rmm_alerts` | `subdomain` |
| Mute an RMM alert | `POST /rmm_alerts/{alertId}/mute` | `alertId`, `subdomain` |
| Create a ticket | `POST /tickets` | `customerId`, `subject`, `subdomain` |
| Delete a ticket | `DELETE /tickets/{ticketId}` | `ticketId`, `subdomain` |
| Get a ticket | `GET /tickets/{ticketId}` | `subdomain`, `ticketId` |
| Get many tickets | `GET /tickets` | `subdomain` |
| Update a ticket | `PUT /tickets/{ticketId}` | `ticketId`, `subdomain` |
